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

PHP集成MasterCard支付时Checkout.configure()报INVALID_REQUEST错误

MasterCard支付集成问题:Checkout.configure()抛出INVALID_REQUEST错误导致支付页面空白

问题概述

使用MasterCard v59 REST API集成支付功能时,已成功获取SessionId,但跳转结账页面后返回空白。浏览器控制台显示Checkout.configure()抛出INVALID_REQUEST错误,导致Checkout.showPaymentPage()无法正常加载支付页面。

现有代码

后端PHP代码

$data = array(
    'apiOperation' => 'CREATE_CHECKOUT_SESSION',
    'interaction' => array(
        'operation' => 'AUTHORIZE',
        'merchant' => array(
            'name' => $merchant
        )
    ),
    'order' => array(
        'id' => $orderId,
        'amount' => $amount,
        'currency' => $currency
    ),
);

$jsonPayload = json_encode($data);

$headers = array(
    'Content-Type: application/json',
    'Authorization: Basic ' . base64_encode('merchant.MERCHANTID:mypassword')
);

$options = array(
    CURLOPT_URL => $url,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $jsonPayload,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => $headers
);

$curl = curl_init();
curl_setopt_array($curl, $options);

$response = curl_exec($curl);

if ($response === false) {
    echo 'cURL error: ' . curl_error($curl);
} else {
    $responseData = json_decode($response, true);
    $sessionId = $responseData['session']['id'];
}
curl_close($curl);
?>

前端HTML/JS代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>

<script>
Checkout.configure({
        merchant: '<?php echo $merchant; ?>',
        order: {
            amount: function(){
                return <?php echo $amount ?>;
            },
            currency: '<?php echo $currency; ?>',
            description: 'Order Goods',
            id: '<?php echo $orderId; ?>'
        },
        interaction: {
            merchant: {
                name: "Milind Mhaskar",
                address: {
                    line1: "Anna nagar",
                    line2: "Jalgaon"
                }
            }
        },
        session: {
            id: '<?php echo $sessionId; ?>'
        }
    });
    Checkout.showPaymentPage();
</script>

排查与解决方案

以下是针对INVALID_REQUEST错误的核心排查点和修复方案:

  • 缺少Checkout SDK引入:前端代码未加载MasterCard官方Checkout SDK脚本,这是导致Checkout对象未定义或配置失败的关键原因。必须在<head>中添加对应版本的SDK:

    <script src="https://ap-gateway.mastercard.com/checkout/version/59/checkout.js"></script>
    
  • 订单信息不匹配:创建会话时的订单id、amount、currency必须与前端配置完全一致。前端order.amount使用函数返回可能导致动态值与会话固定值不匹配,直接改为固定数值:

    order: {
        amount: <?php echo $amount; ?>, // 移除函数包装,直接传入固定值
        currency: '<?php echo $currency; ?>',
        description: 'Order Goods',
        id: '<?php echo $orderId; ?>'
    }
    
  • 交互参数冲突:前端额外配置的interaction.merchant.address在会话创建时未定义,可能引发参数不匹配。暂时简化interaction配置,只保留必要字段,甚至可以完全移除(会话创建时已配置核心交互参数)。

  • 会话ID有效性验证:在后端添加日志打印完整会话响应,确认session.id正确生成且无格式问题:

    $responseData = json_decode($response, true);
    // 打印响应到日志,排查会话创建细节
    error_log(print_r($responseData, true));
    $sessionId = $responseData['session']['id'];
    
  • 商户ID一致性:确保前端merchant参数与后端创建会话时使用的商户ID完全一致,检查$merchant变量是否正确传递。

修正后的前端代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MasterCard支付</title>
    <!-- 引入MasterCard Checkout SDK v59 -->
    <script src="https://ap-gateway.mastercard.com/checkout/version/59/checkout.js"></script>
</head>
<body>
    <script>
        Checkout.configure({
            merchant: '<?php echo $merchant; ?>',
            order: {
                amount: <?php echo $amount; ?>,
                currency: '<?php echo $currency; ?>',
                description: 'Order Goods',
                id: '<?php echo $orderId; ?>'
            },
            session: {
                id: '<?php echo $sessionId; ?>'
            }
        });
        Checkout.showPaymentPage();
    </script>
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:55:08