指南

什么是支付网关?在线支付如何运作,通俗讲解

支付网关是在结账时安全地获取顾客支付信息,把它们传递给银行和卡组织进行审批,然后返回“已批准”或“已拒绝”结果的服务,通常在几秒钟之内完成。它是你的应用与金融体系之间的桥梁。Stripe、PayPal、Adyen、Square 和 Braintree 都是广为人知的例子。

如今,这些公司大多会把支付网关与你收款所需的其他一切打包在一起,因此“支付网关”“支付处理商”和“支付服务商”经常被用来指代同一件事。

用 AI 构建应用时,为什么支付网关很重要

“添加支付功能”是人们向 AI 生成工具提出的最常见的请求之一,也是最容易在细节上出错的一项。代码本身通常很短。真正重要的,是围绕它的各种决定:

  • 选哪家服务商,这取决于你的业务、所在国家以及你销售的产品。
  • 代码在哪里运行。 支付密钥必须留在服务器上,绝不能出现在浏览器中。
  • 你的应用如何得知支付已成功。 可靠的方式是通过服务商发来的 Webhook,而不是依赖顾客跳转到“感谢购买”页面。
  • 你的法律与税务责任,这取决于谁是销售记录方。

了解支付网关的作用,能帮你提出清晰的指令,并检查最终结果是否安全。

日常类比

想象一下在商店里用银行卡付款。

柜台上的银行卡终端就是网关:它安全地读取你的卡,然后把请求发送出去。它本身不做任何决定,只是把“这位顾客能否支付 40 欧元?”这个问题沿着链条传递给你的银行,并把答案带回来。商家的银行(收单行)和你的银行(发卡行)负责做决定,而连接它们的是 卡组织(Visa、Mastercard)。

线上支付网关就是为网络重新打造的那台终端,外加处理网络上传来的银行卡信息所需的安全保障。

线上银行卡支付如何运作

顾客点击“支付”之后的几秒钟内,会发生以下事情:

步骤发生了什么由谁完成
1. 结账顾客在安全的支付表单中输入银行卡信息支付服务商的表单或页面
2. 加密信息被加密,并发送给网关网关
3. 授权请求请求被发送到卡组织和顾客的银行处理商、卡组织
4. 检查银行检查资金和欺诈信号,并可能要求额外验证,例如 3D Secure发卡行
5. 返回结果批准或拒绝的结果返回给你的应用网关
6. 扣款与结算资金被收取,并在服务商的打款周期之后,扣除费用转入你的银行账户处理商、收单行

有两点值得了解:

  • 授权并不等于已经收到钱。 资金会先被预留,然后被扣款,再结算到你的账户,这通常要过几天。
  • 你的应用根本不应该看到银行卡号。 现代服务商会为你提供由它们控制的托管式结账页面或嵌入式字段,你的应用只会得到一个支付的引用。

主要组成部分,以及由谁负责

组成部分含义
支付网关安全地获取支付信息并将其传递出去。
支付处理商在各银行之间传输交易数据。
商户账户代你接收银行卡付款的账户。Stripe 等服务商会将其打包在一起。
收单行(Acquirer)商家一方的银行。
发卡行(Issuer)顾客的银行,负责批准或拒绝。
卡组织(Card network)Visa、Mastercard 等,连接收单行与发卡行。
销售记录方(Merchant of record)在法律上向顾客销售商品,并对税务、退款和争议负责的企业。

一些服务商(Paddle、Lemon Squeezy)自己充当销售记录方,为你处理销售税和增值税,作为交换收取更高的费用。另一些(Stripe、PayPal)则让你自己成为销售记录方,并提供可选的税务工具。若想客观地了解各种选择,请参阅 Stripe 与 Paddle 及 Lemon Squeezy 对比和 Stripe 与 PayPal 对比。

实际例子:销售一门课程

你以 99 欧元的价格销售一门在线课程,并请你的 AI 生成工具添加一个“购买”按钮。

  1. 顾客点击购买。你的服务器使用其私密密钥,请求服务商为这笔 99 欧元的交易创建一个结账会话,并拿到一个链接。
  2. 顾客被引导至服务商的托管式结账页面,输入银行卡信息,并在需要时通过银行完成 3D Secure 验证。
  3. 付款获得批准,顾客被重定向到你的“成功”页面。
  4. 另外,服务商会向你的服务器发送一个 Webhook:“会话 X 的付款已成功。”你的服务器会验证 Webhook 的签名,找到对应订单,将其标记为已付款,并解锁课程。
  5. 几天后,扣除手续费后的款项会进入你的银行账户。

第 4 步最为关键。如果你改为在成功页面上解锁课程,那么任何找到该 URL 的人都可以免费获得课程;而那些在浏览器提前关闭时已经付款的顾客,则会付了钱却什么也得不到。

关键术语

术语含义
结账会话(Checkout session)由你的服务器为某一笔特定购买创建的一次性支付页面或流程。
测试模式(Test mode)使用测试密钥和测试卡号的沙盒环境,不会有真实资金流动。
可公开密钥 / 私密密钥(Publishable / secret key)可公开密钥可以出现在浏览器代码中;私密密钥必须留在服务器上。
3D Secure一个额外步骤,由顾客与其银行确认付款。在欧洲,根据强客户认证(SCA)规则很常见。
PCI DSS卡行业针对任何处理银行卡数据的人所制定的安全标准。
拒付(Chargeback)顾客向其银行对某笔付款提出争议,款项被追回。
退款(Refund)由你主动退还的款项。
打款(Payout)服务商将你已收取的款项转入你银行账户的操作。

常见误解

  • “我必须存储银行卡号才能再次向顾客收费。” 不必。服务商会存储银行卡,并为你提供一个引用令牌,用于重复扣款和订阅。你永远不应该自己存储银行卡号。
  • “成功页面就代表付款成功了。” 请通过服务器上的 Webhook 确认付款。重定向可能被跳过、被伪造,或者根本不会发生。
  • “各家支付服务商的费用差不多。” 费用会因服务商、国家、卡的类型以及是否包含税务处理而有所不同。请查看每家服务商在你所在国家的最新定价页面。
  • “使用 Stripe 就等于符合 PCI 认证。” 它让合规变得容易得多,因为银行卡数据由服务商保管,但你仍然需要完成一份(通常较简短的)自评估。
  • “测试模式和正式模式的行为完全一样。” 两者非常接近,但正式模式需要完成全部验证的账户、为正式环境配置好的 Webhook 端点,以及真实的银行信息。
  • “支付网关会替我处理税务。” 只有当它充当销售记录方,或者你开启并配置了它的税务功能时才会如此。请查阅当地法规,或咨询专业顾问。

向 AI 生成工具提出的要求

  • “为[产品]添加[Stripe] Checkout。在服务器上使用来自环境变量的私密密钥创建会话。”
  • “只有在经过验证的 Webhook 到达后,才把订单标记为已付款,并检查 Webhook 的签名。”
  • “处理 Webhook 被重复发送的情况,不要产生重复订单。”
  • “使用测试模式密钥,并带我使用服务商的测试卡号进行测试,包括一张被拒绝的卡。”
  • “如果顾客付款后关闭了标签页,会发生什么?”
  • “列出所有使用支付密钥的地方,并确认私密密钥永远不会到达浏览器。”

Mythex 中的支付网关

Mythex 不为你构建的应用提供内置支付功能,也没有一键“连接 Stripe”的选项。你需要先在你选择的服务商处创建账户,将其测试密钥添加为项目密钥,然后要求智能体在服务器端构建结账流程。在预览中使用服务商的测试卡进行测试,然后再发布。文档中的使用 Stripe 收款一文有详细的步骤说明,而Webhook则涵盖了确认付款的环节。

如需分步构建,请参阅如何为应用添加支付功能,如果是定期计费,则参阅如何使用 Stripe 添加订阅。

常见问题

简单来说,什么是支付网关?

支付网关是一种服务,它安全地从你的结账页面获取顾客的支付信息,把它们发送给银行和卡组织进行审批,并把批准或拒绝的结果返回给你的应用,通常只需几秒钟。

支付网关和支付处理商有什么区别?

严格来说,网关是负责捕获和传递支付信息的安全入口,而处理商负责在银行之间转移交易。实际上,Stripe、PayPal 和 Adyen 等现代服务商会把两者以及商户账户一起打包成一项服务,因此这些术语经常被混用。

接受银行卡付款需要符合 PCI 认证吗?

凡是接受银行卡的企业,都必须以某种形式符合 PCI DSS 安全标准。使用托管式结账页面或服务商提供的嵌入式支付字段,意味着银行卡号永远不会经过你的服务器,这大大减少了你需要承担的责任。你的服务商会告诉你适用哪种自评估。

什么是销售记录方(merchant of record)?

销售记录方是在法律上向顾客销售商品的企业,负责征收和缴纳销售税或增值税,并处理退款和拒付争议。Paddle 和 Lemon Squeezy 等服务会替你充当销售记录方;而使用 Stripe 或 PayPal 时,通常由你自己承担这一角色。

我能为 AI 生成的应用添加支付功能吗?

可以。AI 生成工具可以编写代码,把你的应用连接到 Stripe 等服务商:在服务器上创建结账会话,处理 Webhook,并更新订单。你仍然需要在该服务商拥有自己的账户,并在正式上线之前,在其测试模式中充分测试。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)