You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PayPal SDK返回成功状态但实际交易未完成?

PayPal支付资金未到账的问题排查与修复

核心问题:未执行订单金额捕获

你的代码目前只完成了订单创建(API返回201表示订单创建成功),但缺少PayPal支付流程中最关键的一步——订单金额捕获。用户授权支付后,必须主动调用捕获接口,资金才会转入目标账户。

代码修复步骤

1. 补充onApprove中的捕获逻辑

修改onApprove函数,添加actions.order.capture()调用,完成资金捕获:

onApprove: function(data, actions) {
    console.log(data);
    console.log('aprovado o pagamento');
    // 关键:捕获订单金额
    return actions.order.capture().then(function(details) {
        console.log('资金捕获成功,详情:', details);
        // 可添加后端验证逻辑,比如将详情发送到服务器记录支付状态
        alert('支付完成!感谢购买,订单ID:' + data.orderID);
    }).catch(function(err) {
        console.log('资金捕获失败:', err);
        alert('支付失败,请重试');
    });
},

2. 修正application_context的位置

原代码中application_context被放在purchase_units的子对象里,不符合PayPal API规范,应将其与purchase_units同级:

return actions.order.create({
    purchase_units: [{
        description: 'Products Purchase',
        items: items,
        amount: {
            currency_code: 'EUR',
            value: totalAmount,
            breakdown: {
                item_total: {
                    currency_code: 'EUR',
                    value: totalAmount
                }
            }
        }
    }],
    // 修正:application_context与purchase_units同级
    application_context: {
        cancel_url: '<?php echo $base_path.'/payment.php';?>'
    }
});

额外检查项

  • 环境确认:如果用沙箱环境,资金仅进入沙箱测试账户,需登录PayPal沙箱后台查看;生产环境需确保商家账户已完成身份验证。
  • 订单状态验证:捕获成功后,检查返回的details.status是否为COMPLETED,这是资金到账的标志。
  • 后端验证:建议将捕获后的订单详情发送到后端服务器,通过PayPal API再次验证订单状态,避免前端数据篡改。

内容的提问来源于stack exchange,提问作者SimãoR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:07:18