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

基于Laravel与PayPal按钮搭建的服务支付系统中,订单资金无法自动入账的技术咨询

解决PayPal资金需要手动点击「Get your money」才能到账的问题

我之前对接PayPal支付的时候也碰到过一模一样的情况,大概率是账户设置或者API实现模式的问题,咱们一步步排查:

一、先检查PayPal商家账户的设置

这是新商家账户最常见的问题:

  • 登录PayPal商家后台,进入「设置」→「付款偏好」
    • 找到「接受付款」板块,确认是否开启了自动接受付款,如果设置成「需要手动确认每笔付款」,就会出现你说的情况,改成自动接受即可
  • 进入「资金」→「资金保留」
    • 查看是否有自动保留资金的规则(比如新账户的初始审核期、高风险交易保留),如果是这种情况,要么等审核期自然结束,要么联系PayPal客服确认是否可以调整规则

二、排查后端API的实现逻辑

如果账户设置没问题,那大概率是你用了PayPal的授权(AUTHORIZE)模式而非捕获(CAPTURE)模式:
PayPal有两种核心交易模式:

  1. AUTHORIZE模式:先冻结用户资金,需要手动调用捕获接口或在后台点击「Get your money」才能完成资金到账
  2. CAPTURE模式:用户付款后直接完成交易,资金自动转入你的账户

你需要检查这两处代码:

1. 创建订单时的Intent参数

确保创建订单的请求里,intent字段设置为CAPTURE,而不是AUTHORIZE。Laravel里的示例代码大概是这样:

use PayPalCheckoutSdk\Orders\OrdersCreateRequest;

$request = new OrdersCreateRequest();
$request->prefer('return=representation');
$request->body = [
    "intent" => "CAPTURE", // 重点:必须是CAPTURE
    "purchase_units" => [[
        "amount" => [
            "currency_code" => "USD",
            "value" => "19.99"
        ]
    ]]
];

// 发送请求创建订单
$response = $client->execute($request);

2. 订单批准后的捕获操作

前端的onApprove触发后,后端的批准端点必须调用PayPal的订单捕获接口,而不是仅仅验证订单状态。示例代码:

use PayPalCheckoutSdk\Orders\OrdersCaptureRequest;

// 拿到前端传过来的order_id
$orderId = request('order_id');

$request = new OrdersCaptureRequest($orderId);
$request->prefer('return=representation');

// 执行捕获
$response = $client->execute($request);

// 检查捕获结果
if ($response->result->status === 'COMPLETED') {
    // 这里处理你的订单状态更新(比如标记为已支付)
} else {
    // 处理捕获失败的情况
}

如果你的后端只是验证了订单存在,但没有调用这个捕获接口,资金就会一直处于授权状态,需要手动触发到账。

额外说明

如果是刚开通的PayPal商家账户,平台可能会有初始审核期,这段时间即使设置正确,也可能需要手动释放资金,一般审核期过了(大概1-2周)就会自动到账。如果还是有问题,可以直接联系PayPal商家客服,让他们帮忙检查账户的资金流转设置。

内容的提问来源于stack exchange,提问作者Teabx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:52:48