如何借助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接收支付结果
- 在SumUp商家后台配置Webhook端点(例如你的后端接口
/sumup/webhook),勾选checkout_completed等关键事件。 - 后端编写接口验证签名并处理支付状态:
// 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
相关产品推荐
相关产品推荐

