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

PayPal无登录信用卡支付请求格式错误及JSON结构咨询

解决PayPal无登录信用卡支付的请求格式错误问题

核心错误原因

你遇到的Request is not well-formed, syntactically incorrect, or violates schema.错误,本质是请求JSON不符合PayPal API的语法规范或字段要求,常见触发场景包括:

  • JSON语法错误(比如多余逗号、未闭合引号)
  • 缺少API强制要求的必填字段
  • 字段格式不符合规则(比如金额必须带两位小数、卡有效期格式错误)
  • 使用了已弃用的API字段或端点

正确的请求JSON结构(v2 Checkout Orders API)

PayPal目前推荐使用v2 Checkout Orders API实现无登录信用卡支付,以下是完全符合schema规范的请求示例:

{
  "intent": "CAPTURE",
  "purchase_units": [
    {
      "amount": {
        "currency_code": "USD",
        "value": "10.00"
      }
    }
  ],
  "payment_source": {
    "card": {
      "number": "4111111111111111",
      "expiry": "2028-12",
      "cvv": "123",
      "name": "John Doe",
      "billing_address": {
        "address_line_1": "123 Main St",
        "admin_area_2": "San Jose",
        "admin_area_1": "CA",
        "postal_code": "95131",
        "country_code": "US"
      }
    }
  }
}

关键字段说明

  • intent: 固定为CAPTURE(创建订单后直接捕获资金)或AUTHORIZE(先授权后延迟捕获)
  • purchase_units[0].amount: 必填项,currency_code为三位ISO货币代码,value必须是带两位小数的字符串
  • payment_source.card: 信用卡核心信息
    • number: 合法信用卡号(沙盒环境可使用PayPal官方测试卡号)
    • expiry: 格式必须为YYYY-MM,且为未来有效日期
    • cvv: 三位或四位卡面安全码
    • name: 卡面印刷的持卡人姓名
    • billing_address: 可选但推荐填写,可降低支付失败概率

PHP代码示例(集成请求结构)

以下是PHP中构造并发送合规请求的示例,确保JSON编码无语法错误:

<?php
$apiUrl = 'https://api-m.sandbox.paypal.com/v2/checkout/orders';
$clientId = '你的PayPal客户端ID';
$clientSecret = '你的PayPal密钥';

// 构造请求数组
$requestData = [
    'intent' => 'CAPTURE',
    'purchase_units' => [
        [
            'amount' => [
                'currency_code' => 'USD',
                'value' => '10.00'
            ]
        ]
    ],
    'payment_source' => [
        'card' => [
            'number' => '4111111111111111',
            'expiry' => '2028-12',
            'cvv' => '123',
            'name' => 'John Doe',
            'billing_address' => [
                'address_line_1' => '123 Main St',
                'admin_area_2' => 'San Jose',
                'admin_area_1' => 'CA',
                'postal_code' => '95131',
                'country_code' => 'US'
            ]
        ]
    ]
];

// 转换为JSON,避免转义问题
$jsonData = json_encode($requestData, JSON_UNESCAPED_SLASHES);

// 发送请求
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Basic ' . base64_encode($clientId . ':' . $clientSecret)
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// 处理响应
if ($httpCode == 201) {
    $orderData = json_decode($response, true);
    echo '订单创建成功,订单ID:' . $orderData['id'];
    // 后续可调用v2/checkout/orders/{order_id}/capture接口捕获资金
} else {
    echo '错误响应:' . $response;
}
?>

关键注意事项

  • 沙盒测试优先:先用PayPal沙盒环境测试,使用官方提供的测试卡号、有效期和CVV
  • JSON编码校验:PHP中使用json_encode时,确保数组结构正确,避免空值或类型不匹配的字段(比如金额不能用整数,必须是带两位小数的字符串)
  • 账号权限验证:确保你的PayPal商家账号已开启直接信用卡支付权限,客户端ID/密钥对应正确的环境(沙盒/生产)
  • 必填字段检查:所有API要求的必填字段必须完整填写,比如intent、amount、card.number、card.expiry

内容的提问来源于stack exchange,提问作者José Vicente López Delgadillo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:55:55