【问题标题】:Payment Agreements with Paypal's PHP REST SDK与 Paypal 的 PHP REST SDK 的支付协议
【发布时间】:2015-05-21 21:14:51
【问题描述】:

我正试图了解 Paypals 订阅流程。

我们的流程是:

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

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

我一定是错过了什么,但我完全被难住了。在前面的步骤中,我找不到任何方法来关联已执行的协议。

【问题讨论】:

    标签: php paypal paypal-subscriptions paypal-rest-sdk


    【解决方案1】:

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

    1. 在第 3 步中,创建协议后,您将获得一个如下所示的批准链接:

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

    2. 在这里,复制令牌,并将其存储在数据库中。将其视为一个唯一的 ID。

    3. 执行付款。当它返回时,paypal 将使用这样的 url 重定向回来:

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

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-09
        • 2015-11-17
        • 2017-02-22
        • 2013-08-25
        • 2021-12-03
        • 2016-06-12
        • 1970-01-01
        • 2020-11-29
        相关资源
        最近更新 更多