open-pay / openpay-js

Openpay Javascript bindings
Apache License 2.0
24 stars 28 forks source link

Soporte de lenguaje para mensajes de error #14

Closed israelibp closed 3 years ago

israelibp commented 6 years ago

Considero que deberían agregar soporte para cambiar el idioma de los mensajes de error, ya que estoy trabajando con la librería y todos los mensajes que regresan están en inglés. Yo no tengo problema, pero a los clientes a los que se les van a mostrar los mensajes podrían no saber el idioma lo cual llevaría a un problema con mi proyecto y su no aceptación. Lo que hago es tomar el código de error que regresa la librería y ponerle un mensaje de error genérico para el tipo de error. Pero no tengo manera de traducir los mensajes específicos lo cuál necesito hacer.

angelscabrerag commented 5 years ago

Tengo el mismo problema y hablando a soporte me comnetaron que ya estan en desarrollo de esta funcion. Por el momento yo recibo el error y lo traduzco diferenciandolo con condiciones.

var error_callbak = function(response) {
                var desc = response.data.description != undefined ? response.data.description : response.message;
                var error_code = response.status;
                var error_code2 = response.data.error_code;
                if(error_code === 400 && desc === 'card_number is required, holder_name is required, expiration_year expiration_month is required' ||
                    error_code === 400 && desc === 'holder_name is required, card_number is required, expiration_year expiration_month is required' ||
                    error_code === 400 && desc === 'holder_name is required, expiration_year expiration_month is required' ||
                    error_code === 400 && desc === 'The CVV2 security code is required' ||
                    error_code === 400 && desc === 'holder_name is required' ||
                    error_code === 400 && desc === 'card_number is required, card_number is required' ||
                    error_code === 400 && desc === 'expiration_year expiration_month is required' ||
                    error_code === 400 && desc === 'expiration_month 00 is invalid, valid expirations months are 01 to 12' ||
                    error_code === 400 && desc === 'holder_name is required, expiration_month 00 is invalid, valid expirations months are 01 to 12' ||
                    error_code === 400 && desc === 'card_number is required, holder_name is required, card_number is required' ||
                    error_code === 400 && desc === 'card_number is required, expiration_year expiration_month is required' ||
                    error_code === 400 && desc === 'holder_name is required, card_number is required, card_number is required' ||
                    error_code === 400 && desc === 'holder_name is required, card_number length is invalid' ||
                    error_code === 400 && desc === 'card_number length is invalid') {
                    var error_message = 'Por favor, proporciona todos los datos que se solicitan de la tarjeta.';
                } else if(error_code === 400 && desc === 'cvv2 length must be 3 digits' || error_code === 400 && desc === 'cvv2 length must be 4 digits' || error_code === 400 && desc === 'cvv2 must contain only digits') {
                    var error_message = 'Por favor, proporciona correctamente el código de seguridad de la tarjeta.';
                } else if (error_code === 422 && desc === 'The card number verification digit is invalid') {
                    var error_message = 'Por favor, proporciona de forma correcta todos los datos que se solicitan de la tarjeta.';
                } else if (error_code === 400 && desc === 'The expiration date has already passed') {
                    var error_message = 'Por favor, proporciona de forma correcta la fecha de vencimiento de la tarjeta mes/año.';
                } else if (error_code === 400 && desc === 'card_number must contain only digits') {
                    var error_message = 'Por favor, proporciona de forma correcta el número de la tarjeta.';
                }
MikeG96 commented 4 years ago

Hola ¿hubo alguna actualización para esto?

angelscabrerag commented 4 years ago

Hola ¿hubo alguna actualización para esto?

Aun no, Openpay no ha realizado la impementación que hace más de un año (2018) decian que agregarían. Es lamentable ya que otras soluciones les estan comiendo el mandado ya que la internacionlización de la aplicación es necesaria.

Lekx commented 3 years ago

Y un año despues, ¿saben si ya hay soporte para otros idiomas?

angelscabrerag commented 3 years ago

Y un año despues, ¿saben si ya hay soporte para otros idiomas?

No, aun no lo aplican.

1sergiogarciap commented 2 years ago

Para esto decidí utilizar la traducción en su plugin de woocommerce openpay_cards_gateway.php

switch ($e->getCode()) {
          /* ERRORES GENERALES */
          case '1000':
          case '1004':
          case '1005':
              $msg = 'Servicio no disponible.';
              break;
          /* ERRORES TARJETA */
          case '3001':
          case '3004':
          case '3005':
          case '3007':
              $msg = 'La tarjeta fue rechazada.';
              break;
          case '3002':
              $msg = 'La tarjeta ha expirado.';
              break;
          case '3003':
              $msg = 'La tarjeta no tiene fondos suficientes.';
              break;
          case '3006':
              $msg = 'La operación no esta permitida para este cliente o esta transacción.';
              break;
          case '3008':
              $msg = 'La tarjeta no es soportada en transacciones en línea.';
              break;
          case '3009':
              $msg = 'La tarjeta fue reportada como perdida.';
              break;
          case '3010':
              $msg = 'El banco ha restringido la tarjeta.';
              break;
          case '3011':
              $msg = 'El banco ha solicitado que la tarjeta sea retenida. Contacte al banco.';
              break;
          case '3012':
              $msg = 'Se requiere solicitar al banco autorización para realizar este pago.';
              break;
          default: /* Demás errores 400 */
              $msg = 'La petición no pudo ser procesada.';
              break;
      }
joankent commented 1 year ago

Buen día a todos, les comparto la función PHP que desarrollé tomando en cuenta los errores oficiales de la página openpay, espero que pueda ayudarles.

https://documents.openpay.mx/docs/errors.html

$errorCode = $e->getCode();

function getErrorOpenpay($errorCode){ switch($errorCode){ case '1000': $msg = 'Ocurrió un error interno en el servidor de Openpay'; break; case '1001': $msg = 'El formato de la petición no es JSON, los campos no tienen el formato correcto, o la petición no tiene campos que son requeridos.'; break; case '1002': $msg = 'La llamada no esta autenticada o la autenticación es incorrecta.'; break; case '1003': $msg = 'La operación no se pudo completar por que el valor de uno o más de los parámetros no es correcto.'; break; case '1004': $msg = 'Un servicio necesario para el procesamiento de la transacción no se encuentra disponible.'; break; case '1005': $msg = 'Uno de los recursos requeridos no existe.'; break; case '1006': $msg = 'Ya existe una transacción con el mismo ID de orden.'; break; case '1007': $msg = 'La transferencia de fondos entre una cuenta de banco o tarjeta y la cuenta de Openpay no fue aceptada.'; break; case '1008': $msg = 'Una de las cuentas requeridas en la petición se encuentra desactivada.'; break; case '1009': $msg = 'El cuerpo de la petición es demasiado grande.'; break; case '1010': $msg = 'Se esta utilizando la llave pública para hacer una llamada que requiere la llave privada, o bien, se esta usando la llave privada desde JavaScript.'; break; case '1011': $msg = 'Se solicita un recurso que esta marcado como eliminado.'; break; case '1012': $msg = 'El monto transacción esta fuera de los limites permitidos.'; break; case '1013': $msg = 'La operación no esta permitida para el recurso.'; break; case '1014': $msg = 'La cuenta esta inactiva.'; break; case '1015': $msg = 'No se ha obtenido respuesta de la solicitud realizada al servicio.'; break; case '1016': $msg = 'El mail del comercio ya ha sido procesada.'; break; case '1017': $msg = 'El gateway no se encuentra disponible en ese momento.'; break; case '1018': $msg = 'El número de intentos de cargo es mayor al permitido.'; break; case '1020': $msg = 'El número de dígitos decimales es inválido para esta moneda.'; break; case '1023': $msg = 'Se han terminado las transacciones incluidas en tu paquete. Para contratar otro paquete contacta a soporte@openpay.mx.'; break; case '1024': $msg = 'El monto de la transacción excede su límite de transacciones permitido por TPV'; break; case '1025': $msg = 'Se han bloqueado las transacciones CoDi contratadas en tu plan'; break; case '2001': $msg = 'La cuenta de banco con esta CLABE ya se encuentra registrada en el cliente.'; break; case '2003': $msg = 'El cliente con este identificador externo (External ID) ya existe.'; break; case '2004': $msg = 'El número de tarjeta es invalido.'; break; case '2005': $msg = 'La fecha de expiración de la tarjeta es anterior a la fecha actual.'; break; case '2006': $msg = 'El código de seguridad de la tarjeta (CVV2) no fue proporcionado.'; break; case '2007': $msg = 'El número de tarjeta es de prueba, solamente puede usarse en Sandbox.'; break; case '2008': $msg = 'La tarjeta no es valida para pago con puntos.'; break; case '2009': $msg = 'El código de seguridad de la tarjeta (CVV2) es inválido.'; break; case '2010': $msg = 'Autenticación 3D Secure fallida.'; break; case '2011': $msg = 'Tipo de tarjeta no soportada.'; break; case '3001': $msg = 'La tarjeta fue declinada por el banco.'; break; case '3002': $msg = 'La tarjeta ha expirado.'; break; case '3003': $msg = 'La tarjeta no tiene fondos suficientes.'; break; case '3004': $msg = 'La tarjeta ha sido identificada como una tarjeta robada.'; break; case '3005': $msg = 'La tarjeta ha sido rechazada por el sistema antifraude.'; break; case '3006': $msg = 'La operación no esta permitida para este cliente o esta transacción.'; break; case '3009': $msg = 'La tarjeta fue reportada como perdida.'; break; case '3010': $msg = 'El banco ha restringido la tarjeta.'; break; case '3011': $msg = 'El banco ha solicitado que la tarjeta sea retenida. Contacte al banco.'; break; case '3012': $msg = 'Se requiere solicitar al banco autorización para realizar este pago.'; break; case '3201': $msg = 'Comercio no autorizado para procesar pago a meses sin intereses.'; break; case '3203': $msg = 'Promoción no valida para este tipo de tarjetas.'; break; case '3204': $msg = 'El monto de la transacción es menor al mínimo permitido para la promoción.'; break; case '3205': $msg = 'Promoción no permitida.'; break; case '4001': $msg = 'La cuenta de Openpay no tiene fondos suficientes.'; break; case '4002': $msg = 'La operación no puede ser completada hasta que sean pagadas las comisiones pendientes.'; break; case '6001': $msg = 'El webhook ya ha sido procesado.'; break; case '6002': $msg = 'No se ha podido conectar con el servicio de webhook.'; break; case '6003': $msg = 'El servicio respondió con errores.'; break; default: $msg = 'La petición no pudo ser procesada.'; break; }

    return $msg;
}
MonseGomez21 commented 1 year ago

Hola buena tarde! Este ejemplo solo aplicaría en petición de controlador de MVC, desde c# en pago con tarjeta, ya que desde aquí no arroja un código de error, sino que solo el mensaje:

switch (charge.Description) { case "The card number verification digit is invalid": //2004 response.message = "El número de tarjeta es invalido."; break; case "The expiration date has expired": response.message = "The expiration date has expired"; //2005 break; case "The CVV2 security code is required": response.message = "El código de seguridad de la tarjeta (CVV2) no fue proporcionado."; //2006 break; case "The card number is only valid in sandbox": response.message = "El número de tarjeta es de prueba, solamente puede usarse en Sandbox."; //2007 break; case "The card is not valid for points": response.message = "La tarjeta no es valida para pago con puntos."; //2008 break; case "The CVV2 security code is invalid": response.message = "El código de seguridad de la tarjeta (CVV2) es inválido."; //2009 break; case "3D Secure authentication failed": response.message = "Autenticación 3D Secure fallida."; //2010 break; case "Card product type not supported": response.message = "Tipo de tarjeta no soportada."; //2011 break; case "The card was declined by the bank": response.message = "La tarjeta fue declinada por el banco."; //3001 break; case "The card has expired": response.message = "La tarjeta ha expirado."; //3002 break; case "The card doesn't have sufficient funds": response.message = "La tarjeta no tiene fondos suficientes."; //3003 break; case "The card was reported as stolen": response.message = "La tarjeta ha sido identificada como una tarjeta robada."; //3004 break; case "Fraud risk detected by anti-fraud system --- Found in blacklist": response.message = "La tarjeta ha sido rechazada por el sistema antifraude.— Rechazada por coincidir con registros en lista negra."; //3005 break; case "Request not allowed": response.message = "La operación no esta permitida para este cliente o esta transacción."; //3006 break; case "The card was reported as lost": response.message = "La tarjeta fue reportada como perdida."; //3009 break; case "The bank has restricted the card": response.message = "El banco ha restringido la tarjeta."; //3010 break; case "The bank has requested the card to be retained": response.message = "El banco ha solicitado que la tarjeta sea retenida. Contacte al banco."; //3011 break; case "Bank authorization is required for this charge": response.message = "Se requiere solicitar al banco autorización para realizar este pago."; //3012 break; case "Merchant not authorized to use payment plan": response.message = "Comercio no autorizado para procesar pago a meses sin intereses."; //3201 break; case "Invalid promotion for such card type": response.message = "Promoción no valida para este tipo de tarjetas."; //3203 break; case "Transaction amount is less than minimum for promotion": response.message = "El monto de la transacción es menor al mínimo permitido para la promoción."; //3201 break; case "Promotion not allowed": response.message = "Promoción no permitida."; //3203 break; case "cvv2 length must be 3 digits": response.message = "La longitud CVV2 debe ser de 3 dígitos"; //extra break; case "cvv2 length must be 4 digits": response.message = "La longitud CVV2 debe ser de 3 dígitos"; //extra break; case "The amount must be less than 10000.000": response.message = "La cantidad debe ser inferior a 10,000.000"; //extra break; case "The card was declined.": response.message = "La tarjeta fue declinada"; //extra break; default: if (charge.Description == "") { response.message = "La petición no pudo ser procesada."; //Por si llega vacia } else { response.message = charge.Description; //Por si errores aun faltan de aparecer en la tabla de la documentacion } break;

                }