跳到内容
商家帮助中心
Esc
切换打开⌘J预览
本页内容

微信支付的密钥与证书分别是什么

自带微信支付商户号的品牌,需要准备 API 密钥和商户 API 证书两样材料。本页讲清各自的用途、一笔付款背后它们如何配合、以及商户平台上另外两样为什么不用管。

这篇指南面向使用自己微信支付商户号的品牌管理员。

在微信支付商户平台的「账户中心 → API安全」里,你会看到好几样名字很像的东西。其中 Darkroom 实际需要的只有两样,本页把这两样讲清楚,并说明其余的为什么不用管。

这两样在商户平台上长这样——本页说的就是下图这一组:

微信支付商户平台 · 账户中心 → API安全
pay.weixin.qq.com/index.php/core/cert/api_cert
API安全
验证商户身份
商户调用API时签名使用
商户API证书已申请2030年05月18日过期
商户API证书用于证实商户身份,需妥善保管防止泄露:APIv2中,调用微信支付安全级别较高的接口;APIv3中,调用微信支付所有接口需使用
管理证书查看指引
商户APIv2密钥已设置
调用APIv2时,需用APIv2密钥签名,从而界定你的身份,需妥善保管防止泄露(APIv2密钥与APIv3密钥互不影响)
修改查看指引
Darkroom 要的就是这一组两样。左边下载得到 apiclient_cert.pemapiclient_key.pem 两个文件;右边这把「商户APIv2密钥」就是本站说的 API 密钥,已经设过的话按钮显示「修改」。
往下还有两组,都是 APIv3 接口用的,Darkroom 用不到,不需要设置。 留着「未启用 / 未设置」不影响收款。
验证微信支付身份
商户接收APIv3的请求应答、回调时验签使用
微信支付公钥未启用
微信支付回调、应答商户时会使用微信支付私钥签名,商户需要使用微信支付公钥验签,用于验证微信支付的身份
申请公钥查看指引
解密回调
商户解密APIv3的回调通知使用
APIv3密钥未设置
调用APIv3的下载平台证书接口、处理回调通知中报文时,要通过该密钥来解密信息(APIv3密钥与APIv2密钥互不影响)
设置查看指引

两样东西,各管一件事

名称 长什么样 用途
API 密钥 32 位字符串,你自己设定 每一笔收款请求算出一个校验码,向微信证明“这笔请求确实来自本商户”;微信回传付款结果时,也用它核对结果的真伪
商户 API 证书apiclient_cert.pem + apiclient_key.pem 两个文件,申请时打包下载 退款专用。发起退款是高风险操作,微信要求额外出示这套证书才受理

一句话概括:密钥管日常收款,证书管退款。

举个例子:一笔付款背后发生了什么

顾客在你的预约页上付了 500 元订金。

第 1 步 · 发起收款

Darkroom 替你向微信发出“请为这笔订单收 500 元”的请求。发出前,系统把请求里的每一项(订单号、金额、商户号……)连同你的 API 密钥一起,算出一串校验码附在请求上。

微信收到后,用它那边存的同一把密钥重算一遍:算出来一致,就确认这笔请求确实来自你的商户号;不一致就整笔拒绝。这是“证明是我”的环节——密钥本身从不在网络上传输,传的只是算出来的校验码。

第 2 步 · 顾客付款

微信里弹出付款框,顾客确认支付。这个付款框能弹出来,同样依赖第 1 步算出的凭据。

第 3 步 · 微信回传付款结果

微信主动向 Darkroom 发一条“这笔订单已付款成功”的通知。收到后系统做的第一件事,是用同一把 API 密钥把通知里的内容重算一遍校验码,和通知自带的那个对比。

这一步很关键:如果不核对,任何人都可以伪造一条“付款成功”发过来,订单就会在你没收到钱的情况下被标成已付。 对不上的通知会被直接丢弃。

第 4 步 · 入账

订金记入订单,顾客收到确认通知。

第 5 步 · 如果之后要退款

退款走的是另一个入口,微信对它的要求更严:除了照样要算校验码,还要求同时出示你的商户 API 证书——相当于在门口除了报暗号,还要出示证件。这就是那两个 .pem 文件唯一的用武之地。

安全保管

把这两样东西都当作账户密码看待:

  • API 密钥设完立刻存进密码管理器。它是收款链路的核心,泄露等同于别人能冒用你的商户号发起请求。
  • apiclient_key.pem私钥,申请证书时通常只能下载一次,请立刻在安全的地方备份一份。
  • 不要发到群聊、工单截图或普通文档里。
  • 不要放进公开网页、浏览器端脚本或公开代码仓库。
  • 交接给 Darkroom 一律通过新版后台的「微信与数据接口 → 微信支付」页提交(提交后系统会在线验证有效性),不要用聊天工具直接发送文件。
  • 商户 API 证书有有效期(通常五年),到期前微信会在商户平台提醒,届时需要重新申请并把新文件交给我们。

常见问题

这些东西一定要交给 Darkroom 吗? 在“品牌自带微信支付商户号”这种接入方式里,Darkroom 需要用它们代你发起收款与退款,因此需要保管。这也是这种方式的固有代价——好处是你的收款账户完全由你自己掌握,与 Darkroom 之间只有接口调用关系:你随时可以在商户平台重置密钥与证书来终止这层授权。

公众号那边也要交密钥吗? 公众号是另一回事。微信公众号托管(公测中)下,公众号改为扫码授权、不再交付 AppSecret。但那只覆盖公众号,本页说的微信支付材料不在其中。

我可以自己改这些密钥吗? 可以,但改完请第一时间在新版后台的「微信与数据接口 → 微信支付」页重新提交并通过在线验证。改了不同步会导致收款和退款中断,且报错信息通常只显示“签名错误”,不容易一眼看出原因。

证书文件我找不到了怎么办? 在微信支付商户平台重新申请一次即可。重新申请后旧证书失效,请把新文件整套交给我们。在这之前收款不受影响,但退款会失败

API 密钥忘了当初设的是什么,能查回来吗? 不能。微信不提供查看,只能重新设置一把新的——重新设置的瞬间旧密钥即失效,所以请紧接着在新版后台更新,中间这段时间收款会中断。建议选在没有顾客付款的时段操作。

相关内容