PHP怎么写微信支付商户密钥_PHP微信支付密钥配置详解【详解】-php教程

微信支付的“商户密钥”是商户在微信商户平台手动设置的32位纯字母数字字符串,PHP仅用于签名和AES-256-GCM解密,不可生成、不可混淆APIv2密钥、不可泄露或硬编码。

微信支付的“商户密钥”不是 PHP 代码里写出来的,而是你在微信商户平台手动配置、生成并下载的固定字符串——PHP 只负责在调用 API 时正确使用它(比如参与签名、解密回调)。写错、混淆类型、硬编码泄露、或用错加密方式,是绝大多数失败的根源。

商户密钥在哪配?别在 PHP 里“生成”

微信支付没有提供任何 PHP 函数(如 openssl_pkey_new 或 random_bytes)来“生成”商户密钥。它必须通过以下路径获取:

  • 登录 微信商户平台 →「账户中心」→「API安全」→「APIv3密钥」
  • 点击「设置APIv3密钥」,输入一个 32 字符长度的纯数字/字母组合(不能含符号、不能有空格),提交后即生效
  • 这个密钥仅用于 APIv3 接口的 sign 签名和 aes-256-gcm 解密通知,与旧版 APIv2 的 key(32位MD5密钥)完全无关

PHP 怎么用 APIv3 密钥做签名?关键在拼接和哈希

APIv3 要求对请求体做 SHA256 with RSA 签名,但密钥本身不直接参与 RSA 运算——它只用于构造签名原文中的 resource.sign 字段(即解密后的回调响应体签名)。真正要用密钥的地方是:

  • 构造 Authorization 请求头时,需用商户私钥(apiclient_key.pem)对摘要签名,而该摘要中包含时间戳、随机串、请求路径、以及请求体的 SHA256 值
  • 解密支付结果通知时,必须用你配置的 APIv3 密钥(32 字符字符串)作为 AES-GCM 的 key,配合 nonce 和 associated_data 才能正确解密 resource.encrypted_message
  • 示例解密片段(省略异常处理):
use openssl_decrypt;
$associated_data = $notify['resource']['associated_data'];
$nonce = $notify['resource']['nonce'];
$ciphertext = base64_decode($notify['resource']['ciphertext']);
$key = 'your_32_char_api_v3_key_here'; // 必须严格32字节,UTF-8编码下中文会超长
$plaintext = openssl_decrypt($ciphertext, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $nonce, $associated_data);

常见密钥相关错误和避坑点

90% 的“验签失败”“解密为空”问题都源于密钥误用:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » PHP怎么写微信支付商户密钥_PHP微信支付密钥配置详解【详解】-php教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4004179+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4004179+
  • 本周更新: 0+
  • 最后更新: 2026-03-16