托管支付页面 (HPP)

托管支付页面 (Hosted Payment Page) 是 GoGoPay 提供的安全、美观的支付界面, 让您无需处理敏感的支付信息,即可为用户提供完整的支付体验。

什么是托管支付页面?

托管支付页面 (HPP) 是由 GoGoPay 托管的安全支付界面,具有以下特点:

  • PCI DSS 合规:符合最高级别的支付卡行业安全标准
  • 响应式设计:完美适配桌面和移动设备
  • 多语言支持:支持多种语言和货币
  • 品牌定制:可自定义颜色、Logo 等品牌元素
  • 快速集成:几行代码即可完成集成
优势: 使用 HPP 可以大大简化您的 PCI 合规要求,因为敏感的支付信息不会经过您的服务器。

集成流程

集成 HPP 只需要三个简单步骤:

步骤 1:创建支付会话

在您的后端调用 GoGoPay API 创建支付会话:

POST /v1/checkout/sessions
curl -X POST https://api.gogopay.com/v1/checkout/sessions \ -H "Authorization: Bearer sk_live_..." \ -H "Content-Type: application/json" \ -d '{ "payment_method_types": ["card"], "line_items": [{ "price_data": { "currency": "cny", "product_data": { "name": "商品名称" }, "unit_amount": 2000 }, "quantity": 1 }], "mode": "payment", "success_url": "https://example.com/success", "cancel_url": "https://example.com/cancel" }'

步骤 2:重定向到支付页面

将用户重定向到返回的 url 字段:

// JavaScript 示例 fetch('/create-checkout-session', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ items: [{ id: 'product-1', quantity: 1 }] }) }) .then(response => response.json()) .then(session => { // 重定向到 GoGoPay 托管的支付页面 window.location.href = session.url; }) .catch(error => { console.error('Error:', error); });

步骤 3:处理支付结果

用户完成支付后,会被重定向到您指定的成功或取消页面。同时,您会收到 Webhook 通知。

API 参数详解

创建支付会话时,您可以配置以下参数:

必需参数

参数 类型 描述
payment_method_types array 支持的支付方式,如 ["card", "alipay", "wechat"]
line_items array 商品列表
mode string 支付模式:"payment", "subscription", "setup"
success_url string 支付成功后的重定向 URL
cancel_url string 支付取消后的重定向 URL

可选参数

参数 类型 描述
customer string 客户 ID,用于保存支付方式
customer_email string 客户邮箱,会预填到支付表单
locale string 界面语言:"zh", "en", "ja" 等
metadata object 自定义元数据,最多 50 个键值对
expires_at timestamp 会话过期时间,默认 24 小时

品牌定制

您可以自定义支付页面的外观以匹配您的品牌:

{ "payment_method_types": ["card"], "line_items": [...], "mode": "payment", "success_url": "https://example.com/success", "cancel_url": "https://example.com/cancel", "custom_text": { "submit": { "message": "我们将在 2-3 个工作日内处理您的订单" } }, "ui_mode": "hosted", "branding": { "logo": "https://example.com/logo.png", "primary_color": "#1a73e8", "background_color": "#ffffff" } }

支付方式配置

GoGoPay 支持多种支付方式,您可以根据业务需求选择:

信用卡/借记卡

"payment_method_types": ["card"]

数字钱包

"payment_method_types": ["alipay", "wechat", "apple_pay", "google_pay"]

银行转账

"payment_method_types": ["bank_transfer", "sepa_debit"]

组合支付方式

"payment_method_types": ["card", "alipay", "wechat", "apple_pay"]

订阅支付

HPP 也支持订阅支付模式:

{ "payment_method_types": ["card"], "mode": "subscription", "line_items": [{ "price": "price_1234567890", // 预先创建的价格 ID "quantity": 1 }], "success_url": "https://example.com/success?session_id={CHECKOUT_SESSION_ID}", "cancel_url": "https://example.com/cancel" }

处理支付结果

用户完成支付后,有多种方式获取支付结果:

1. URL 参数

success_url 中使用模板变量:

"success_url": "https://example.com/success?session_id={CHECKOUT_SESSION_ID}"

2. 查询会话状态

// 在成功页面查询会话详情 fetch(`/checkout/sessions/${sessionId}`, { method: 'GET', headers: { 'Authorization': 'Bearer sk_live_...' } }) .then(response => response.json()) .then(session => { if (session.payment_status === 'paid') { // 支付成功,处理业务逻辑 console.log('Payment successful!'); } });

3. Webhook 通知

推荐使用 Webhook 来处理支付结果,确保可靠性:

// Webhook 处理示例 app.post('/webhook', (req, res) => { const event = req.body; switch (event.type) { case 'checkout.session.completed': const session = event.data.object; // 处理支付成功逻辑 fulfillOrder(session); break; case 'checkout.session.expired': // 处理会话过期 break; default: console.log(`Unhandled event type ${event.type}`); } res.status(200).send('OK'); });

安全最佳实践

  • HTTPS 必需:所有 URL(包括重定向 URL)必须使用 HTTPS
  • 验证会话:在成功页面验证会话状态,不要仅依赖 URL 参数
  • 使用 Webhook:使用 Webhook 确保支付状态的可靠通知
  • 幂等性:确保重复的 Webhook 事件不会重复处理
  • 超时处理:设置合理的会话过期时间

移动端优化

HPP 自动适配移动设备,但您可以进一步优化用户体验:

深度链接

支持移动应用的深度链接:

"success_url": "myapp://payment/success?session_id={CHECKOUT_SESSION_ID}", "cancel_url": "myapp://payment/cancel"

移动钱包

启用移动设备上的数字钱包:

"payment_method_types": ["card", "apple_pay", "google_pay", "samsung_pay"]

测试和调试

在沙箱环境中测试 HPP 集成:

// 沙箱环境配置 const gogoPayConfig = { apiKey: 'sk_test_...', // 使用测试密钥 apiUrl: 'https://sandbox-api.gogopay.com' }; // 创建测试会话 fetch('https://sandbox-api.gogopay.com/v1/checkout/sessions', { method: 'POST', headers: { 'Authorization': `Bearer ${gogoPayConfig.apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_method_types: ['card'], line_items: [{ price_data: { currency: 'cny', product_data: { name: '测试商品' }, unit_amount: 1000 }, quantity: 1 }], mode: 'payment', success_url: 'https://example.com/success', cancel_url: 'https://example.com/cancel' }) }) .then(response => response.json()) .then(session => { window.location.href = session.url; });

常见问题

问题 原因 解决方案
支付页面无法加载 会话已过期或 URL 无效 重新创建支付会话
重定向失败 URL 不是 HTTPS 或格式错误 检查 success_url 和 cancel_url
支付方式不显示 地区限制或配置错误 检查支付方式配置和地区设置
品牌定制不生效 图片 URL 无效或格式不支持 使用 HTTPS 图片 URL,支持 PNG/JPG

性能优化

  • 预加载:在用户点击支付前预创建会话
  • 缓存:合理缓存商品和价格信息
  • 压缩:压缩传输的数据
  • CDN:使用 CDN 加速静态资源

下一步

现在您已经了解了 HPP 的使用方法,可以: