Woocommerce + Payment (PayPal) - 安全更新订单状态 + 获取交易 ID

Posted

技术标签:

【中文标题】Woocommerce + Payment (PayPal) - 安全更新订单状态 + 获取交易 ID【英文标题】:Woocommerce + Payment (PayPal) - Securely update order status + get transaction ID 【发布时间】:2018-03-13 16:50:50 【问题描述】:

我目前正在我的商店中实施Paypal Payment Gateway。 我在我的 paypal 沙盒帐户中添加了一个返回 URL。

到目前为止的付款步骤:

创建订单 通过WC_Gateway_Paypal 类创建付款 重定向到贝宝网站登录和处理付款 成功时重定向到return_url

示例代码:

function create_order()

    $order = wc_create_order();
    $product = wc_get_product(55);
    $order->add_product($product, 1);

    $address = array(
        'first_name' => 'John',
        'last_name' => 'Doe',
        'company' => '',
        'email' => 'john@doe.com',
        'phone' => '111111',
        'address_1' => '',
        'address_2' => '',
        'city' => '',
        'state' => '',
        'postcode' => '',
        'country' => ''
    );
    $order->set_address($address, 'billing');
    $order->set_address($address, 'shipping');
    $order->calculate_totals();
    $order->set_payment_method('paypal');
    $paypal = new WC_Gateway_Paypal();
    $paymentdetails = $paypal->process_payment($order->get_id());
    return $paymentdetails;

$paymentdetails 中,我返回我将客户重定向到的 paypal URL。

成功付款后,客户从贝宝重定向到:http://mypage.com/56/?key=wc_order_59d24a26d4ccb&utm_nooverride=1

现在我想更新我的订单。我知道我可以从重定向 URL 中读取订单的 ID 和密钥,但这不会是一个安全问题吗?如果有人知道 ID 或密钥,他可以触发 GET 到我的网站并更新他的订单,而无需实际付款。

有没有更好的方法来做到这一点?还是我只需要使用 key=wc_order_59d24a26d4ccb 而不是 ID 并注意不要将密钥发送到前端?

另外,我没有收到任何transaction_id,付款成功后$order->get_transaction_id(); 为空。这是因为我在本地机器上开发/使用沙盒帐户吗?

【问题讨论】:

您只是为了学习而构建它,还是有什么特殊原因您不只是使用免费的PayPal for WooCommerce 插件? 我正在构建一个没有任何 wordpress 主题的 ReactJS 应用程序,这就是为什么我需要能够通过 ajax 自己调用所有函数 我想这是因为你是在本地机器上开发的。检查我的答案 【参考方案1】:

这很可能是因为您正在本地计算机上进行开发。

paypal 集成在后台做了很多事情(交换代币、更新订单等...)。当您创建付款时,paypal 会获取您的本地开发 URL(即http://localhost/something)但无法访问它,因为您位于路由器后面。尝试将安装移动到服务器或网络空间,然后重试,它应该可以工作。

【讨论】:

以上是关于Woocommerce + Payment (PayPal) - 安全更新订单状态 + 获取交易 ID的主要内容,如果未能解决你的问题,请参考以下文章

为开发人员重复触发“woocommerce_payment_complete”钩子

支付网关未触发 woocommerce_payment_complete 和 woocommerce_after_checkout_validation 挂钩

Woocommerce + Payment (PayPal) - 安全更新订单状态 + 获取交易 ID

如何在 Woocommerce WC_Payment_Gateway 类之外设置字段值?

如何从 woocommerce 自定义支付网关中的 process_payment 函数执行 POST 重定向?

Express Checkout Paypal Payment Gateway For Woocommerce 存在 Polylang 问题