接入准备:商户号申请、API密钥设置、证书下载与安全配置
好,咱们正式开始动手了。这一章讲的是接入微信支付前最基础、也最容易踩坑的环节——商户号申请、API密钥设置,还有证书那点事。我见过不少新手,代码写得挺溜,结果卡在申请环节好几天。说白了,这些准备工作没做好,后面全是白搭。
一、商户号申请:你的支付“身份证”
微信支付不像个人转账,你得有个正式的商户身份。这个身份就是商户号(mchid)。我个人习惯把商户号比作“营业执照”,没有它,微信根本不认你。
申请流程
- 注册微信商户平台:访问
pay.weixin.qq.com,用企业或个体工商户信息注册。注意,个人主体目前申请不了。 - 提交资料审核:营业执照、法人身份证、对公账户信息。我记得第一次申请时,因为营业执照照片反光被驳回了三次……嗯,拍照时一定放平、光线均匀。
- 账户验证:微信会往你的对公账户打一笔随机金额(几分钱),你需要在商户平台回填这笔金额。验证通过后,商户号就激活了。
⚠️ 避坑指南:我曾经遇到一个项目,因为法人身份证过期了几天,审核直接卡住。建议申请前先检查所有证件的有效期。
二、API密钥设置:支付安全的“锁芯”
商户号拿到手,接下来就是设置API密钥。这个密钥是用来签名请求的,说白了就是告诉微信:“嘿,这个请求是我发的,不是别人冒充的。”
设置步骤
- 登录商户平台,进入【账户中心】→【API安全】。
- 找到【API密钥】选项,点击设置。
- 输入一个32位的字符串(字母+数字,大小写敏感)。
💡 我的习惯:我一般用
openssl rand -hex 16 生成一个32位的随机字符串,然后手动复制进去。千万别用“123456”这种弱密钥,你想想看,这等于把家门钥匙挂门口。
密钥安全要点
- 定期更换:我建议每3-6个月换一次。曾经有个客户,密钥用了两年没换,结果被内部员工泄露了……
- 不要硬编码:密钥别直接写在代码里。用环境变量或配置中心管理。
- 区分环境:测试环境和生产环境用不同的密钥。我见过有人把测试密钥直接上线,结果支付回调全乱套。
三、证书下载:双向认证的“通行证”
微信支付的部分接口(比如退款、企业付款)需要双向TLS认证。这时候就需要下载商户证书。说白了,证书就是你的“数字身份证”,微信用它来确认你的身份。
证书类型
| 证书名称 | 用途 | 有效期 |
|---|---|---|
| 商户证书(apiclient_cert.p12) | 退款、查询等敏感操作 | 5年 |
| 平台证书(平台公钥) | 验证微信回调签名 | 不定期更新 |
下载与配置
- 在商户平台【账户中心】→【API安全】→【API证书】中,点击下载。
- 下载后得到一个
apiclient_cert.p12文件,密码是你的商户号。 - 将证书放在服务器安全目录,比如
/etc/wechat/cert/。
⚠️ 重要提醒:证书文件不要放在Web根目录下,否则别人可以直接下载。我曾经在渗透测试时,发现有人把证书放在
/static/cert/ 下……嗯,那画面太美不敢看。
代码示例:加载证书
以Java为例,加载商户证书的代码大概长这样:
// 加载商户证书
File certFile = new File("/etc/wechat/cert/apiclient_cert.p12");
String mchId = "你的商户号";
String certPassword = mchId; // 密码就是商户号
KeyStore keyStore = KeyStore.getInstance("PKCS12");
try (FileInputStream instream = new FileInputStream(certFile)) {
keyStore.load(instream, certPassword.toCharArray());
}
// 初始化SSLContext
SSLContext sslContext = SSLContexts.custom()
.loadKeyMaterial(keyStore, certPassword.toCharArray())
.build();
四、安全配置:别让支付接口裸奔
申请完、设置完、下载完,最后一步是安全配置。这部分容易被忽略,但恰恰是最关键的。
IP白名单
在商户平台【账户中心】→【API安全】中,设置调用支付接口的服务器IP白名单。我建议只加你的业务服务器IP,别加开发机、测试机。曾经有个团队,把公司WiFi的出口IP加进去了,结果员工电脑中毒,支付接口被恶意调用……
回调URL验证
支付结果通知的URL,一定要在商户平台配置好。而且,你的服务器要验证回调请求的签名。具体做法:
- 接收微信的POST请求。
- 从请求头中获取
Wechatpay-Signature。 - 用平台证书公钥验证签名。
💡 我的经验:我习惯在回调处理中加一个“幂等性校验”。因为微信可能会重复通知,如果不做去重,用户可能被扣两次钱。嗯,这个坑我踩过。
敏感信息加密
用户的手机号、银行卡号等敏感信息,在传输过程中要用微信提供的敏感信息加密功能。别自己搞一套加密算法,直接用微信的RSA公钥加密。
五、总结:准备工作清单
好了,这一章的内容就这些。最后给你一个清单,照着做就行:
- ✅ 商户号申请通过,对公账户验证完成
- ✅ API密钥设置,32位随机字符串
- ✅ 商户证书下载,放在安全目录
- ✅ IP白名单配置,只加业务服务器
- ✅ 回调URL配置,并实现签名验证
下一章,咱们开始写代码,真正接入支付接口。到时候你会发现,准备工作做得越扎实,后面写代码就越顺畅。