【发布时间】:2016-09-09 20:07:21
【问题描述】:
我今天花了 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.
我已经通过我的listener.php 文件运行了Paypal IPN simulator,它给了我正确的结果,每次我运行测试时都会从完整数据和VERIFIED 中给出正确的反馈。
问题
但是,当我使用上述详细信息运行沙盒购买时,购买运行正常,但我的 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-callbackdata-notify_url='https://site-addr/account/listener.php'
但上述替换data-callback 不起作用。事务似乎仍然成功,但没有记录事务或 IPN 数据。
删除/替换各种
data-实体,但没有成功。我的整个站点都有完整的 PHP 错误报告,并且没有生成任何形式的错误。
进一步考虑
我相信你们中的一些人会说,我应该使用 SDK 下载来做这种事情,但是 SDK 的范围很大,我的需求相对简单,而且 Paypal 文档留下了一个糟糕的很多要设计的。他们(在一系列 Paypal github 存款中)也在示例代码上使用 MySQL_ 请求以及 addslashes 和其他已过时的内容。年。
另外值得注意的是,虽然 Javascript 按钮生成器的 Paypal 文档接受帐户电子邮件或帐户代码,但提供帐户代码会导致严重错误并阻止付款(真实或沙盒)被处理。
再加上在文档中仅找到零碎的指导信息以及“循环”,因此我只关注一个主题,并且它说“哦,如果您想了解如何执行此操作,请点击此链接",然后在链接之后,它是为非开发人员编写的更详细的文本(在开发人员门户上),然后是指向另一个文本块的链接,然后是指向要开始的文本的链接。
对不起,这变成了 Paypal 的抱怨,但我希望尽可能避免使用庞大的 SDK 系统来进行直接发送和接收数据的操作。
有解决此问题的有用示例吗?
最后说明: 上个月我在Stripe 上做了一个支付系统,它做的事情完全一样,花了四个小时,而且效果很好。
(我不能在这里使用 Stripe,因为客户有一个现有的 Paypal 帐户并且不会更改)。
解决方案:
在下面 David Nguyens 回答的帮助下,我发现我的问题是我已经设置了 IPN 并启用了 IPN 并给出了正确的地址,但这是在 Live 帐户而不是 沙盒 帐户,尽管只是设置 在应用了实时帐户的所有详细信息后的沙盒帐户。
Paypals Live 和 Sandbox 配置文件完全相互排斥 并且沙盒创建不会从真实账户导入任何数据 它是相关联的。
【问题讨论】:
标签: javascript php paypal paypal-ipn