Implementei um módulo de cálculo de frete dos correios em um APP. Na IDE, o cálculo roda e funciona normalmente, mas quando instalo o APP no android ou IOS, não funciona. O botão não clica, fica sem reação.
Acredito que possa ser algo relacionado ao DomParser, mas não conheço uma alternativa. Se puderem me indicar como substituir...
A requisição ao Web Service ficou assim:
data () {
return {
deliveryOptions: [],
current: null,
cepOrigem: 54400200, // set here the CEP where products are coming from
cepNumber: 50920515, // this number is set by the user
vlPeso: 1, // total weight
cdFormato: 1, // 1 - box | 2 - roll | 3 - envelop
vlComprimento: 20, // width centimenters
vlAltura: 20, // height centimenters
nVlLargura: 20, // wide centimeters
cdMaoPropria: 'n', // aditional service to only deliver to specific person
vlValorDeclarado: 0, // any aditional value declared to package
sCdAvisoRecebimento: 'n', // aditional service to tell when it is delivered
vlDiametro: 0, // size including the package
indicaCalculo: 3,
selectedDeliveryOption: { price: 0.0 } // value of selected delivery option
}
},
methods: {
inputRadioChange: function(evt) {
for (let i = 0; i < this.deliveryOptions.length; i++) {
if (this.deliveryOptions[i].value === evt.value) {
this.selectedDeliveryOption = {... this.deliveryOptions[i]}
this.selectedDeliveryOption.price = parseFloat(this.deliveryOptions[i].price.replace(',', '.'))
this.current = i;
break;
}
}
},
readDataFromXML: (xmlString) => {
let parser = new DOMParser();
let xmlDoc = parser.parseFromString(xmlString,"text/xml");
let time = (xmlDoc.getElementsByTagName("PrazoEntrega")[0].innerHTML)
let price = (xmlDoc.getElementsByTagName("Valor")[0].innerHTML)
return {time, price}
},
calcFrete: function(e) {
const options = []
// requisição PAC
uni.request({
url: `http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrecoPrazo?nCdEmpresa=&sDsSenha=&sCepOrigem=${this.cepOrigem}&sCepDestino=${this.cepNumber}&nVlPeso=${this.vlPeso}&nCdFormato=${this.cdFormato}&nVlComprimento=${this.vlComprimento}&nVlAltura=${this.vlAltura}&nVlLargura=${this.nVlLargura}&sCdMaoPropria=${this.cdMaoPropria}&nVlValorDeclarado=${this.vlValorDeclarado}&sCdAvisoRecebimento=${this.sCdAvisoRecebimento}&nCdServico=04510&nVlDiametro=${this.vlDiametro}&StrRetorno=xml&nIndicaCalculo=${this.indicaCalculo}`,
methods: 'GET',
success: (res) => {
let parser = new DOMParser();
options.push({...{id: 1, title: 'Correios PAC', value: 'PAC'}, ...this.readDataFromXML(res.data)})
},
})
// requisição SEDEX
uni.request({
url: `http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrecoPrazo?nCdEmpresa=&sDsSenha=&sCepOrigem=${this.cepOrigem}&sCepDestino=${this.cepNumber}&nVlPeso=${this.vlPeso}&nCdFormato=${this.cdFormato}&nVlComprimento=${this.vlComprimento}&nVlAltura=${this.vlAltura}&nVlLargura=${this.nVlLargura}&sCdMaoPropria=${this.cdMaoPropria}&nVlValorDeclarado=${this.vlValorDeclarado}&sCdAvisoRecebimento=${this.sCdAvisoRecebimento}&nCdServico=04014&nVlDiametro=${this.vlDiametro}&StrRetorno=xml&nIndicaCalculo=${this.indicaCalculo}`,
methods: 'GET',
success: (res) => {
let parser = new DOMParser();
options.push({...{id: 2, title: 'Correios SEDEX', value: 'SEDEX'}, ...this.readDataFromXML(res.data)})
this.showDeliveryOptions(options)
},
})
},
showDeliveryOptions (optionsFrete) {
this.deliveryOptions = optionsFrete
this.showList = true
}
}