rgcl / webpay-nodejs

[Spanish/Chile] Módulo no oficial para integrar WebPay Plus en Node.js, con soporte para promesas.
GNU Lesser General Public License v3.0
93 stars 32 forks source link

soap async methods #24

Open ffflabs opened 4 years ago

ffflabs commented 4 years ago

Cambio 1:

node-soap tiene métodos asíncronos nativos, de manera que no es necesario usar el constructor de promesas como envoltorio.

Por ejemplo, en vez de:

     // versión resumida
    _getClient(type) {
      let options={...};
      return new Promise((resolve, reject) => {
       soap.createClient(this.env[type], options, (err, client) => {
          if(err) {
            return reject(err);
          }
          resolve(client);
       });
      });
    }

Se puede hacer:

    _getClient(type) {
      let options={};
      return soap.createClientAsync(this.env[type], options)
      .then(client => {
          return client;
      }).catch(err=>{
        return Promise.reject(err);
      });
    }

(en general todo los los métodos de client soportan funcionar como promesa si se usa el sufijo Async.

Cambio 2

WebpayOneclick también soporta el método nullify cuando la transacción ocurrió en otro dia contable. (https://www.transbankdevelopers.cl/referencia/webpay#anular-un-pago-webpay-oneclick). En rigor se puede llamar directo a this.webpay._getClient('nullify') pero parece mejor tratar a _getClient como método privado y no llamarlo desde fuera de la librería.

Añadí el método nullify a webpayOneclick, aprovechando de usar la sintaxis de promesa que menciono más arriba.

A grandes rasgos:



return this.webpay
      ._getClient('nullify', options)
      .then(client => {
        return client.nullifyAsync({
          nullificationInput: props
        });
      })
      .then(([soapResult, rawResponse, soapHeader, rawRequest]) => {
          return Promise.resolve(soapResult.return);
      })
      .catch(err => {
        return Promise.reject(err);
      });
ffflabs commented 4 years ago

@rgcl ping