在本地主机上使用Paypal沙盒测试工具IPN模拟器

38
如何在本地机器上使用即时付款通知模拟器?IPN处理程序URL中提供了什么?我无法访问我们的路由器。
感谢。

我知道这已经过时了,但是你可以在本地主机上测试沙盒案例,而无需进行任何隧道或ngrok。请参见我的答案,并将浏览器指向此php文件。它将模拟IPN,沙盒将自动验证它。https://dev59.com/pWgu5IYBdhLWcg3wP0xm#18476477 - user6972
6个回答

51
你可以使用ngrok在本地主机上进行测试。
简单地在本地运行ngrok,然后粘贴ngrok给你的测试URL(类似于http://1bc7d09d.ngrok.com/)。
它为您的本地主机提供了一个隧道。

1
哇 - 这正是我长期寻找的东西!这就是答案! - mgibas

35

Paypal的IPN模拟器无法在本地主机上工作。但是,您可以模拟模拟器 :-)。为此,您需要安装浏览器插件/扩展程序,例如Firefox的posterGoogle Chrome的高级REST客户端

打开应用程序,并输入您正在监听IPN响应的URL:

http://localhost/ipn

请将以下内容作为您的POST数据并提交请求:

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

更新:我刚开始使用另一个更容易的选项,https://localtunnel.me。要安装和运行模块,请执行以下步骤。它将显示您的公共URL。所有对该公共URL的请求都将转发到您的本地主机。

npm install -g localtunnel
lt --port 80

4
我也使用 localtunnel ,我觉得它比 ngrok 更简单,因为我不需要注册。一个提示,如果您的网站在不同的主机上(而不是本地主机),请使用 -l 选项。例如,lt -p 80 -l local.dev。希望这有所帮助。 - JohnnyQ

26

你无法在本地主机上测试IPN,因为IPN是关于PayPal的服务器启动一个服务器端POST到您定义的URL。
因此,您的IPN脚本必须可以被外部访问(或者您可以使用像ngrok.me/localtunnel.me这样的隧道)。


4
不错的补充。如果你正在使用Rails,你可以使用localtunnel。注意,PayPal建议使用80/443端口(HTTP / HTTPS)。但是,“IPN验证器”无法在非HTTP(S)端口上工作。 - Robert
您还可以伪造IPN数据以在本地主机上进行测试。请查看下面的脚本。监听器需要网络连接才能联系沙盒,并安装了curl的php。 - user6972
是的,假设它在非本地主机上的8002端口。 - Robert

11

你可以在本地运行我下面所制作的脚本来模拟PayPal IPN的POST请求(需要安装curl)。只要你的监听器指向了沙盒,它就应该是有效的。如果更改为向PayPal正式环境的监听器发送请求,则应该会验证失败。

<?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] => seller@paypalsandbox.com
  [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] => seller@paypalsandbox.com
  [verify_sign] => AFcWxV21C7fd0v3bYYYRCpSSRl31AgAAjEU7A5rthY2aP4j1jOIrjuGx
  [address_country] => United States
  [payment_status] => Completed
  [address_status] => confirmed
  [business] => seller@paypalsandbox.com
  [payer_email] => buyer@paypalsandbox.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, 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);
?>

您需要为每个测试更改txn_id,以避免重复使用交易错误。 - khaled_webdev
这不是沙盒,而是由有序捆绑Symfony2-Paypal-IPN生成的日志,我的监听器第二次不起作用。第一次“成功”,当我再试一次时,我得到了错误。 - khaled_webdev
@khaled_webdev 这个方法是用来通过沙盒测试你的监听器。如果你的监听器阻止了重复的txnid,那么这是你的监听器的属性,而不是PayPal或测试方法的问题。 - user6972
当我使用自己的IPN(从测试账户的IPN历史记录中选择)时,总是会显示“成功”。也许支付类型有影响,我的监听器也可能有影响,但我必须感谢您提供的解决方案。 - khaled_webdev
@khaled_webdev,常见的建议是,监听器不应该处理重复的txnid,所以你使用的包会阻止它并不奇怪。 - user6972
显示剩余2条评论

5

我在本地主机上进行测试。如果地址是静态的,你可以使用像dyn.com或noip.com这样的服务,或者将子域名指向你的本地地址。


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

将使用正确的主机头将隧道连接到本地主机。

非常感谢您提供这个非常简单的代码片段。 :) - Annie Lagang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接