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

微信支付沙箱文档: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值,该值在微信商户平台可查到

1
2
3
4
5
6
7
8
9
10
11
12
/**
* 签名字符串
*
* @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:

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

正确preStr:

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

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

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :