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

SumUp在线结账组件调用失败及checkoutId传递问题求助

SumUp在线结账:「Response error: Client error」及checkoutId传递问题排查

一、先解决checkoutId后端到前端的传递问题

你的代码里存在两个明显问题:

  1. 注释里的变量名拼写错误:$chekoutId → $checkoutId
  2. 前端硬编码了checkoutId,没有使用后端生成的真实值

修正方案:直接通过PHP将变量注入到前端JS中

修改后的完整代码片段:

include 'vendor/autoload.php';

// 初始化变量,避免未定义报错
$checkoutId = '';

try {
  $sumup = new \SumUp\SumUp([
    'app_id' => 'cc_classic_*****************',
    'app_secret' => 'sup_sk_*****************',
  ]);
  $checkoutService = $sumup->getCheckoutService();
  // 注意:SumUp的amount参数必须是最小单位的整数(例如100代表£1.00)
  $checkoutResponse = $checkoutService->create($amount, $currency, $checkoutRef, $payToEmail);
  $checkoutId = $checkoutResponse->getBody()->id;
} catch (\SumUp\Exceptions\SumUpAuthenticationException $e) {
  echo 'Authentication error: ' . $e->getMessage();
} catch (\SumUp\Exceptions\SumUpResponseException $e) {
  // 输出更详细的错误响应,便于排查
  echo 'Response error: ' . $e->getMessage() . '<br>';
  echo 'Detailed response: ' . json_encode($e->getResponseBody());
} catch(\SumUp\Exceptions\SumUpSDKException $e) {
  echo 'SumUp SDK error: ' . $e->getMessage();
}
?>

<div id="sumup-card"></div>
<script
  type="text/javascript"
  src="https://gateway.sumup.com/gateway/ecom/card/v2/sdk.js"
></script>
<script type="text/javascript">
  SumUpCard.mount({
    id: 'sumup-card',
    currency: 'GBP',
    locale: 'en-GB', // 注意:SumUp的locale格式应为en-GB而非UK
    amount: '<?php echo $amount; ?>', // 必须与后端create时的amount完全一致(最小单位整数)
    email: '<?php echo $email; ?>',
    checkout_reference: '<?php echo $checkoutRef; ?>', // 必须与后端create时的checkoutRef完全一致
    showEmail: true,
    showFooter: true,
    showAmount: true,
    checkoutId: '<?php echo $checkoutId; ?>', // 使用后端生成的真实checkoutId
    onResponse: function (type, body) {
      console.log('Type', type);
      console.log('Body', body);
    },
  });
</script>

二、排查「Response error: Client error」的核心原因

这个错误是泛型客户端错误,结合SumUp SDK的特性,常见原因包括:

  • 金额参数格式错误:SumUp要求amount为对应货币最小单位的整数(例如£5.99需传599),如果传入小数会直接报错。
  • 前后端参数不匹配:前端mount的currency、amount、checkout_reference必须与后端create结账时的参数完全一致,否则会触发校验错误。
  • Checkout Reference重复:$checkoutRef必须是唯一值,重复使用会导致创建结账失败。
  • 测试账号权限问题:确认你的测试账号已激活,且App ID/Secret对应测试环境(而非生产环境)。
  • 收款邮箱错误:$payToEmail必须是SumUp平台上已验证的收款账号邮箱,否则无法创建结账链接。

三、额外调试技巧

在SumUpResponseException中添加$e->getResponseBody()输出,能获取SumUp返回的具体错误详情(比如参数格式错误、权限不足等),这是排查Client error的关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:25:40