Notice: 函数 WP_Scripts::localize 的调用方法不正确$l10n 参数必须是一个数组。若要将任意数据传递给脚本,请改用 wp_add_inline_script() 函数。 请查阅调试 WordPress来获取更多信息。 (这个消息是在 5.7.0 版本添加的。) in /data/www/appblog/wp-includes/functions.php on line 6131

微信支付:获取沙箱密钥失败,确认交易密钥是否正确

微信支付沙箱文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_1&index=2

问题描述

按照官网开发文档请求沙盒支付接口密钥

字段名 字段 必填 示例值 类型 说明
商户号 mch_id 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位
随机字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位
签名 sign 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 签名值

发生错误: 获取沙箱密钥失败,确认交易密钥是否正确

原因分析

签名出错,参考安全规范

POST的数据里面没有商户相关的API_KEY,但是凡是调用接口的签名,在StringA按ASCII码拼接完请求参数之后,都需要在结尾加上key值,该值在微信商户平台可查到

/**
 * 签名字符串
 *
 * @param text    需要签名的字符串
 * @param key     密钥
 * @param charset 编码格式
 * @return        签名结果
 */
public static String sign(String text, String key, String charset) {
    text = text + "&key=" + key;
    return DigestUtils.md5Hex(getContentBytes(text, charset));
}

错误preStr:

preStr = "appid=wxd930ea5d5a258f8f&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA"; 

正确preStr:

preStr = "appid=wxd930ea5d5a258f8f&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA&key=xxxxxxxxxxxxxx"; 

然后再将preStr做MD5或sha256加密运算,并转为大写。得到正确返回sandbox_signkey,可以此做后续沙盒测试

上一篇 文档类框架或站点
下一篇 微信支付沙箱测试采坑记录