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

使用PayPal PHP-SDK创建金额模板发票失败求助

解决PayPal PHP-SDK通过模板创建发票的问题

嘿,我明白你折腾PayPal PHP-SDK创建发票的痛苦——这种API调用的细节很容易踩坑。我帮你拆解下代码里的潜在问题,再给你一个能跑通的修正方案:

你的代码里的关键问题

  1. 链式调用虽然可行,但你缺少API上下文初始化和最终提交创建请求的核心步骤——这是很多人容易忽略的环节。
  2. 没有明确设置MerchantInfo和BillingInfo的必填核心字段(比如邮箱),PayPal API对这些信息的完整性要求很严格。

修正后的完整代码示例

// 1. 初始化PayPal API上下文(必须步骤)
$apiContext = new \PayPal\Rest\ApiContext(
    new \PayPal\Auth\OAuthTokenCredential(
        '你的Client ID',     // 替换成你的PayPal应用Client ID
        '你的Client Secret'  // 替换成你的PayPal应用Client Secret
    )
);

// 设置环境:sandbox是沙箱测试,live是生产环境
$apiContext->setConfig([
    'mode' => 'sandbox',
]);

// 2. 构建商家信息(必填)
$merchantInfo = new \PayPal\Api\MerchantInfo();
$merchantInfo->setEmail('你的商家邮箱@example.com')
             ->setFirstName('John')
             ->setLastName('Doe')
             ->setBusinessName('你的商家名称');

// 3. 构建账单接收方信息(必填)
$billingInfo = new \PayPal\Api\BillingInfo();
$billingInfo->setEmail('客户邮箱@example.com');

// 4. 构建总金额对象
$totalAmount = new \PayPal\Api\Currency();
$totalAmount->setValue(99)
            ->setCurrency('EUR');

// 5. 构建发票对象并配置所有参数
$invoice = new \PayPal\Api\Invoice();
$invoice->setMerchantInfo($merchantInfo)
        ->setBillingInfo([$billingInfo]) // 注意是数组格式,支持多个账单接收方
        ->setNote("Medical Invoice 16 Jul, 2013 PST")
        ->setReference('Ref: 200 OK')
        ->setTotalAmount($totalAmount)
        ->setTemplateId('TEMP-9WT50262M1352140L');

// 6. 提交创建发票请求
try {
    $createdInvoice = $invoice->create($apiContext);
    echo "发票创建成功!发票ID: " . $createdInvoice->getId();
} catch (\PayPal\Exception\PayPalConnectionException $ex) {
    // 打印PayPal返回的详细错误信息,这是排查问题的关键
    echo "API连接错误:" . $ex->getData();
} catch (Exception $ex) {
    echo "系统错误:" . $ex->getMessage();
}

关键排查点

  • 模板ID有效性:确保你用的TEMP-9WT50262M1352140L是在PayPal商家后台创建的有效模板,并且模板的币种和你设置的EUR一致——币种不匹配会直接报错。
  • API权限检查:去PayPal开发者后台检查你的应用是否启用了**Invoicing(发票)**权限,没有权限的话调用会失败。
  • 必填字段完整性:MerchantInfo和BillingInfo里的邮箱是必填项,缺少的话API会返回字段缺失的错误。
  • 错误日志利用:当捕获到PayPalConnectionException时,一定要打印$ex->getData(),PayPal会返回非常详细的错误原因,比如“模板不存在”、“金额与模板冲突”等,能帮你快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:54:48