为了帮助商户开发者快速便捷的上手V3支付的接口参数设置格式,同时验证各个参数的可用性和正确性,微信支付发布了一个预支付的脚本,并将脚本部署到 Postman 云工作台 WeChat Pay Public Workspace。只需要将集合《微信支付 APIv3》 fork 到自己的工作台,就可以在 Postman 上轻松地构造并发送微信支付 APIv3 请求了。
但是这个脚本只支持普通商户,不支持服务商,如果要进行服务商接口参数的验证,需要对脚本进行修改.将在另外一篇文章《如何用postman验证微信支付V3普通商户的接口参数》中介绍
前置条件
- Postman,一款业界知名的 API 构建和使用平台。建议注册一个账户,便于使用它各种功能。
- 成为微信支付商户。
- 商户 API 私钥:商户申请商户API证书时,会生成商户私钥,并保存在本地证书文件夹的文件 apiclient_key.pem 中。
快速开始
步骤1:Fork 方式导入脚本
点击 Collection Web View | Postman进入向导,如下图所示。
点击 Fork Collection
进入下一步,填入标签 Fork Label
并选择目的工作台 Workspace
。一般情况下,导入个人工作台 My Workspace 即可。
点击 Fork Collection
完成导入。在你指定的 workspace 中可以看到《微信支付 APIv3》了。
步骤2:配置 Environment
环境(Environment) 是一组变量 (Varibles) 的集合。 脚本从环境中读取变量,用来计算请求的签名。
你可以从《微信支付 APIv3》提供的 商户参数模版 中 fork 一个空环境到自己的工作台。
接下来,在你工作台的 Enviroments 中找到新建的环境,点击 Add a new varialbe
添加新的变量:
mchid
:必填,商户号。merchant_serial_no
:必填,商户 API 证书序列号。apiclient_key.pem
:必填,PEM 格式的商户 API 私钥。
Warning 为了安全,请仔细阅读安全注意事项。
一组常见配置如下图所示。
步骤3:发送请求
Note 我们建议,使用桌面版 Postman app 发送请求,速度更快,体验更好!
现在回到工作台,进入《微信支付 APIv3》集合,选择你要发送的请求。
然后,填入请求参数,按照注释修改 Body 中的参数。
最后,选择你之前配置的 Environment,再点击地址栏右侧的Send
按钮,发送请求吧。
实现原理
Pre-Request Script
是一段 Javascript 脚本。Postman 在请求发送之前,执行这段脚本。脚本做了以下操作:
- 加载依赖库
- 读取 Environment 中的商户参数变量
- 根据请求的方法、URL、参数、Body 等信息,构造签名串,并计算请求签名
- 设置请求头
Authorization
Note 有关 Postman 脚本的更多信息,请参考 Scripting in Postman。
参数变量
变量名 | 是否必填 | 描述 | 备注 |
---|---|---|---|
mchid | 是 | 商户号 | |
merchant_serial_no | 是 | 商户 API 证书的证书序列号 | |
apiclient_key.pem | 是 | PEM 格式的商户 API 私钥 | |
openid | 否 | 用户的 OpenID,测试请求中的 {{openid}} | |
appid | 否 | 公众账号或者小程序的 AppID | |
shangmi | 否 | 值为 true 时使用商密签名 | 默认值为空,即使用 RSA 签名 |
pubkey.pem | 国密签名时必填 | PEM 格式的商户 API 公钥 | 如果私钥 PEM 中包含公钥,该变量可不填 |
server_url | 否 | 服务器地址 | 默认设置为 https://api.mch.weixin.qq.com |
依赖库
脚本直接使用了:
- forge.min.js,forge 的 PKI、RSA 和 ASN.1。
- sm2.js,腾讯国密库 TencentSM-javascript 的 SM2 签名。
为了避免每次请求都下载依赖库,两个库以源代码的方式存储在 Collection Variables。这大大减少了使用网页版 Postman 发送请求时的耗时。
安全注意事项
商户 API 私钥是非常敏感的信息。使用此代码时,应记住以下几点:
- 将配置了私钥的工作台(workspace)的可见性(Visibility)设置为私有
Personal
或者Private
,不要设置为公开Public
。 - 私钥的变量类型设置为
secret
。变量值会以掩码的形式显示在屏幕上。 - 私钥的变量值设置在
Current Value
。Current Value
仅保存在本地 Session,不会被发送至 Postman 的服务器。 - 如果使用来自其他人的 Postman 脚本,请检查依赖库、变量和脚本,确保没有被修改,避免被植入不安全代码。
Note 有关 Postman 的安全机制,请参考 Postman Security。
如何发起国密请求
使用 国密-商户参数模版,在环境变量中设置:
shangmi
:值为true
。mchid
:必填,商户号。merchant_serial_no
:必填,商户 API 证书序列号。apiclient_key.pem
:必填,PEM 格式的商户 API 私钥。pubkey.pem
:必填,PEM 格式的商户 API 国密公钥。
这样,脚本会使用国密 SM2 计算签名,发送国密请求了。