open-pay / openpay-node

Openpay Node.js bindings
29 stars 16 forks source link

Response: "Please specify only one type of card" #19

Closed josegoyo closed 3 years ago

josegoyo commented 4 years ago

Estoy tratando de crear un cargo con el siguiente objeto:

{ "method": "card", "customer" : { "name" : "Juan", "last_name" : "Vazquez Juarez", "phone_number" : "4423456723", "email" : "juan.vazquez@empresa.com.mx" }, "card": { "card_number": "4111111111111111", "holder_name": "John Doe", "expiration_year": "20", "expiration_month": "12", "cvv2": "110" }, "device_session_id" : "00005", "source_id" : "00005", "amount" : 200.00, "description" : "Service Charge", "order_id" : "oid-00721" }

Pero al enviar los datos me regresa el siguiente mensaje:

{ "message": { "http_code": 400, "error_code": 1001, "category": "request", "description": "Please specify only one type of card", "request_id": "ce57b8f5-7ab3-430e-9df5-4238ab054146" } }

En el request agregue en el objeto de card el atributo "type": "debit" haciendo un poco de énfasis al mensaje del response pero aun así me sigue regresando lo mismo, no se si me puedan ayudar con este tema.

Gracias.

bjardon commented 3 years ago

Me parece que el error podría ser que estás especificando un source_id y al mismo tiempo enviando un objeto card, prueba enviando sólo uno; según la implementación que tengas. El source_id funciona cuando la tarjeta ya ha sido tokenizada antes y recibes el token en tu backend, y el objeto card cuando recibes todos los datos de la tarjeta en tu backend. Recuerda que si tu implementación es recibir los datos completos en el backend, debes tener la certificación PCI antes de salir a producción; de lo contrario OpenPay no aprobaría la implementación. Personalmente prefiero utilizar el SDK que tienen para Javascript en el cliente y tokenizar las tarjetas usando esa librería, y después solamente enviar el token al backend. OpenPay se encarga del resto.