php - 用于我开发的 wordpress 插件的 Paypal Express Checkout

标签 php wordpress paypal-rest-sdk paypal

情况:我正在开发一个 wordpress 插件,在 http://example.com/edit-order 上,客户可以上传图片、修改图片、调整大小并由打印机。然后,用户将需要根据最终图像大小为良好的基础付费。为了最短的工作流程,我希望在同一页面上也有“结帐”按钮。

我希望将 paypal 集成为支付网关,我相信 paypal 快速结帐按钮集成将是“最简单的”。我看过paypal文档here .真正让我困惑的是它可以集成客户端 REST 或服务器端 REST,即使阅读了所有示例代码和示例,我也不知道如何集成到我的插件中。

对于客户端 REST:我知道我可以回调“onAuthorize”以重定向到预定义页面以在服务器端确认付款,但如何将成功付款详细信息传回服务器?更重要的是,我如何知道传回的付款详细信息是来自 Paypal 和真实的,而不是从恶意网站发送的?

对于服务器端 REST:这对我来说从服务器端调用 paypal API 更有意义,但是我如何将支付金额和订单详细信息从 edit-order 页面传递到 create-payment 页面?来自示例代码

    var CREATE_PAYMENT_URL  = 'https://my-store.com/paypal/create-payment';
    var EXECUTE_PAYMENT_URL = 'https://my-store.com/paypal/execute-payment';

    paypal.Button.render({

        env: 'sandbox', // Or 'sandbox'

        commit: true, // Show a 'Pay Now' button

        client: {
            sandbox:    'xxxxxxxxx',
            production: 'xxxxxxxxx'
        }

        payment: function() {
            return paypal.request.post(CREATE_PAYMENT_URL).then(function(data) {
                return data.id;
            });
        },

        onAuthorize: function(data) {
            return paypal.request.post(EXECUTE_PAYMENT_URL, {
                paymentID: data.paymentID,
                payerID:   data.payerID
            }).then(function() {

                // The payment is complete!
                // You can now show a confirmation message to the customer
            });

由于 paypal.request.post(CREATE_PAYMENT_URL) 似乎只接受一个参数,如何传递订单详细信息以创建付款?

仅供引用,我以前使用过 stripe SDK 和 API,它们非常简单……我只是不明白 paypal express 结账是如何完成的!特别是对于客户端 REST,这对我来说毫无意义......为什么有人想要客户端 REST,它在客户端完成整个过程并且不将任何内容传回服务器以确定是否支付了商品?我错过了什么,不明白什么?

最佳答案

For client-side REST: I know I can callback on 'onAuthorize' to redirect to a pre-defined page to confirmed payment on server-side, but how do I pass the success payment detail back to the server? and more importantly, how do I know the payment detail passed back is from paypal and genuine instead of being sent from malicious site?

您是对的,没有 100% 可靠的方法可以做到这一点。这里推荐的方法是将 paymentID 和 payerID 传回您的服务器,并在那里调用 paypal REST api 以验证金额。

For server-side REST: this make more sense to me to call the paypal API from server side, but how do I pass the payment amount and order detail from edit-order page to the create-payment page? from the example code

我推荐的方式是:

  1. 在 onAuthrorize 中执行 execute()
  2. 重定向页面
  3. 进行服务器端调用以获取付款明细

https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/advanced-payments-api/show-payment-details/

您还可以选择构建单页应用,并在同一页面上显示客户端 execute() 返回的详细信息

since paypal.request.post(CREATE_PAYMENT_URL) seems to accept only one argument, how to pass along the order detail in order to create the payment?

您实际上可以传递第二个参数,该参数将作为键值传递给您的服务器:

paypal.request.post(CREATE_PAYMENT_URL, { foo: 'bar' })

paypal.request.post 实际上只是一个使 ajax 调用更容易的包装器。

why would anyone want to client REST which finish the whole process in client side and pass nothing back to server to determine if the good is paid for?

您仍应进行服务器端验证以确保该项目已付款。客户端集成只是让创建和执行支付变得更简单。


需要注意一件事——客户端和服务器端集成使用相同的 REST api。因此,没有什么能阻止您将两者结合使用。客户端调用只是让其中一些调用变得更容易一些,而无需额外的服务器端逻辑。

关于php - 用于我开发的 wordpress 插件的 Paypal Express Checkout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43828812/

相关文章:

Paypal 支付退回法规 - 如何处理?

php - mysql_fetch_array 返回一个数组和数字 "1"

php - ejabberd 外部身份验证(PHP 和 MySQL)

php - 自动更改记录

php - Mozilla Firefox 中的 "The resources at was blocked by Safe Browsing"问题

c# - PayPal .NET SDK - new Payment() - 抛出 NullReference 异常

PHP:将数组中的所有值设置为某事

html - 如何将所有社交媒体按钮放在一条线上

wordpress - 使用node-http-proxy时隐藏WordPress URL中的端口号

paypal - PayPal REST API 未显示交易描述和应用程序名称