一、具体业务流程
1. 用户下单
- 前端操作:
- 用户在应用中选择商品、填写订单信息(如地址、联系方式等),并点击'下单'按钮。
- 前端将订单信息(商品 ID、数量、价格等)发送到后端。
- 后端处理:
- 接收到订单请求后,生成唯一的订单号(
out_trade_no)。 - 将订单信息存储到数据库中,设置订单状态为'待支付'。
- 接收到订单请求后,生成唯一的订单号(
2. 后端创建订单
- 构建请求参数:
- 使用商户号、应用 ID、随机字符串、订单描述、商户订单号、金额(单位:分)、IP 地址等构建 XML 格式的请求数据。
- 发送请求:
- 使用 HTTP POST 方法将请求数据发送到微信的统一下单 API(
https://api.mch.weixin.qq.com/pay/unifiedorder)。
- 使用 HTTP POST 方法将请求数据发送到微信的统一下单 API(
- 处理响应:
- 接收微信返回的响应数据(XML 格式),解析响应内容。
- 检查返回的
return_code和result_code,确保请求成功。 - 获取
prepay_id,并根据它生成支付签名等信息。
3. 返回支付信息
- 返回给前端:
- 将
prepay_id和其他必要参数(如时间戳、随机字符串、签名等)封装成 JSON 响应返回给前端。
- 将
- 前端支付:
- 前端使用微信支付 SDK,调用支付接口启动支付流程。
- 用户确认支付后,微信客户端处理支付。
4. 用户确认支付
- 用户行为:
- 用户在微信中查看支付信息,确认后进行支付。
- 支付结果:
- 微信处理支付请求,完成后将结果异步通知你的服务器。
5. 微信支付回调
- 回调 URL 配置:
- 在微信商户平台配置你的回调 URL(如
https://yourdomain.com/wechat/notify)。
- 在微信商户平台配置你的回调 URL(如
- 处理回调请求:
- 接收到来自微信的 POST 请求,读取请求体中的 XML 数据。
- 验证签名:
- 提取回调数据中的签名字段,使用相同的参数生成新的签名,与返回的签名进行比较,确保数据的完整性和有效性。
- 更新订单状态:
- 根据回调数据中的
result_code更新数据库中的订单状态。如果支付成功,修改订单状态为'已支付',并进行相应的业务处理(如发货)。
- 根据回调数据中的
- 返回处理结果:
- 向微信返回处理结果,通常是
<xml><return_code>SUCCESS</return_code></xml>。
- 向微信返回处理结果,通常是
6. 返回处理结果
- 响应微信:
- 确保响应格式正确,避免微信因无法解析而重发通知。
7. 订单状态查询(可选)
- 查询订单状态:
- 在用户支付后的一段时间内,可以调用微信的订单查询 API(
https://api.mch.weixin.qq.com/pay/orderquery)来确认订单的状态。
- 在用户支付后的一段时间内,可以调用微信的订单查询 API(

