我正试图围绕 Paypals 订阅流程。
我们的流程是:
1.) 创建计费计划
2.) 激活计费计划
3.) 创建计费协议(使用激活的计划,将客户发送到 paypal url)
4.) 客户批准,返回到我们的 URL,使用提供的令牌执行
我遇到的问题是我似乎无法将第 4 步中返回的任何 id 引用到前 3 步中提供的任何内容。
我一定是错过了什么,但我完全被难住了。在前面的步骤中,我找不到任何方法来关联已执行的协议。
我正试图围绕 Paypals 订阅流程。
我们的流程是:
1.) 创建计费计划
2.) 激活计费计划
3.) 创建计费协议(使用激活的计划,将客户发送到 paypal url)
4.) 客户批准,返回到我们的 URL,使用提供的令牌执行
我遇到的问题是我似乎无法将第 4 步中返回的任何 id 引用到前 3 步中提供的任何内容。
我一定是错过了什么,但我完全被难住了。在前面的步骤中,我找不到任何方法来关联已执行的协议。
正如 PayPal_Orcun 所提到的,这个问题仍然悬而未决,并且正在 paypal 内部解决,但是,与此同时,您可以在这里做一些事情。
在第 3 步中,创建协议后,您将获得如下所示的批准链接:
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-8DL20958WD398123E
在这里,复制令牌,并将其存储在数据库中。将其视为一个唯一的 ID。
执行付款。当它返回时,paypal 将使用如下 URL 重定向回来:
如您所见,您可以$_GET['token']
在此处检索令牌,并与创建的令牌相匹配。然后,您可以ID
在执行成功时使用返回,并将令牌字段替换为新的 ID 字段。
我同意,这不是你所期望的,但它肯定会让你在调用create
之后连接协议。execute
希望这有帮助。
我用于同样问题的解决方案是override_merchant_preferences
在计费协议上设置,return_url
在查询中包含用户 ID,例如www.domain.com/api/handler.php?uid=42&action=return
.
以下是 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","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/付款/计费计划max_fail_attempts":"0"}}' https://api.sandbox.paypal.com/v1/payments/billing-plansmax_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"}}' https:// api.sandbox.paypal.com/v1/payments/billing-agreements
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/协议执行