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

如何使用PayPal Checkout PHP SDK获取付款人账单地址与收货地址

PayPal Checkout PHP SDK 获取付款人账单/收货地址解决方案

默认情况下PayPal不会返回付款人账单地址等敏感信息,你需要按以下步骤调整配置即可获取两类地址:


步骤1:创建订单时配置地址获取权限

创建订单的请求中新增对应参数,告知PayPal需要返回地址字段,参考代码如下:

use PayPalCheckoutSdk\Orders\OrdersCreateRequest;

$request = new OrdersCreateRequest();
$request->prefer('return=representation');
$request->body = [
    "intent" => "CAPTURE",
    "purchase_units" => [[
        "amount" => [
            "currency_code" => "你的币种",
            "value" => "订单金额"
        ]
    ]],
    "application_context" => [
        "return_url" => "你的支付成功回调地址",
        "cancel_url" => "你的支付取消跳转地址",
        // 收货地址规则配置:
        // GET_FROM_FILE = 取用用户PayPal账户内已保存的收货地址
        // SET_PROVIDED_ADDRESS = 要求用户手动填写收货地址
        // NO_SHIPPING = 不需要收货地址(虚拟商品场景)
        "shipping_preference" => "GET_FROM_FILE"
    ],
    // 新增:要求返回付款人账单地址
    "payment_source" => [
        "paypal" => [
            "experience_context" => [
                "payment_method_preference" => "IMMEDIATE_PAYMENT_REQUIRED",
            ]
        ]
    ],
    // 新增:指定响应返回字段,确保地址相关字段被包含
    "fields" => "payer,payment_source,purchase_units"
];

// 后续执行创建订单请求逻辑和原有流程一致
$response = $client->execute($request);

步骤2:支付完成后解析地址信息

订单捕获完成后,直接从返回的订单结果中提取对应地址字段即可,参考代码如下:

use PayPalCheckoutSdk\Orders\OrdersCaptureRequest;

$orderId = "已创建的订单ID";
$captureRequest = new OrdersCaptureRequest($orderId);
$captureRequest->prefer('return=representation');
$response = $client->execute($captureRequest);
$orderResult = $response->result;

// 提取收货地址
$shippingAddress = $orderResult->purchase_units[0]->shipping->address ?? null;
if ($shippingAddress) {
    $recipientName = $orderResult->purchase_units[0]->shipping->name->full_name ?? '';
    $shippingStreet = $shippingAddress->address_line_1;
    $shippingStreet2 = $shippingAddress->address_line_2 ?? '';
    $shippingCity = $shippingAddress->admin_area_2; // 城市
    $shippingState = $shippingAddress->admin_area_1; // 省份/州
    $shippingPostalCode = $shippingAddress->postal_code; // 邮编
    $shippingCountryCode = $shippingAddress->country_code; // 国家编码
}

// 提取账单地址
$billingAddress = $orderResult->payment_source->paypal->billing_address ?? $orderResult->payer->address ?? null;
if ($billingAddress) {
    $payerFullName = ($orderResult->payer->name->given_name ?? '') . ' ' . ($orderResult->payer->name->surname ?? '');
    $billingStreet = $billingAddress->address_line_1;
    $billingStreet2 = $billingAddress->address_line_2 ?? '';
    $billingCity = $billingAddress->admin_area_2;
    $billingState = $billingAddress->admin_area_1;
    $billingPostalCode = $billingAddress->postal_code;
    $billingCountryCode = $billingAddress->country_code;
}

常见问题排查

  • 沙箱环境测试时需要先给测试PayPal账户手动完善账单、收货地址,否则对应字段会返回空
  • 部分地区的个人PayPal账户如果没有主动填写账单地址,会出现账单地址字段为空的情况,业务侧需要做好兼容
  • 建议升级到Checkout PHP SDK最新版本,旧版本可能存在字段映射不全的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:15:06