PayPal Express Checkout 调用不会在布局 C 中产生 BAID

Posted

技术标签:

【中文标题】PayPal Express Checkout 调用不会在布局 C 中产生 BAID【英文标题】:PayPal Express Checkout call does not produce BAID in Layout C 【发布时间】:2019-09-03 16:09:25 【问题描述】:

对于他们的网络订阅服务,我的客户完全订阅了 Paypal Payments Pro(a.k.a. Payflow),并且还订阅了 Recurring Billing 插件。

我可以毫无问题地使用信用卡设置定期结算。但是,我对 PayPal Express 结帐的定期结算感到困惑。

我遇到的问题是在 Payflow 的“布局 C”的上下文中并行集成 PayPal Express Checkout 和 Hosted Credit Card checkout。 我似乎没有有一种方法可以为 Layout 的两种不同付款方式(投标)中的每一种提供不同的信息。

我已经非常彻底地反复阅读了文档。不过,我似乎错过了什么。

PayPal Pro / Payflow 文档:开发者指南 PayPal Pro / Payflow 文档:快速结帐 PayPal Pro / Payflow 文档:定期结算快递 Payflow 结账(PDF 最后更新时间:2013 年 6 月)

我已经仔细阅读了 php API 库,但找不到参考。有什么可以指点我的吗?

当我使用安全令牌并使用布局 C 生成 iframe 时,该布局会自动生成一个两层堆栈,其中 1. PayPal Express Checkout 位于顶部,2. 信用卡结帐位于底部。问题仍然存在,这两个独立的组件似乎需要不同的 cURL 调用(具有不同的 NVP),而且我不知道如何在布局中提供对表单的单独调用。

我似乎缺少一个更高级别的概念。 (请记住,我 - 大致 - 了解 Einstein 的东西。这让我更加沮丧,因为我无法理解 PayPal 的东西!)

为了让您更好地了解我目前正在尝试什么,以下是这些详细信息: 我尝试假设使用 Layout C 自动初始化了一个 BAID。这似乎是一个很好的假设,因为授权确实在 POST 变量中返回了一个 TOKEN。但是,使用此令牌会返回错误结果:

RESULT=12&PNREF=BJPXXX8333D4&RESPMSG=Declined: 11455-Buyer did not accept billing agreement

这是我目前正在做的事情:

第一步:要使用两种付款方式(快速结账和信用卡)获取“布局 C”中的付款表单,我将提交这些 NVP,并且仅提交这些 NVP:

USER=[user]
&VENDOR=[vendor]
&PARTNER=PayPalCA
&PWD=[password]
&CREATESECURETOKEN=Y
&SECURETOKENID=randomlygenerated
&TRXTYPE=A
&AMT=8.95
&CURRENCY=USD
&CSCREQUIRED=TRUE
&EMAIL=buyersemail@email.com
&FIRSTNAME=namelikeBob
&LASTNAME=namelikeDobbs

这适用于:

在布局 C 中创建表单, 点击“使用 PayPal 结帐”按钮, 成功登录 PayPal, 确认金额并点击“立即付款”,然后 返回我客户的网站,用于设置循环计费系统的第二步(无论是计费配置文件还是 BAID/协议)。

第二步:我目前将此授权转换为定期付款的策略(失败)是分析 PayPal 发送回我的成功页面的 POST 中的 TENDER 值。然后,我根据该值是“C”还是“P”来设置不同的定期付款。

我已使用这些 NVP 成功设置了信用卡 (TENDER=C) 定期付款资料:

USER=[user]
&VENDOR=[vendor]
&PARTNER=PayPalCA
&PWD=[password]
&TRXTYPE=R
&ACTION=A
&ORIGID=fromPayPalsPOSTedPNREF
&START=aworkingdate
&TENDER=C
&PROFILENAME=Monthly Subscription
&PAYPERIOD=MONT
&TERM=0 // continue all subscriptions until the client deactivates  
&AMT=8.95
&CURRENCY=USD

但是 PayPal (TENDER=P) BAID 失败。同样,这些 NVP 可能不是问题。可能是我在之前的请求中没有找到发送BILLINGTYPE=MerchantInitiatedBilling 的方法:

USER=[user]
&VENDOR=[vendor]
&PARTNER=PayPalCA
&PWD=[password]
&TRXTYPE=A
&ACTION=X
&START=aworkingdate
&TENDER=P
&TOKEN=fromPayPalsPOSTedTOKEN
&PAYPERIOD=MONT
&TERM=0 // continue all subscriptions until the client deactivates  
&AMT=8.95
&CURRENCY=USD

这里似乎有很多细节,但如果我遗漏了什么,请告诉我,我会立即提供信息!

【问题讨论】:

【参考方案1】:

您是否尝试过实际放置:

&BILLINGTYPE=MerchantInitiatedBilling
&BA_DESC=ADescriptionIsRequired

在创建安全令牌的第一步中?

您可以尝试的另一件事可能会有所不同,那就是将其作为实际的 NVP 参数包含在内:

&PAYPAL-NVP=Y

过去的做法是告诉 Payflow 将任何额外的参数(甚至是无法识别的参数)转发到 PayPal,并给出 PayPal 的完整响应。

【讨论】:

Jove,我想你已经破解了!你的第一个建议已经产生了积极的结果。我将对其进行大量测试,但如果一切顺利,我不会忘记接受这一点。谢谢。 为了清楚起见,我的 OP 中的任何信息都不会造成混淆,这里是我现在随请求传递的完整 15 个 NVP。 USER, VENDOR, PARTNER, PWD, TRXTYPE, TENDER, BILLINGTYPE, CURRENCY, RETURNURL, CANCELURL, ERRORURL, BA_DESC, CREATESECURETOKEN, SECURETOKENID, AMT 似乎 BA_DESC 是缺少的元素。这就像一种魅力,而且 - 与所有当前的 PayPal 文档相反 - 一步到位。希望这对下一个用户有所帮助!

以上是关于PayPal Express Checkout 调用不会在布局 C 中产生 BAID的主要内容,如果未能解决你的问题,请参考以下文章

PayPal Express Checkout 通行证 transactionID

如何访问 Paypal Express Checkout 的响应?

如何为 PayPal Express Checkout 配置 IPN?

paypal express checkout - 400 错误请求

Paypal Express Checkout / React - 发送产品信息

paypal express checkout set paypal费用另加