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

微信支付沙箱文档: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全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
微信支付:获取沙箱密钥失败,确认交易密钥是否正确
微信支付沙箱文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_1&index=2 问题描述 按照官网开发文档请求沙盒支付接口密钥 字段名 字……
<<上一篇
下一篇>>
文章目录
关闭
目 录