2011-12-19 32 views
5

Estoy usando PayPal con NVP API (usando PHP) para el pago exprés. Estoy creando un registro de factura en la base de datos antes de redirigir al usuario a Paypal. En caso de que el usuario no regrese a mi sitio después del procesamiento, estoy usando IPN para confirmar la compra y luego actualizo el registro de la factura para confirmar el pago. Todavía estoy en el modo de espacio aislado e intentando averiguar cómo ataré la transacción iniciada con NVP a la confirmación que recibo con IPN.Paypal NVP con IPN para confirmación - lo que los une

Necesito verificar si el "PAYMENTREQUEST_n_INVNUM" enviado en el NVP volverá a aparecer como "factura" en la publicación de IPN.

Parece que no puedo probar esto hasta que estoy vivo ya que el Sandbox IPN no parece estar activo con las transacciones de sandbox iniciadas por NVP. ¿Es correcto?

Gracias por su ayuda.

+0

Puede usar un campo personalizado como variable de paso. Asigne una ID y úsela para vincular las transacciones. –

+0

Sí, el campo personalizado fue mi segunda opción para almacenar el número de factura. Esperaba que la 'factura' estuviera dedicada a ese propósito y podría usar datos personalizados para otros datos si fuera necesario. – mseifert

Respuesta

6

Usted puede probar esto en Sandbox. Pero si usa "PayPal NVP", asumo que está utilizando PayPal Express Checkout y llamando a las API SetExpressCheckout y DoExpressCheckoutPayment.
Si ese es el caso, realmente no necesita IPN, porque una transacción solo se completará tan pronto como llame al DoExpressCheckoutPayment.

En otras palabras, los compradores siempre ser redirigido a un ReturnURL especificó en SetExpressCheckout, y se completa la transacción (o no) cuando se llama DoExpressCheckoutPayment en esta página de retorno.

Para obtener el número de factura, puede llamar al GetExpressCheckoutDetails y proporcionar el TOKEN que recuperó anteriormente (también se adjunta al GET de RETURNURL).

Finalmente, marque PAYMENTSTATUS=Completed en la respuesta de la API DoExpressCheckoutPayment para ver si la transacción se completó o no.

+0

Tiene razón, estoy usando PayPal Express Checkout y llamando a las API de SetExpressCheckout y DoExpressCheckoutPayment. Tenía la impresión de que una vez que el usuario hace clic en el botón "Pagar ahora" en el sitio de Paypal se paga. Si por alguna razón el usuario se desconecta de mi sitio antes de ser reencaminado, nunca obtendré la confirmación de la venta. Parece más seguro tener IPN como respaldo para la confirmación. – mseifert

+0

No, la transacción solo se finalizó después de haber llamado 'DoExpressCheckoutPayment' y recibió' PAYMENTSTATUS = Completed' en la respuesta de la API. Es por eso que Express Checkout no muestra el botón "Pagar ahora" en el proceso de pago en el sitio web de PayPal. Más bien, permite que el usuario autorice el pago y, si está satisfecho con él, hace clic en el botón "Continuar" para continuar.El botón 'Continuar' regresa automáticamente a su sitio web, sin demoras, sin problemas, siempre, el 100% del tiempo. Si un comprador no golpea su URL de devolución, simplemente significa que no desea continuar con la transacción de PayPal. – Robert

+0

(Aún así, IPN siempre es bueno tener como respaldo, estoy de acuerdo. PAYMENTREQUEST_0_INVNUM coincidirá con el parámetro 'factura' en el POST IPN). – Robert

0

Gracias Robert por la claridad en el proceso - especialmente useraction = commit.

Finalmente me di cuenta de que podía activar IPN en el Sandbox para mi vendedor de prueba y probar NVP con IPN juntos. Pude verificar que PAYMENTREQUEST_0_INVNUM coincide con el parámetro 'INVOICE' en IPN POST.

Usaré el campo personalizado para pasar el correo electrónico del cliente de mi sistema en caso de que utilicen un correo electrónico diferente para iniciar sesión en PayPal, lo que me permite tener un par de número de correo electrónico y confirmación.