2012-07-13 22 views

Respuesta

16

No se puede probar IPN en su servidor local, como IPN se trata del servidor de PayPal iniciar un POST en el servidor a una dirección URL que defina.
Como resultado, su secuencia de comandos de IPN debe ser accesible desde el exterior (o puede usar un túnel como ngrok.me/localtunnel.me).

+3

http://progrium.com/localtunnel/ –

+4

buena adición. Sí, podrías usar localtunnel si estás usando Rails. Sin embargo, tenga en cuenta que PayPal recomienda el puerto 80/443 (HTTP/HTTPS). El 'validador de IPN' no funcionará en puertos que no sean HTTP (S). – Robert

+0

También puede falsificar los datos IPN para probarlos en su host local. Ver mi script a continuación. Necesitará una conexión de red para que el oyente se ponga en contacto con sandbox y php con curl instalado. – user6972

4

Pruebo en localhost. Puede usar un servicio como dyn.com o noip.com o señalar un subdominio a su dirección local si es estático.

8

Puede simular la publicación de IPN de PayPal ejecutando la secuencia de comandos a continuación que hice en su servidor local (necesitará curl instalado). Siempre que su oyente apunte a la caja de arena debe validar. Cambie su oyente a PayPal en vivo y no debe validar.

<?php 
// SIMULATE PAYPAL IPN LOCALLY 
// 
// Sometimes you need to test on your local host and this can be difficult due 
// to IP routing issues. Use this code on your local machine to simulate the 
// same process that the sandbox IPN simulator does when posting to your URL. 
// 
// Run this code in command line or via the browser. It will post IPN data just 
// like Paypal would. If the code you've written to process your IPN data 
// posts back to the sandbox, it should come back as valid. 

// Put the full url to test in $paypal_url, include file extensions if necessary 
$paypal_url = 'http://localhost/paypal_ipn/process'; // IPN listener to test 

//example posted data from paypal IPN 
$test = 'residence_country=US&invoice=abc1234&address_city=San+Jose&first_name=John&payer_id=TESTBUYERID01&mc_fee=0.44&txn_id=421462822&receiver_email=seller%40paypalsandbox.com&custom=xyz123+CUSTOMHASH&payment_date=12%3A40%3A25+27+Aug+2013+PDT&address_country_code=US&address_zip=95131&item_name1=something&mc_handling=2.06&mc_handling1=1.67&tax=2.02&address_name=John+Smith&last_name=Smith&receiver_id=seller%40paypalsandbox.com&verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31AgAAjEU7A5rthY2aP4j1jOIrjuGx&address_country=United+States&payment_status=Completed&address_status=confirmed&business=seller%40paypalsandbox.com&payer_email=buyer%40paypalsandbox.com&notify_version=2.4&txn_type=cart&test_ipn=1&payer_status=unverified&mc_currency=USD&mc_gross=12.34&mc_shipping=3.02&mc_shipping1=1.02&item_number1=AK-1234&address_state=CA&mc_gross1=9.34&payment_type=instant&address_street=123%2C+any+street'; 
/* 
* More detailed breakout of the raw data 
    _POST EXAMPLE ARRAY FROM PAYPAL: 
    Array 
    (
    [residence_country] => US 
    [invoice] => abc1234 
    [address_city] => San Jose 
    [first_name] => John 
    [payer_id] => TESTBUYERID01 
    [mc_fee] => 0.44 
    [txn_id] => 421462822 
    [receiver_email] => [email protected] 
    [custom] => xyz123 CUSTOMHASH 
    [payment_date] => 12:40:25 27 Aug 2013 PDT 
    [address_country_code] => US 
    [address_zip] => 95131 
    [item_name1] => something 
    [mc_handling] => 2.06 
    [mc_handling1] => 1.67 
    [tax] => 2.02 
    [address_name] => John Smith 
    [last_name] => Smith 
    [receiver_id] => [email protected] 
    [verify_sign] => AFcWxV21C7fd0v3bYYYRCpSSRl31AgAAjEU7A5rthY2aP4j1jOIrjuGx 
    [address_country] => United States 
    [payment_status] => Completed 
    [address_status] => confirmed 
    [business] => [email protected] 
    [payer_email] => [email protected] 
    [notify_version] => 2.4 
    [txn_type] => cart 
    [test_ipn] => 1 
    [payer_status] => unverified 
    [mc_currency] => USD 
    [mc_gross] => 12.34 
    [mc_shipping] => 3.02 
    [mc_shipping1] => 1.02 
    [item_number1] => AK-1234 
    [address_state] => CA 
    [mc_gross1] => 9.34 
    [payment_type] => instant 
    [address_street] => 123, any street 
) 
*/ 

//# 
// PayPal IPN processor in PHP 
// fake paypal post to test scripts 
//# 
//---------------------------------------------------------- 
// Create FAKE post from PayPal. 
//---------------------------------------------------------- 

$req = $test; // use test data 

//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL, $paypal_url); 
curl_setopt($ch,CURLOPT_POST, substr_count($req,'&')+1); 
curl_setopt($ch,CURLOPT_POSTFIELDS, $req); 

//execute post 
$result = curl_exec($ch); 

//close connection 
curl_close($ch); 
?> 
+0

necesita cambiar txn_id para cada prueba para evitar duplicar el error de reutilización de la transacción. –

+0

@khaled_webdev ¿evita realmente sandbox la duplicación de txnid? Eso no fue un problema cuando usé esto por última vez. Tu oyente puede verificar esto y rechazar. El sistema de PayPal en vivo también detectaría y rechazaría. – user6972

+0

no es un espacio aislado, sino un registro generado por el paquete ordenado symfony2-paypal-ipn y mi oyente no funciona por segunda vez. Primera vez 'Sucess' y cuando vuelvo a intentarlo recibí un error. –

30

El simulador de IPN de Paypal no funciona con localhost. Sin embargo, puedes simular el simulador :-). Para hacer esto, necesita instalar un complemento/extensión de navegador como poster para firefox o Advanced Rest Client para google chrome.

abrir la aplicación y poner en su url que está escuchando en las respuestas de IPN:

http://localhost/ipn 

poner lo siguiente como sus datos POST y presentar la solicitud:

residence_country=US&invoice=abc1234&address_city=San+Jose&first_name=John&payer_id=TESTBUYERID01&mc_fee=0.44&txn_id=421462822&receiver_email=seller%40paypalsandbox.com&custom=xyz123+CUSTOMHASH&payment_date=12%3A40%3A25+27+Aug+2013+PDT&address_country_code=US&address_zip=95131&item_name1=something&mc_handling=2.06&mc_handling1=1.67&tax=2.02&address_name=John+Smith&last_name=Smith&receiver_id=seller%40paypalsandbox.com&verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31AgAAjEU7A5rthY2aP4j1jOIrjuGx&address_country=United+States&payment_status=Completed&address_status=confirmed&business=seller%40paypalsandbox.com&payer_email=buyer%40paypalsandbox.com&notify_version=2.4&txn_type=cart&test_ipn=1&payer_status=unverified&mc_currency=USD&mc_gross=12.34&mc_shipping=3.02&mc_shipping1=1.02&item_number1=AK-1234&address_state=CA&mc_gross1=9.34&payment_type=instant&address_street=123%2C+any+street 

ACTUALIZACIÓN: Acabo de empezar a usar otra opción que es más fácil, https://localtunnel.me. Para instalar y ejecutar el módulo, haga lo siguiente. Mostrará su URL pública. Todas las solicitudes a esa URL pública se reenviarán a su servidor local.

npm install -g localtunnel 
lt --port 80 
+1

También uso [localtunnel] (http://localtunnel.me/) y me resulta más fácil que 'ngrok' ya que no tengo que registrarme. Un consejo, si su sitio se encuentra en un host diferente (no en locahost) use la opción '-l'. Ex. 'lt -p 80 -l local.dev' espero que ayude. – JohnnyQ

40

Puede probar en localhost usando ngrok.

sólo tiene que ejecutar localmente ngrok luego pegar la URL de prueba que le da ngrok (algo así como http://1bc7d09d.ngrok.com/)

Proporciona un túnel a su servidor local.

+2

Esta debería ser la respuesta aceptada :) Funciona muy bien! – lucaswxp

+1

¡Guau, esto es algo que estaba buscando desde hace mucho tiempo! Esta es la respuesta! – mgibas

4
/ngrok http -host-header=yourwebsite.com 80 

túnel voluntad de localhost por el jefe del anfitrión derecho

+0

Muchas gracias por este fragmento de código muy simple. :) –