Paypal IPN在沙箱环境下总是返回“payment_status:Pending”?

64
我正在尝试在我的网站上实现PayPal支付。我使用这个类:http://www.micahcarrick.com/php-paypal-ipn-integration-class.html。目前我正在使用PayPal沙盒进行测试。
以下是问题:
1. 用户进行付款 - 没问题 2. 用户成功返回我的网站 - 没问题 3. 几秒钟后,PayPal使用IPN调用我的网站 - 没问题 4. 我的类成功验证传入的IPN数据。 5. PayPal返回"payment_status: Pending"
我不知道为什么PayPal IPN回调的付款状态是"pending"?
有人知道我做错了什么吗?

看起来应该是“待定”的状态。 - Rob Olmos
它应该是完整的,我是对的吗?Paypal IPN 应该给我打电话通知我操作是否成功。等待中...等待中,这意味着我不知道它是否成功,会在什么时候,现在,明天,还是永远。 - marc
5
嘿,马克,你解决了这个问题吗?我也遇到了同样的问题。 - amit patel
3
主要问题在于支付和您的账户使用不同的货币,正如Wes Hanney所说,您需要将“阻止以我不持有的货币发送的付款”更改为“不,接受并转换它们为...”。 - andys
前往:“我的销售工具” -> “阻止付款”(点击“更新”),选中第一个复选框“允许向我发送的货币不是我持有的货币:”,然后保存。 - Muhammad Shahzad
14个回答

52

当您登录到测试商业账户后,手动导航至:

https://www.sandbox.paypal.com/businessmanage/preferences/payments

通常情况下,您可以通过“我的业务设置”进入该页面,但目前它会重定向到PayPal实时网站(尽管处于沙箱模式)。

进入页面后,将“阻止向我发送不持有货币的付款”更改为“否,接受并转换成...”

同时,不要忘记使用PayPal沙箱前端和API的“测试电子邮件”部分确认您的商业账户。


...以及 API 中的“测试电子邮件”部分。这是什么? - Joaquín L. Robles
在最新的Paypal沙盒账户界面中: 账户设置>支付首选项>阻止付款,点击“更新”, 然后选择“是,接受并将它们转换为<你的货币>。附加费用适用”。 - Arnis Juraga

15
我的问题是我的沙盒商家账户是以英国用户(并且使用英镑作为货币)的身份创建的。当我尝试处理丹麦克朗(DKK)订单时,商家视图中会告诉我购买是“未领取”的。一旦一个以 DKK 为单位的订单被接受,并且我选择在 DKK 中创建一种新货币,IPN 就会向我发送所有“payment_status = completed”消息。

这个问题和实时帐户有关吗?我有一个德语(实时)账户,想要从国际客户那里以美元支付。 - daniel
@zoidbergi 我猜是这样,但我不确定这个答案是否已经过时了。我已经好几年没有做PayPal相关的事情了。 :) - h2ooooooo

10

在处理了这个问题一段时间后,PayPal更改了用户界面。以下是来自PayPal商家技术支持 的确切指示:

感谢您联系Merchant技术支持。

请尝试按照以下说明关闭sandbox账户的Payment Review功能:

  • 访问PayPal 开发者网站
  • 登录您的开发者账户
  • 单击应用程序
  • 点击沙盒账户
  • 单击要关闭Payment Review选项的电子邮件地址,并在展开后单击配置文件
  • 点击设置
  • 选择关闭Payment review。
  • 单击关闭

!!! 确保您在PayPal SandBox商家账户上执行此操作!

& 这就是它的样子:

进入图像描述


9
你可以按照以下步骤解决这个问题:
  1. 登录到您的开发者中心。

  2. 点击左侧的测试账户选项卡。您应该已经创建了这些测试账户以在沙箱上进行测试。

  3. 找到“支付审核”列。

  4. 找到您正在使用的沙箱账户,并单击“支付审核”列中的“启用”。

  5. 这将变为“禁用”,现在从您的余额和信用卡资金支持的支付将立即完成。


我在PayPal沙盒中遇到了类似的问题。但即使这些选项被禁用,它仍然无法正常工作。 - porton
2
我的问题源在下面的答案中描述:当卖家和订单表单具有不同的货币时,它无法工作。这是一个愚蠢的PayPal错误。 - porton
尽管我按照您的指示启用了账户,但我仍然无法收到付款状态。 - Ravinder Singh
大家好,我在这个问题上卡了两天了。我尝试了这里和其他地方的所有建议...唯一我尝试过的东西是因为我似乎找不到它就是“付款审核”...这是我在developer.paypal沙盒页面上找到的:developer.paypal.sandbox-account - Jadeye
“Payment review” 切换按钮最初已被禁用。 但沙盒通知仍会发送 payment_status=pending。 - Zen Of Kursat

7

可能存在两个原因:

1.卖家账户有接受或拒绝付款的选项

在这种情况下,您需要登录卖家账户并接受付款,然后您将收到另一个带有payment_status=Completed的IPN。

步骤:

  1. 登录您的开发者中心
  2. 在左侧选择“测试账户”
  3. 选择卖家账户并在底部点击“进入沙盒测试网站”
  4. 您应该看到卖家仪表板,其中有接受或拒绝任何付款的选项(在此步骤中,您可能需要使用卖家测试账户凭据重新登录)

2.启用了付款审核

解决方案:

  1. 登录您的开发者中心。
  2. 在左侧点击“测试账户”选项卡。您应该已经为在沙盒上测试创建了这些测试账户。
  3. 找到“付款审核”列。
  4. 找到您正在使用的沙盒账户,并在“付款审核”列中单击“启用”。

这应该会更改为“已禁用”,现在从您的余额和信用卡资金支持的付款将立即完成。


1
我已将“阻止以我不持有的货币发送的付款”设置为“否,接受并转换为美元”。所有我的测试账户中都已禁用了付款审核。然而,当测试用户使用以色列谢克尔(ILS)货币支付时,完整通知并未发生。它在美元付款方面运行良好。现在出了什么问题? - porton
1
我已经检查了这两个,但仍然是待定状态 - 还有其他原因吗? :/ - digitalWestie

6
  1. 我在沙盒环境中的所有用户账户中将 允许向我发送非本币种货币的付款 的状态改为 ,但仍然无法正常工作。我尝试了 更改

  2. 我还尝试在 PayPal 表单中创建相同的货币,并对沙盒用户账户进行 此处 操作:使新货币成为主货币、将钱转换为新货币。但仍然没有成功。

  3. 后来我注意到 Wes Hanney 的回答中的最后一句话:"使用 PayPal 沙盒前端确认您的商业账户"。尝试这样做 也没有成功。

  4. M.G.Palmer 在他的回答中建议创建一个德国商家账户。但也没有成功。


真是太麻烦了!

一小时后,当我几乎要把电脑扔出窗外时,我才意识到我忘记了一件事。在PayPal表单中更改我的真实收件人电子邮件地址为沙盒商家电子邮件地址。这最终为我解决了问题。


PS:也许是一个愚蠢的初学者错误?但对于遇到相同情况的其他人可能会有所帮助。


6

我曾经遇到过同样的问题,但这里提供的建议都没有起作用。后来我发现问题在于我试图从沙盒账户向实际账户进行付款。例如,如果您注册的业务账户是:email@example.com,那么所有沙盒支付都应该转至email-facilitator@example.com,否则它们将处于待处理模式。


3
没有上述解决方案适用于我,但帮助我找到了解决方案。
如果您正在使用默认的商业和买家账户,则可能此解决方案适用于您。
1. 前往developer.paypal > sandbox.accounts 2. 登录并在您的sandbox商业账户和买家账户中单击克隆图标 3. 设置新名称和电子邮件,并单击创建新帐户 4. 打开两个帐户的配置文件,并确保“付款审核”处于关闭状态 5. 在您的代码/应用程序中编辑目标账户,并放置新的商业账户 6. 使用新的买家账户重复交易
这个解决方案不仅解决了我的问题,还使得 sandox.paypal 的设计更改为使用 真实账户新设计这很重要,因为在这种情况下,IPN 收到的一些数据可能会对应不同的名称。

2

我这里也有类似的问题——我的(沙盒)商家账户是在美国创建的,但我想要进行欧元支付。

对我来说,无论我改变哪些设置都没有用,只有在德国创建一个基于该地的新商家账户后才能正常工作。


1
默认情况下,你的PayPal商业账户只支持少数可接受货币,这些货币是根据你的地区设置选择的。使用非支持货币进行的支付将保持待处理/打开状态。为了支持/接受这些货币,你需要将它们添加到PayPal的“可接受货币”列表中。操作步骤如下:
  1. 使用你的PayPal商业账户登录PayPal
  2. 点击“个人资料”>“资料与设置”>“我的货币”>“货币”
  3. 添加你想要支持的货币。
备注:当你在测试时使用沙盒账户时,你需要在使用URLhttps://www.sandbox.paypal.com/登录你的沙盒账户后,也为你的模拟交易主账户执行此操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接