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

电商网站Amazon Pay集成问题:如何实现在Amazon端完成支付不返回站点

解决Amazon Pay Express集成(无需返回商户站)的问题

你的核心问题是Checkout Session创建时的checkoutMode配置错误,默认的CustomerInitiated模式会引导用户返回商户站完成后续流程,而你需要的Express支付流程需要指定ProcessOrder模式,让Amazon端直接完成支付闭环。下面一步步解决:

1. 后端修改Checkout Session创建参数

在你的Amazon_pay_lib.php中,创建Checkout Session的请求体必须添加checkoutMode: "ProcessOrder",同时确保其他关键参数正确:

// 示例:修改创建Checkout Session的核心参数
$checkoutSessionData = [
    'checkoutMode' => 'ProcessOrder', // 这是实现Express流程的关键
    'storeId' => '你的Amazon Store ID', // 从Amazon商家后台获取
    'paymentDetails' => [
        'paymentIntent' => 'AuthorizeWithCapture', // 直接授权并扣款,根据需求选择
        'chargeAmount' => [
            'amount' => '19.99', // 你的固定订单金额
            'currencyCode' => 'CNY' // 对应货币代码
        ]
    ],
    'returnUrl' => 'https://你的域名/order-success', // 仅用于异常跳转,正常支付不会走这里
    'merchantMetadata' => [
        'merchantReferenceId' => 'ORDER_12345' // 关联你的内部订单ID
    ]
];

2. 前端按钮配置调整

在amazon_pay.php中,渲染Amazon Pay按钮时,要匹配Express流程的配置,确保传入正确的checkoutSessionId和productType:

// 加载Amazon Pay SDK后渲染按钮
AmazonPay.renderButton('#AmazonPayButton', {
    merchantId: '你的Amazon Merchant ID',
    storeId: '你的Amazon Store ID',
    checkoutSessionId: '后端生成的Checkout Session ID', // 直接传入已创建的Session ID
    productType: 'PayOnly', // 固定金额支付选这个,不要用Cart
    placement: 'Checkout',
    buttonColor: 'Gold'
});

3. 必须配置Webhook获取支付结果

因为Express流程中用户支付完成后不会跳转回你的网站,所有支付状态更新都依赖Amazon的Webhook通知:

  • 登录Amazon Pay商家后台,找到Webhook配置,添加OrderReferenceCreated、PaymentAuthorized、PaymentCaptured这几个事件
  • 后端写一个接口(比如/amazon-pay-webhook)接收回调,验证Amazon的签名(用官方提供的公钥),然后根据回调内容更新你的订单状态
  • 示例Webhook处理逻辑(PHP):
// 验证Amazon签名逻辑(伪代码)
public function handleWebhook(Request $request) {
    $signatureHeader = $request->header('x-amz-pay-signature');
    $signatureTimestamp = $request->header('x-amz-pay-signature-timestamp');
    $payload = $request->getContent();
    
    // 使用Amazon公钥验证签名,确保请求合法
    $isValid = $this->verifySignature($payload, $signatureHeader, $signatureTimestamp);
    
    if ($isValid) {
        $event = json_decode($payload, true);
        switch ($event['eventType']) {
            case 'PaymentAuthorized':
                // 更新订单为已授权状态
                $this->updateOrderStatus($event['merchantMetadata']['merchantReferenceId'], 'authorized');
                break;
            case 'PaymentCaptured':
                // 更新订单为已完成状态
                $this->updateOrderStatus($event['merchantMetadata']['merchantReferenceId'], 'completed');
                break;
        }
        return response()->json(['status' => 'success']);
    }
    return response()->json(['status' => 'invalid'], 403);
}

常见错误排查

  • 忘记设置checkoutMode: ProcessOrder:这是最常见的问题,默认模式会强制返回商户站
  • Webhook未配置或未验证签名:导致无法获取支付结果,订单状态无法更新
  • productType设置错误:固定金额支付必须用PayOnly,Cart适用于购物车场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:14:58