### 在线支付系列(二):支付宝#### 简介支付宝是中国领先的第三方支付平台,由阿里巴巴集团创办于2004年。它不仅提供个人用户的在线支付服务,还为企业提供全面的支付解决方案。支付宝支持多种支付方式,包括但不限于移动支付、网上支付、线下支付等。####
摘要:在线支付系列(二):支付宝 & 微信支付——一杯咖啡的扫码之旅 一杯 ¥28 的拿铁,触发了什么? 周一早上 8:30,你走进公司楼下的咖啡店,扫了吧台上的二维码,选了一杯冰美式,&
在线支付系列(二):支付宝 & 微信支付——一杯咖啡的扫码之旅
一杯 ¥28 的拿铁,触发了什么?
周一早上 8:30,你走进公司楼下的咖啡店,扫了吧台上的二维码,选了一杯冰美式,¥28。
打开微信,扫一下,输入指纹,手机震动——"支付成功"。整个过程不到 2 秒。
你可能觉得这没什么。但如果你是这家咖啡店的老板,刚请了个开发者帮你搭线上点单系统——你的开发者正在跟支付宝和微信支付的签名机制较劲。
这篇文章,就从这杯 ¥28 的拿铁出发,带你走通支付宝和微信支付的完整对接流程。我们不会一上来就甩代码,而是先搞懂每一步"为什么要这么做",然后再写代码。
一、扫码支付的全景:从你扫码到商户收钱
让我们先跟着这笔 ¥28,看看它完整的旅程。
1.1 支付宝 Native 扫码支付的时序
你用支付宝扫码支付时,背后发生的事情是这样的:
你的手机App 咖啡店服务器 支付宝服务器
│ │ │
│ │ ① 创建订单 │
│ │ "冰美式 ¥28" │
│ │─────────────────→│
│ │ ② 返回二维码链接 │
│ │←─────────────────│
│ ③ 吧台展示二维码 │ │
│ │ │
│ ④ 你扫码 + 输入指纹 │
│───────────────────────────────────→│
│ │ │ ⑤ 支付宝扣款
│ │ ⑥ 异步通知:"¥28 已收到" │
│ │←─────────────────│
│ │ ⑦ 更新订单状态 │
│ ⑧ 手机显示"支付成功" │
│←──────────────────────────────────│
注意第 ⑥ 步:支付宝不是直接把结果告诉你的手机,而是通过一个异步通知告诉咖啡店的服务器。这个异步通知机制,是整个支付对接中最核心、也最容易出问题的部分。
1.2 微信支付 Native 扫码支付的时序
微信支付的流程几乎一样,但在细节上有重要差异——最大的不同是:微信支付的异步通知是加密的。
你的手机App 咖啡店服务器 微信支付服务器
│ │ │
│ │ ① 创建订单 │
│ │ "冰美式 2800分" │ ← 注意:微信用"分"!
│ │─────────────────→│
│ │ ② 返回二维码链接 │
│ │←─────────────────│
│ │ │
│ ③ 你扫码 + 输入密码 │
│───────────────────────────────────→│
│ │ ④ 异步通知(AES-GCM 加密)│
│ │←─────────────────│
│ │ ⑤ 解密 → 验签 │
│ │ → 更新订单 │
两个关键差异先记住,后面写代码时会反复用到:
金额单位:支付宝用元(字符串 "28.00"),微信用分(整数 2800)
回调加密:支付宝是明文 + 签名,微信是 AES-GCM 加密 + 签名(需要先解密再验签)
二、安全机制:为什么要签名?
在我们动手写代码之前,必须先搞懂一个问题:为什么每个请求都需要"签名"?
设想这个场景:你的咖啡店服务器向支付宝发了一个请求——"帮我收 ¥28"。
