在本地主机上运行网站时使用Paypal IPN

在本地主机上运行网站时使用Paypal IPN,paypal,paypal-ipn,Paypal,Paypal Ipn,我想将Paypal即时支付通知(Paypal IPN)集成到我的ASP.NET网站中。该网站处于开发模式,在本地主机上运行 在本教程()之后,我创建了一个模拟IPN通知的脚本。此IPN通知点击我的网站的IPN处理程序 但是,当我的IPN处理程序将信息重新发布回Paypal sandbox时,Paypal总是返回无效。我猜这是意料之中的,因为贝宝没有发送原始的IPN消息 但是,我想测试当Paypal验证IPN消息时将运行的代码。目前我没有办法做到这一点。Paypal文档说,我应该将验证消息时运行的

我想将Paypal即时支付通知(Paypal IPN)集成到我的ASP.NET网站中。该网站处于开发模式,在本地主机上运行

在本教程()之后,我创建了一个模拟IPN通知的脚本。此IPN通知点击我的网站的IPN处理程序

但是,当我的IPN处理程序将信息重新发布回Paypal sandbox时,Paypal总是返回无效。我猜这是意料之中的,因为贝宝没有发送原始的IPN消息

但是,我想测试当Paypal验证IPN消息时将运行的代码。目前我没有办法做到这一点。Paypal文档说,我应该将验证消息时运行的代码放入消息无效时运行的块中

就是

if(response == "VERIFIED")
{
    //put any code here in the else if block below
}
else if(response == "INVALID")
{

}
这项技术在我看来非常不干净和不完整。在部署到live server时,我必须更改代码


是否有更好的方法使用localhost测试IPN?

您展示的代码片段是正确的方法。我不知道为什么你会认为你必须改变什么,当你去生活

我想做的是将其中的$verified参数相应地设置为true/false

if(response == "VERIFIED")
{
    $verified = true;
}
else if(response == "INVALID")
{
    $verified = false;
}
从那时起,您可以在脚本中使用if($verified)来处理某些任务。当成功调用发生时,您希望执行的任何代码都应该放在已验证的代码块中,如果未验证则要运行的任何代码都应该放在else块中,或者可能放在if(!$verified)块中

我通常只对所有IPN执行相同的操作,但我的数据库中有一个字段来存储IPN的状态。这样,在我自己的报告或web应用程序中,我就可以轻松地分离已验证和未验证的数据,并以我想要的方式处理它们

正如文档所说,当您使用这样的本地表单进行测试时,数据不是来自PayPal,因此这些数据总是未经验证的。如果您想完全测试来自PayPal的实际数据,您也可以在沙箱中进行测试,使用PayPal开发者帐户中提供的IPN模拟器,或者在沙箱卖家帐户中设置IPN并实际处理付款


当然,您需要确保您的IPN脚本配置为同时处理沙箱和实时事务,但假设是这样,您将在这些测试中获得一个经过验证的IPN,因为数据实际上来自PayPal的沙箱服务器。

有一个很好的工具用于此:


Ngrok允许“安全进入本地主机的预期隧道”。基本上,您可以部署ngrok,然后像“48210d19.ngrok.com”这样的URL将指向您的本地主机。您可以使用该URL来测试IPN。

如果您的开发环境使用,那么只需使用几个简单的步骤,就可以公开访问您的vagrant virtual(即临时访问,用于演示等),并允许PayPal将IPN发送到您的开发站点

  • 在注册免费的Atlas帐户

  • 按以下方式登录:

  • (行李箱)jason@canoe:~/my/project$vagrant共享 (系统将提示您输入电子邮件和密码)
  • 开始共享:
  • (行李箱)jason@canoe:~/my/project$vagrant共享 ==>默认值:正在检测计算机的网络信息。。。 默认值:本地计算机地址:192.168.22.10 默认值:本地HTTP端口:80 默认值:本地HTTPS端口:已禁用 ==>默认设置:检查身份验证和授权。。。 ==>默认值:正在创建漫游共享会话。。。 默认值:股份将位于:拖欠-puppy-5196 ==>默认值:您的流浪共享正在运行!姓名:违法小狗-5196 ==>默认值:URL:http://delinquent-puppy-5196.vagrantshare.com
    您需要注意将IPN url(paypal表单中的notify_url变量)设置为从浏览器传递的HTTP主机头。如何获取此标题取决于您的框架;它通常被称为服务器名或主机名。

    IPN模拟器无法向本地主机发送消息。。。。所以我不得不使用本地表单。。。。我的问题是,在这些情况下,我的验证代码块从未执行过,因此我无法测试它。它不能发送到本地主机,但它可以发送到您的公共IP地址。更好的做法是设置一个子域,指向那里的服务器。例如,它在我的本地主机上运行,但可以使用该域访问,并与模拟器一起工作。 (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