我正在尝试在我的网站上实施PayPal .
我用这个班:http://www.micahcarrick.com/php-paypal-ipn-integration-class.html
现在我正在使用PayPal沙箱进行测试 .
这是问题所在:
-
用户付款 - 好的
-
用户成功返回我的网站 - 好的
-
几秒钟后,PayPal使用IPN呼叫我的网站 - 好的
-
我的 class 成功验证了传入的IPN数据 .
-
PayPal返回"payment_status: Pending"
我不知道为什么PayPal IPN回拨支付状态为“待定”?
有谁知道我做错了什么?
13 回答
我的问题是我的沙盒商家帐户是作为英国用户(和英镑作为货币) . 当我试图通过丹麦克朗(DKK)的订单时,它会告诉我在商家视图中购买的是“无人认领” . 一旦DKK中的一个订单被接受,并且我选择以DKK创建新货币,IPN就会向我发送所有“payment_status = completed”消息 .
解决方案是@Jadeye解释的:
转到PayPal开发者网站
登录您的开发者帐户(沙箱)
单击“应用程序”
单击沙盒帐户
单击要关闭“付款审核”选项的电子邮件地址,然后在展开后单击“配置文件”
单击“设置”
并选择关闭以进行付款审核 .
单击“关闭”
当您登录测试业务帐户时,请手动导航至:
https://www.sandbox.paypal.com/ca/cgi-bin/?cmd=_profile-pref&source=acct_setup&fli=true
您通常可以通过“我的业务设置”到达那里,但目前它会重定向到PayPal直播(尽管在沙箱中) .
进入该页面后,将“以我未持有的货币发送给我的阻止付款”更改为“否,接受并将其转换为......”
此外,请不要忘记使用PayPal Sandbox前端和API的“测试电子邮件”部分确认您的企业帐户 .
处理完这个问题后,PayPal会改变UI,
以下是 PayPal Merchant Technical Support 的确切说明:
感谢您与Merchant技术支持联系 .
请尝试按照以下说明关闭沙盒帐户的付款审核功能:
转到PayPal Developer Website
登录您的开发者帐户
单击“应用程序”
单击沙盒帐户
单击要关闭“付款审核”选项的电子邮件地址,然后在展开后单击“配置文件”
单击“设置”
并选择关闭以进行付款审核 .
单击“关闭”
!!! 确保你在 PayPal SandBox Merchant Account 上这样做!
这就是它的样子:
您可以通过以下说明解决它 .
登录开发人员中心 .
单击左侧的“测试帐户”选项卡 . 您应该已经创建了这些测试帐户以便在Sandbox上进行测试 .
查找“付款审核”列 .
找到您正在使用的沙盒帐户,然后单击“付款审核”列中的“已启用” .
这应该更改为“已禁用”,现在您的余额和信用卡支付的款项将立即完成 .
两个可能的原因:
1. seller account has option to accept or decline payment
在这种情况下,您需要以卖家身份登录并接受付款,您将获得另一个IPN,其中payment_status =已完成
脚步:
登录您的开发人员中心
按左侧的"test accounts"
选择卖家帐户,然后按底部的"Enter sandbox test site"
您应该看到卖家信息中心有选项接受或拒绝任何付款(您可能需要使用卖家测试帐户凭据重新登录此步骤)
2. Payment review is enabled
解:
登录开发人员中心 .
单击左侧的“测试帐户”选项卡 . 您应该已经创建了这些测试帐户以便在Sandbox上进行测试 .
查找“付款审核”列 .
找到您正在使用的沙盒帐户,然后单击“付款审核”列中的“已启用” .
这应该更改为“已禁用”,现在您的余额和信用卡资金将立即完成 .
我在沙箱中的 all user accounts 中做了change
Allow payments sent to me in a currency I do not hold
到Yes
,但它仍然无法正常工作 .我还尝试以paypal形式创建 same currencies ,并为沙箱用户帐户创建here使新货币成为主要货币 . 将货币转换为新货币 . 仍然没有成功 .
然后我注意到Wes Hanney答案的最后一句:"confirm your business account using the PayPal Sandbox front-end" . Trying this也没有用 .
M.G.Palmer建议他创建一个德国商人账户 . 也没用 .
太麻烦了!
一个小时后,我接近将PC扔出窗外,我才意识到我忘记了一件事 . 将 paypal form 中的真实收件人电子邮件地址更改为沙箱商家电子邮件地址 . 这终于为我解决了 .
PS:也许是一个愚蠢的初学者的错误?但对其他人可能会有所帮助遇到同样的情况 .
我有同样的问题,这里没有任何建议有效 . 然后我意识到问题是我试图从沙箱帐户到真实帐户进行付款 . 因此,例如,如果您的注册企业帐户是:
email@example.com
,那么所有沙箱付款都应该是email-facilitator@example.com
,否则它们将以PENDING模式结束 .类似的问题在这里 - 我的(沙盒)商家帐户是在美国创建的,我正在尝试支付欧元 .
对我来说,改变哪些设置并不重要,只有在德国创建新的商家帐户后才有效 .
上述解决方案没有对我有用,但帮助我找到了解决方案 .
If you are using de default business and buyer account, maybe this solution will work for you.
转到 developer.paypal > sandbox.accounts
https://developer.paypal.com/developer/accounts/
Login 并点击你的sandobx business account 中的 clone icon 和你的 buyer account
设置新 names 和 emails 并单击 create new account
打开两个帐户的 Profiles ,确保 Payment Review 为 OFF
Edit 您的代码/应用中的目标帐户并放置新的 business account
使用新 buyer account
这个解决方案不仅解决了我的问题 . 由于它, sandox.paypal 设计更改为使用 real accounts 的 new design .
This is important because some of data received by IPN in this case, may respond at different name.
默认情况下,您的PayPal商家帐户仅限于根据您的区域设置选择的几种可接受货币 . 使用不接受的货币进行的付款将保持待定/未结状态 . 要支持/接受这些货币,您需要将它们添加到PayPal上的“已接受货币”列表中 . 为此,请按照下列步骤操作:
使用您的Paypal企业帐户登录PayPal
转到"Profile"> "Profile and Settings">“我的钱”>“货币”
添加您要支持的货币 .
备注:在测试时使用沙盒帐户时,您需要在使用URL登录此帐户后为您的辅助沙箱帐户执行此操作:https://www.sandbox.paypal.com/
还有一件事你可能需要检查:
Make shore that the language encoding of your PayPal account is set to UTF-8. 在某些情况下,默认设置为'windows-1256' . 要将其更改为UTF-8,您需要:
进入你的 Profiles 然后“我的销售工具”
,在底部点击“PayPal按钮语言编码”
在下一页上,您需要单击“更多选项”,您可以在其中最终设置编码
我在德国设置的每个Paypal帐户默认设置为语言编码“windows ...” . 然后IPN将无法使用UTF-8编码的网站,即使在Woocommerce或EDD或event espresso中也是如此 .
我通过删除所有沙箱帐户并重新创建它来解决我的问题 .
重要笔记:
确保帐户使用与您的代码相同的货币 .