与 Paypal 的 PHP REST SDK 的付款协议

Payment Agreements with Paypal's PHP REST SDK

我正在努力了解 Paypals 订阅流程。

我们的流程是:

1.) 创建计费计划
2.) 激活计费计划
3.) 创建账单协议(使用激活的计划,将客户发送到 paypal url)
4.) 客户批准,returns 返回我们的 URL,使用提供的令牌执行

我遇到的问题 运行 是我似乎无法将第 4 步中返回的任何 ID 引用到前 3 个步骤中提供的任何内容。

我一定是遗漏了什么,但我完全被难住了。我找不到任何方法将已执行的协议与前面的步骤中的任何内容相关联。

以下是 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":"Template creation.","type":"fixed","payment_definitions":[{"name":"Regular Payments","type":"REGULAR","frequency":"MONTH","frequency_interval":"2","amount":{"value":"100","currency":"USD"},"cycles":"12","charge_models":[{"type":"SHIPPING","amount":{"value":"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 将 return 以 "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":"Template creation.","start_date":"2015-03-20T07:49:27-07:00","plan":{"id":"PLAN_ID_HERE"},"payer": {"payment_method":"paypal"},"shipping_address":{"line1":"111 第一街","city":"Saratoga","state" :"CA","postal_code":"95070","country_code":"US"}}' https://api.sandbox.paypal.com/v1/payments/billing-agreements

PayPal 将 return 使用 EC 令牌重新定向 URL Express Checkout。例如。 https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxxxxxxxxxxxxxx

您需要通过 URL 将您的客户重定向到 PayPal。一旦结算协议获得授权,客户就会 return 进入您的网站(return_url 在第 1 步)。

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

正如 PayPal_Orcun 所提到的,问题仍然悬而未决,并且正在 paypal 内部解决,但是,与此同时,您可以在这里做一些事情。

  1. 在第 3 步,创建协议后,您将获得批准 link,如下所示:

    https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-8DL20958WD398123E

  2. 这里复制token,存入数据库。将其视为唯一的 ID。

  3. 执行支付。当它回来时,paypal 将使用 url 重定向回来,如下所示:

    http://localhost/paypal/PayPal-PHP-SDK/sample/billing/ExecuteAgreement.php?success=true&token=EC-8DL20958WD398123E

如您所见,您可以执行 $_GET['token'] 来检索此处的令牌,并与创建的令牌匹配。然后,您可以使用 ID 在执行成功时返回,并将令牌字段替换为新的 ID 字段。

我同意,这不是你所期望的,但它肯定会让你在 createexecute 调用后连接协议。

希望对您有所帮助。

我对同样的问题使用的解决方案是在计费协议上设置 override_merchant_preferencesreturn_url 包含查询中的用户 ID,例如 www.domain.com/api/handler.php?uid=42&action=return