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

如何借助sumup-ecom-php-sdk及SumUp支付组件获取支付链接?

正确使用sumup-ecom-php-sdk及SumUp支付组件生成支付链接的方案

一、获取官方合规的支付链接

你当前创建Checkout的代码逻辑正确,但create方法的响应中若未返回支付链接,可通过SDK的get方法获取完整的Checkout详情,从中提取官方托管支付链接:

// 创建Checkout后,调用get方法获取完整信息
$checkoutDetails = $checkoutService->get($checkoutId);
// 提取官方支付跳转链接
$officialPaymentUrl = $checkoutDetails->getBody()->redirect_url;

该链接会直接跳转到SumUp官方托管的支付页面,无需自行搭建前端支付界面。若你需要自定义支付页面,可继续使用你当前的SumUp Card SDK方案。

二、自定义前端Card SDK的联动逻辑

你当前的前端挂载代码已正确初始化Card组件,但需明确核心逻辑:

  • 点击提交后,银行卡信息直接发送至SumUp官方支付网关,不会经过你的后端(符合PCI合规要求,避免你的系统处理敏感卡数据)。
  • 支付结果通过前端回调+后端Webhook双重方式通知,这是实现前后端联动的核心。

完善前端回调处理

在onResponse回调中处理不同支付状态,完成前端页面跳转或状态提示:

onResponse: function (type, body) {
    switch(type) {
        case "success":
            // 支付成功,跳转到你的发票确认页面
            window.location.href = `/invoice/${invoiceNumber}/confirm`;
            break;
        case "error":
            // 支付失败,展示错误信息
            alert(`支付失败:${body.message}`);
            break;
        case "invalid":
            alert("输入信息无效,请检查银行卡信息");
            break;
        default:
            break;
    }
}

后端配置Webhook接收支付结果

  1. 在SumUp商家后台配置Webhook端点(例如你的后端接口/sumup/webhook),勾选checkout_completed等关键事件。
  2. 后端编写接口验证签名并处理支付状态:
// web.php
Route::post('/sumup/webhook', [SumupPayController::class, 'webhook']);

// SumupPayController.php
public function webhook(Request $request)
{
    // 验证SumUp签名,防止伪造请求
    $signature = $request->header('X-Sumup-Signature');
    $rawBody = $request->getContent();
    $isValid = \SumUp\Utils\Signature::verify($rawBody, $signature, env('SUMUP_APP_SECRET'));
    
    if (!$isValid) {
        return response('无效签名', 403);
    }
    
    $payload = $request->all();
    $checkoutId = $payload['checkout_id'];
    $paymentStatus = $payload['status'];
    $invoiceNumber = $payload['merchant_reference']; // 对应创建Checkout时传入的checkoutRef
    
    // 根据支付状态更新发票记录
    if ($paymentStatus === 'success') {
        Invoice::where('number', $invoiceNumber)->update(['status' => '已支付']);
    }
    
    return response('处理完成', 200);
}

三、自行生成支付链接的优化建议

你之前拼接的自定义支付链接逻辑可行,但可优化:

  • 优先通过checkoutId从后端查询发票号(调用checkoutService->get($checkoutId)获取merchant_reference),减少前端传递的参数数量。
  • 生产环境必须使用HTTPS协议,避免参数泄露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:07:42