有道无术,术尚可求,有术无道,止于术。
文章目录
- 前言
- 1. 获取基本参数
- 商户号(mchid)
- 应用ID(appid)
- 绑定商户号和应用ID
- 2. 配置API v3密钥
- 3. 下载并配置商户API证书
- 3.1 简介
- 3.2 生成证书串
- 3.3 获得商户API证书文件
- 4. 获取微信平台证书
前言
在之前,我们申请了商户号、公众号,可以获取到一些基本参数,另外接入微信支付时,还需要配置一些秘钥、证书。
接下来,会汇总讲解各种接入之前需要的准备工作。
1. 获取基本参数
商户号(mchid)
首先要参考微信支付之注册商户号注册商户。
进入微信支付平台,扫码登录。
具体查阅目录为 【账户中心-> 商户信息-> 商户号】
应用ID(appid)
公众号申请成功后,登录公众号平台即可获取对应的APPID
。
进入微信公众号平台扫码登录。
具体查阅目录为 【开发-> 基本配置-> 公众号开发信息】。
绑定商户号和应用ID
APPID
和mchid
全部申请完毕后,需要建立两者之间的绑定关系。
直连模式下,APPID
和mchid
之间的关系为多对多,即一个APPID
下可以绑定多个mchid
,而一个mchid
也可以绑定多个APPID
。
登录微信商户平台,进入【产品中心-> APPID授权管理】目录,输入appid
点击确定。
前往公众平台,进入【微信支付-> 商户号管理】目录,查看相关商户号信息,确认授权申请即可。
2. 配置API v3密钥
首先我们看下微信支付API v3版本的一些改进
。
为了在保证支付安全的前提下,带给商户简单、一致且易用的开发体验,微信推出了全新的微信支付API v3(V3版本接口)。
相较于之前的微信支付API,主要区别是:
- 遵循统一的
REST
的设计风格 - 使用
JSON
作为数据交互的格式,不再使用XML
- 使用基于非对称密钥的
SHA256-RSA
的数字签名算法,不再使用MD5
或HMAC-SHA256
- 不再要求携带
HTTPS
客户端证书(仅需携带证书序列号) - 使用
AES-256-GCM
,对回调中的关键信息进行加密保护
基于以上说明本系列都是基于最新的v3版
的支付API
。如果使用的是v2版本
需要申请API
秘钥,v3版本
则需要申请API v3密钥
。
为了保证安全性,微信支付在 回调通知和平台证书下载接口中,对关键信息进行了AES-256-GCM
加密。API v3密钥
是加密时使用的对称密钥。商户需先在【商户平台】->【API安全】
的页面设置该密钥,请求才能通过微信支付的签名校验。密钥的长度为32个字节。
APIv3密钥属于敏感信息,请妥善保管不要泄露,如果怀疑信息泄露,请重设密钥。
登录商户平台,进入【账户中心 => API安全 】目录,设置APIV3
密钥。
在弹出窗口中点击已沟通。
输入API密钥,内容为32位字符,包括数字及大小写字母。这里可以使用随机密码生成工具生成一个。
复制生成的字符,点击确认获取短信验证码。
输入短信验证码,点击“确认”即设置成功。
3. 下载并配置商户API证书
3.1 简介
API证书
是指由商户申请的,用来证实商户身份的证书。API证书由证书授权机构Certificate Authority
(简称CA)颁发。证书中包含商户的商户号、公司名称、公钥等信息。请妥善保管API证书文件,防止泄露。
使用场景:
-
APIv2
中,调用微信支付安全级别较高的接口(如:退款、企业红包、企业付款) -
APIv3
中,调用微信支付所有接口
3.2 生成证书串
商户可自行生成证书请求串,或下载微信支付证书工具生成证书请求串,并将证书请求串提交到商户平台后才能获得商户API
证书文件,私钥文件请注意安全保存。
首先登录(需要商户号的超级管理员才能操作)【微信支付商户平台 - 账户中心 - 账户设置 - API安全 - 申请API证书】
申请证书,确定后请勿关闭页面。
在弹出窗口中点击“确定”。
在弹出窗口内点击“下载证书工具”按钮下载证书工具。
也可通过以下链接下载证书工具:
-
windows版本
-
mac版本
下载完成后双击WXCertUtil.exe
文件安装,安装后输入保存路径,点击申请证书。
在【证书工具】,填写商户号信息(商户号、商户名称),点击下一步。
在【证书工具】,点击复制证书请求串。
在【商户平台】,粘贴证书请求串。
输入操作密码,安全验证后生成证书串。
3.3 获得商户API证书文件
复制证书串。
在【证书工具】,粘贴证书串,点击下一步。
申请证书成功。
点击查看证书文件夹
,查看已生成的证书文件。解压后如下所示:
4. 获取微信平台证书
微信支付平台证书
是指由微信支付 负责申请的,包含微信支付平台标识、公钥信息的证书。商户可以使用平台证书中的公钥进行验签。不同的商户,对应的微信支付平台证书是不一样的。
平台证书会周期性更换。商户应定时通过API下载新的证书,不要依赖人工更新证书(后面使用代码实现)。