【问题标题】:PayPal In-Context Checkout with REST SDK使用 REST SDK 的 PayPal 上下文结帐
【发布时间】:2015-10-25 21:10:43
【问题描述】:

我正在使用 PHP REST SDK 进行快速结帐,我的代码基于此示例:http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payments/CreatePaymentUsingPayPal.html

这很好用,但我不确定如何将它与新的 In-Context checkout 集成。据我了解,我只需要 EC 令牌,这样我就可以将它与上下文结帐一起使用,并获得像 https://sandbox.paypal.com/checkoutnow?token=EC-TOKEN 这样的 URL,但我找不到仅获取 EC 令牌的方法。

使用 REST SDK 创建付款时,您得到的只是批准 URL https://sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-TOKEN。我可以从 URL 中提取令牌,但这似乎不是一个好主意。必须有办法获取 EC 令牌,除非我做错了什么。

【问题讨论】:

  • 仅特定于Express Checkout (Classic API)。因此,除非 Paypal 民间纠正,否则 REST API 不支持 In-Context (顺便说一句,它使用 Paypal Payment 在某种程度上参考 Classic API Express Checkout 流程)。嗯……
  • 所以 In-Context 不支持 REST API ?上下文中不是一种新事物吗?奇怪的是他们不支持 REST API ......特别是因为如果你只是从 URL 中获取令牌,它就可以工作。无论如何,感谢您的帮助。我希望他们尽快添加对 REST API 的官方支持。

标签: php paypal paypal-rest-sdk


【解决方案1】:

如果您想在不篡改重定向 url 的情况下调用上下文体验,这就是技巧

  1. 将脚本放入前端页面:

<script>
  (function(d, s, id) {
    var js, ref = d.getElementsByTagName(s)[0];
    if (!d.getElementById(id)) {
      js = d.createElement(s);
      js.id = id;
      js.async = true;
      js.src = "//www.paypalobjects.com/js/external/paypal.v1.js";
      ref.parentNode.insertBefore(js, ref);
    }
  }(document, "script", "paypal-js"));
</script>
  1. 将带有数据标签的按钮放入表单代码中:

&lt;input type="image" data-paypal-button="true" data-paypal-sandbox="true" src="https://www.paypalobjects.com/webstatic/en_US/i/buttons/checkout-logo-large.png" alt="Check out with PayPal" /&gt;

这样您可以将表单提交到您的 REST api 结帐页面,并仅使用前端代码控制相关重定向

【讨论】:

  • 我不确定我是否理解这对我有什么帮助。即使我重定向前端,我仍然没有 EC 令牌可以传递给 In-Context,除非有另一种方法吗?我在 paypal 的文档中找不到您引用的脚本。我能找到的关于 In-Context 的唯一文档是:developer.paypal.com/docs/classic/express-checkout/in-context/…
  • 首先,当您已经拥有整页 EC 流(从前端表单提交到后端 API 调用和重定向)时,这将起作用。前端脚本会捕获重定向 url 并将其放在弹出窗口中,后端 API 调用中的所有内容都保持不变。
  • @PP_pduan - 有趣,这是否意味着在 REST 和经典 API 中生成的令牌是“相同的”/可互换的?
  • 是的,它不在公共文档中,而是作为篡改重定向 url 并将其注入 js 的替代方法,您可以选择任何一种方式来实现
  • @EdSF 用于 PayPal 帐户付款,是的
【解决方案2】:

显然,REST API (还)不能与 In-Context 一起工作,但如果有人想让它工作,这里有一个简单的 PHP 行,将approval_url 更改为 In-Context url(仅出于测试目的,我不建议在我们获得官方支持之前在 prod 中使用它):

$approvalUrl = str_replace('cgi-bin/webscr?cmd=_express-checkout&amp;', 'checkoutnow?', $payment-&gt;getApprovalLink());

【讨论】:

    猜你喜欢
    • 2015-06-11
    • 2016-05-21
    • 2015-12-02
    • 2020-11-06
    • 2016-02-25
    • 2019-02-23
    • 2020-12-11
    • 2016-10-27
    • 2015-02-05
    相关资源
    最近更新 更多