微信支付:获取沙箱密钥失败,确认交易密钥是否正确
微信支付沙箱文档: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,可以此做后续沙盒测试
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/25/wechat-payment-failed-to-obtain-sandbox-key-confirm-if-the-transaction-key-is-correct/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论