javascript-Paypal不会将沙盒交易数据发送到IPN
作者:互联网
今天我已经花了9个小时与Paypal一起工作,但有一个我找不到解决方案的问题.
我正在使用Paypal Javascript Buttons github脚本创建用于简单的立即购买交易的动态页面生成的按钮.
按钮示例输出是由PHP生成的(因此是动态的),看起来像这样(具有沙箱详细信息):
<script src='https://site-addr/includes/js/paypal-button.min.js?merchant=siteemail-facilitator@gmail.com'
data-callback='https://site-addr/account/listener.php'
data-tax='0'
data-env='sandbox'
data-shipping='0'
data-currency='GBP'
data-amount='1.00'
data-quantity='1'
data-custom='$2y$10$BdA/7xN2S/fzRq8X9p4pFOmzYBpia/u7sWsAcWN/4w9NZVXduaUzu'
data-number='20165'
data-size='Large'
data-locale='UK'
data-host='www.sandbox.paypal.com'
data-type='button'
data-cancel_return='https://site-addr/account/basket.php'
data-return='https://site-addr/account/complete.php'
data-name='Site Name Tickets'
data-button='buynow'
async='async'></script>
这会生成一个非常好的简单点击表单,用于通过Paypal界面进行购买.
同时,我已经下载了IPN listener from the Paypal Github并根据需要更新了详细信息,还下载了cacert.pem文件
from here.
我已经运行了Paypal IPN simulator,该文件通过我的listener.php文件为我提供了正确的结果,并在每次运行测试时提供了完整数据的正确提要并已验证.
问题
但是,当我使用上述详细信息运行沙盒购买时,购买运行正常,但是我没有收到对我的IPN侦听器的反馈,我的sandbox Transaction notifications也没有任何交易详细信息.但是我确实从购买的沙盒Paypal帐户中获取了详细信息成功,购买成功.
我尝试过的事情
我已经阅读了很多Paypals文档,发现他们的方法为Paypal设置任何内容提供了清晰简洁的指南,这让我非常烦恼.我已经阅读了大约40页的文档,包括从Stack Overflow中查找各种有用的帖子(使用Paypal directly reference寻求有用的解决方案,而不是提供自己的解决方案).
尝试和失败的解决方案:
> This similar question没有提供任何明确的解决方案.
> This question gives some help,并确认交易应为可接受的web_accept类型.
> This question (answer)明确建议使用data-notify_url,而不要使用JavascriptButton github上指定的数据回调
data-notify_url='https://site-addr/account/listener.php'
但是上述替换数据回调无效.事务似乎仍然成功,但是未记录事务或IPN数据.
>删除/替换各种数据实体,但没有成功.
>我在整个网站上都有完整的PHP错误报告,并且不会生成任何形式的错误.
进一步的考虑
我敢肯定,有些人会说,好吧,我应该使用SDK下载来做这种事情,但是SDK的范围很大,而且我的需求相对简单,而且Paypal文档留下了很多东西设计.他们的(在一系列Paypal github上也使用)在示例代码上使用MySQL_请求以及addlashs和其他已经过时的东西.
同样值得注意的是,尽管Javascript Button生成器的Paypal文档接受了帐户电子邮件或帐户代码,但提供帐户代码会导致严重错误并阻止付款(真实或沙箱)处理.
与此相伴的是,在文档中只有零散的指导信息以及“循环”的发现,使我只涉及一个主题,它说:“哦,如果您想了解如何执行此操作,请单击此链接”,并且然后,在链接之后,是为非开发人员编写的更详细的文本(在开发人员门户上),然后是指向另一个文本块的链接,然后是指向该文本开头的链接.
抱歉,这变成了Paypal的an吟,但我想尽可能避免使用庞大的SDK系统进行直接发送和接收数据操作.
解决这个问题有帮助的例子吗?
最后说明:
上个月,我在Stripe上建立了一个付款系统,该系统执行的功能完全相同,花费了四个小时,而且运行良好.
(我不能在这里使用Stripe,因为客户有一个现有的Paypal帐户,并且不会更改).
Solution:
With the help from David Nguyens answer below, I found the issue in my case was that I had set up the IPN and enabled the IPN
and given the correct address for it, but this was on the Live
account rather than the sandbox account, despite only setting up
the sandbox account after all the details on the live one had been applied.Paypals Live and Sandbox profiles are entirely mutually exclusive
and sandbox creation will not import any data from the live account
it is associated with.
解决方法:
在Paypal上进一步解决问题
>在沙盒贝宝(Sandbox Paypal)上调查IPN日志以查看将数据发送到何处以及将数据发送到何处,链接为production URL和sandbox URL.
>检查状态代码,如果出现5xx类型错误-调试脚本
>这应该告诉您IPN发送到的位置,如果不是,请检查:
>按钮中的ipn URL
>配置文件中的ipn URL被覆盖
标签:javascript,php,paypal,paypal-ipn 来源: https://codeday.me/bug/20191118/2029873.html