我想将Paypal即时付款通知(Paypal IPN)整合到我的ASP.NET网站中。该网站处于开发模式,并在localhost上运行。
按照本教程(https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNTesting/#local),我创建了一个模拟IPN通知的脚本。此IPN通知会点击我网站的IPN处理程序。
然而,当我的IPN处理程序将信息重新发送回Paypal沙箱时,Paypal始终返回INVALID。我想这是预期的,因为Paypal没有发送原始的IPN消息。
但是,我想测试在Paypal验证IPN消息时将运行的代码。目前我无法做到这一点。 Paypal文档说我应该将验证消息时运行的代码放入消息无效时运行的块中。
那是
if(response == "VERIFIED")
{
//put any code here in the else if block below
}
else if(response == "INVALID")
{
}
这种技术对我来说显得非常不洁净和不完整。当我部署到实时服务器时,我将不得不更改我的代码。
有没有更好的方法使用localhost测试IPN?
答案 0 :(得分:1)
有一个很棒的工具:https://ngrok.com/。
Ngrok允许"将预期的隧道安全地保存到localhost"。基本上你部署了ngrok,然后是一个像#48; 48210d19.ngrok.com这样的网址。将指向您的localhost。您可以使用该URL来测试IPN。
答案 1 :(得分:0)
您展示的那段代码是正确的方法。我不确定为什么你认为在上线时你必须改变任何东西.. ??
我喜欢做的就是在其中设置一个$ verified参数,相应地为true / false。
if(response == "VERIFIED")
{
$verified = true;
}
else if(response == "INVALID")
{
$verified = false;
}
从脚本开始,您可以使用if($ verified)来处理某些任务。您希望在成功调用时发生的任何代码都应该放在经过验证的代码块内,如果未经验证,您要运行的任何代码都应该进入其他块,或者可能是if(!$已验证)块。
我通常只为所有IPN做同样的事情,但我的数据库中有一个字段来存储IPN的状态。在我自己的报告或网络应用程序中,我可以轻松地将已验证和未验证的数据分开,然后根据需要处理它们。
正如文档所说,当您使用此类本地形式进行测试时,数据并非来自PayPal,因此这些数据将始终未经验证。如果您想要完全测试来自PayPal的实际数据,您也可以使用PayPal开发者帐户中提供的IPN模拟器或在沙盒卖家帐户中设置IPN并实际处理付款,在沙箱中执行此操作。
当然,您需要确保您的IPN脚本配置为处理沙箱和实时交易,但假设您在这些测试中获得经过验证的IPN,因为数据实际上来自PayPal&# 39; s沙盒服务器。
答案 2 :(得分:0)
如果您的开发环境使用Vagrant,则只需几个简单的步骤即可使用vagrant sharing,这样可以公开访问您的流浪者虚拟(即暂时,出于演示目的等),并允许PayPal将IPN发送到您的开发站点。
在https://atlas.hashicorp.com注册免费的Atlas帐户。
登录如下:
(trunk)jason@canoe:~/my/project$ vagrant share (you will be prompted for email & password)
(trunk)jason@canoe:~/my/project$ vagrant share ==> default: Detecting network information for machine... default: Local machine address: 192.168.22.10 default: Local HTTP port: 80 default: Local HTTPS port: disabled ==> default: Checking authentication and authorization... ==> default: Creating Vagrant Share session... default: Share will be at: delinquent-puppy-5196 ==> default: Your Vagrant Share is running! Name: delinquent-puppy- 5196 ==> default: URL: http://delinquent-puppy-5196.vagrantshare.com
您需要注意将IPN网址(PayPal表格中的notify_url变量)设置为从浏览器传递的HTTP HOST标头。如何获得此标头取决于您的框架;它通常是callend SERVER_NAME或HOST_NAME。