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

如何在PHP中从PayPal cURL响应中获取支付参考号

你当前调用的是PayPal v1支付接口的创建支付单接口,仅完成了支付单的初始化,状态为created,此时还未完成用户授权和支付执行流程,因此交易相关的支付参考号还未生成,related_resources字段为空属于正常情况。

解决步骤

  • 第一步:从当前返回的links数组中找到rel为approval_url的跳转链接,将用户引导至该地址完成PayPal账户的支付授权。用户授权完成后会自动跳转回你在支付参数$paymentJson中预设的回调地址,回调请求会携带payer_id和token两个参数。
  • 第二步:拿到payer_id参数后,调用当前返回中rel为execute的POST接口,提交payer_id参数完成支付执行操作。
  • 第三步:支付执行成功后,返回的响应结构中,transactions[0]['related_resources'][0]['sale']['id']就是你需要的支付参考号(PayPal官方交易号),同时也可以从该层级下获取交易状态、交易完成时间等相关信息。

支付执行示例代码

// 支付执行示例代码
$executeUrl = "https://api.sandbox.paypal.com/v1/payments/payment/{$result['id']}/execute";
$postData = json_encode([
    'payer_id' => $_GET['PayerID'] // 从回调请求参数中获取
]);

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => $executeUrl,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $postData,
    CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer ' . $accessToken,
        'Content-Type: application/json'
    )
));
$executeResponse = curl_exec($curl);
curl_close($curl);
$executeResult = json_decode($executeResponse, true);

// 支付完成后获取支付参考号
if (isset($executeResult['state']) && $executeResult['state'] == 'approved') {
    $paymentReferenceId = $executeResult['transactions'][0]['related_resources'][0]['sale']['id'];
    // 后续业务逻辑处理
}

补充说明:你当前使用的v1/payments属于PayPal旧版支付接口,若为新开发项目可升级到v2/checkout接口,接口逻辑更简洁,维护性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:27:04