与 Paypal 的 PHP REST SDK 的支付协议
Posted
技术标签:
【中文标题】与 Paypal 的 PHP REST SDK 的支付协议【英文标题】:Payment Agreements with Paypal's PHP REST SDK 【发布时间】:2015-05-21 21:14:51 【问题描述】:我正试图了解 Paypals 订阅流程。
我们的流程是:
1.) 创建计费计划 2.) 激活计费计划 3.) 创建计费协议(使用激活的计划,将客户发送到 paypal url) 4.) 客户批准,返回我们的 URL,使用提供的 Token 执行
我遇到的问题是我似乎无法将第 4 步中返回的任何 id 引用到前 3 步中提供的任何内容。
我一定是错过了什么,但我完全被难住了。在前面的步骤中,我找不到任何方法来关联已执行的协议。
【问题讨论】:
【参考方案1】:正如 PayPal_Orcun 所说,这个问题仍然悬而未决,并且正在 paypal 内部解决,但与此同时,您可以在这里做一些事情。
在第 3 步中,创建协议后,您将获得一个如下所示的批准链接:
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-8DL20958WD398123E
在这里,复制令牌,并将其存储在数据库中。将其视为一个唯一的 ID。
执行付款。当它返回时,paypal 将使用这样的 url 重定向回来:
http://localhost/paypal/PayPal-php-SDK/sample/billing/ExecuteAgreement.php?success=true&token=EC-8DL20958WD398123E
如您所见,您可以在此处执行$_GET['token']
来检索令牌,并与创建的令牌相匹配。然后,您可以使用执行成功返回的ID
,并将令牌字段替换为新的 ID 字段。
我同意,这不是你所期望的,但它肯定会让你在create
和execute
调用之后连接协议。
希望这会有所帮助。
【讨论】:
【参考方案2】:以下是 REST API 计费计划和计费协议的工作方式(包括 curl 调用示例):
首先,请确保您的 REST 应用已切换为订阅(您可以在 https://developer.paypal.com/webapps/developer/applications/myapps 检查您的 REST 应用设置)
1-) 创建计费计划
curl -k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '"name":"Test REST Club Plan","description":"模板创建。 ","type":"fixed","payment_definitions":["name":"Regular Payments","type":"REGULAR","frequency":"MONTH","frequency_interval":"2","金额":"价值":"100","货币":"美元","周期":"12","charge_models":["type":"SHIPPING","amount":"价值":"10","currency":"USD","type":"TAX","amount":"value":"12","currency":"USD"]] ,"merchant_preferences":"setup_fee":"value":"1","currency":"USD","return_url":"http://returnurl","cancel_url":"http://cancelurl ","auto_bill_amount":"YES","initial_fail_amount_action":"CONTINUE","max_fail_attempts":"0"' https://api.sandbox.paypal.com/v1/payments/billing-plans
PayPal 将返回一个以“P-”开头的计费方案 ID
2-) 激活计费计划
curl -k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '["path":"/","value":"state":" ACTIVE","op":"replace"]' https://api.sandbox.paypal.com/v1/payments/billing-plans/
3-) 创建结算协议
curl -k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '"name":"Test REST Club Plan","description":"模板创建。 ","start_date":"2015-03-20T07:49:27-07:00","plan":"id":"PLAN_ID_HERE","payer":"payment_method":"paypal", "shipping_address":"line1":"111 First Street","city":"Saratoga","state":"CA","postal_code":"95070","country_code":"US"' @ 987654324@
PayPal 将返回带有 EC 令牌的 Express Checkout 重定向 URL。例如。 https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxxxxxxxxxxxxxx
您需要通过该 URL 将您的客户重定向到 PayPal。结算协议获得授权后,客户将返回您的网站(步骤 1 中的 return_url)。
4-) 执行计费协议
curl -k -v -H "Content-Type:application/json" -H "Authorization: Bearer ACCESS_TOKEN" -d '' https://api.sandbox.paypal.com/v1/payments/billing-agreements/EC-TOKEN_HERE/agreement-execute
【讨论】:
感谢您的回答。但我已经完成了。您能否告诉我如何从第 3 步(当他们离开我们的网站时)到第 4 步(当他们返回我们的网站时)引用客户? 如果您的意思是检索客户详细信息,很遗憾,这是 REST API 计费协议的一个已知问题。当您执行计费协议时,响应应包含付款人详细信息,但不会返回。这是在github.com/paypal/PayPal-PHP-SDK/issues/155 上报告的。我们为此错误开放了一张内部票。请通过 www.paypal.com/mts 开一张 MTS 票,并给我票号,以便我及时通知您进度。【参考方案3】:我用于同样问题的解决方案是在计费协议上设置override_merchant_preferences
,其中return_url
包含查询中的用户ID,如www.domain.com/api/handler.php?uid=42&action=return
。
【讨论】:
以上是关于与 Paypal 的 PHP REST SDK 的支付协议的主要内容,如果未能解决你的问题,请参考以下文章
使用 paypal/rest-api-sdk-php 的 laravel paypal 集成错误
带有 Laravel 4 的 PayPal rest-api-sdk-php
如何使用 PayPal REST API 和 PayPal PHP SDK 保存 PayPal 帐户以备将来付款
Laravel Guest-checkout is not working in paypal using "paypal/rest-api-sdk-php": "*&q