小程序
小游戏
企业微信
微信支付
扫描小程序码分享
{"timeStamp":"1565845310","package":"prepay_id=wx15130150227944f319b77f651810542900","appId":"wx065ba35b40965b09","sign":"EE55605F3207ADE98802787B71140AAB","signType":"MD5","nonceStr":"wBlPKR040XlOXfoL6BYpu8JD6Gs9353P"}
4 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
检查所有待签名数据的参数名和参数值都是正确的。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
请问你解决了嘛
签名错误,用官方签名工具验证参数,查看KEY和编码是否正确。
放一下签名相关代码,可以按照文档一行一行的检查
/**
* 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。
*
* @param data 待签名数据
* @param key API密钥
* @param signType 签名方式
* @return 签名
*/
public
static
String generateSignature(
final
Map<String, String> data, String key, SignType signType)
throws
Exception {
Set<String> keySet = data.keySet();
String[] keyArray = keySet.toArray(
new
String[keySet.size()]);
Arrays.sort(keyArray);
StringBuilder sb =
StringBuilder();
for
(String k : keyArray) {
if
(k.equals(WXPayConstants.FIELD_SIGN)) {
continue
;
}
(data.get(k).trim().length() >
0
) {
sb.append(k).append(
"="
).append(data.get(k).trim()).append(
"&"
);
sb.append(
"key="
).append(key);
(SignType.MD5.equals(signType)) {
return
MD5(sb.toString()).toUpperCase();
else
(SignType.HMACSHA256.equals(signType)) {
HMACSHA256(sb.toString(), key);
{
throw
Exception(String.format(
"Invalid sign_type: %s"
, signType));
(StringUtils.equals(return_code,
"SUCCESS"
) && StringUtils.equals(result_code,
)) {
(payPaymentType == PAY_PAYMENT_TYPE.微信公众号) {
Map<String, String> resultMap =
HashMap<>();
resultMap.put(
"appId"
, config.getAppId());
"nonceStr"
, WXPayUtil.generateNonceStr());
"package"
,
"prepay_id="
+ resp.get(
"prepay_id"
));
"signType"
, WXPayConstants.MD5);
"timeStamp"
, WXPayUtil.getCurrentTimestamp()+
""
String sign = WXPayUtil.generateSignature(resultMap, config.getKey(), WXPayConstants.SignType.MD5);
"sign"
, sign);
ServiceResult.SUCCESS(resultMap,
"创建微信订单成功"
ServiceResult.SUCCESS(resp,
* 插入错误日志
payLogService.addPayLog(
PayLogDTO(
"微信订单校验"
, GsonUtil.getInstanceNoNull().toJson(data), GsonUtil.getInstanceNoNull().toJson(ServiceResult.ERROR(err_code_des))),
UserInfoDTO(
"1"
"微信订单校验1"
ServiceResult.ERROR(err_code_des);
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
检查所有待签名数据的参数名和参数值都是正确的。
请问你解决了嘛
签名错误,用官方签名工具验证参数,查看KEY和编码是否正确。
放一下签名相关代码,可以按照文档一行一行的检查
/**
* 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。
*
* @param data 待签名数据
* @param key API密钥
* @param signType 签名方式
* @return 签名
*/
public
static
String generateSignature(
final
Map<String, String> data, String key, SignType signType)
throws
Exception {
Set<String> keySet = data.keySet();
String[] keyArray = keySet.toArray(
new
String[keySet.size()]);
Arrays.sort(keyArray);
StringBuilder sb =
new
StringBuilder();
for
(String k : keyArray) {
if
(k.equals(WXPayConstants.FIELD_SIGN)) {
continue
;
}
if
(data.get(k).trim().length() >
0
) {
sb.append(k).append(
"="
).append(data.get(k).trim()).append(
"&"
);
}
}
sb.append(
"key="
).append(key);
if
(SignType.MD5.equals(signType)) {
return
MD5(sb.toString()).toUpperCase();
}
else
if
(SignType.HMACSHA256.equals(signType)) {
return
HMACSHA256(sb.toString(), key);
}
else
{
throw
new
Exception(String.format(
"Invalid sign_type: %s"
, signType));
}
}
if
(StringUtils.equals(return_code,
"SUCCESS"
) && StringUtils.equals(result_code,
"SUCCESS"
)) {
if
(payPaymentType == PAY_PAYMENT_TYPE.微信公众号) {
Map<String, String> resultMap =
new
HashMap<>();
resultMap.put(
"appId"
, config.getAppId());
resultMap.put(
"nonceStr"
, WXPayUtil.generateNonceStr());
resultMap.put(
"package"
,
"prepay_id="
+ resp.get(
"prepay_id"
));
resultMap.put(
"signType"
, WXPayConstants.MD5);
resultMap.put(
"timeStamp"
, WXPayUtil.getCurrentTimestamp()+
""
);
String sign = WXPayUtil.generateSignature(resultMap, config.getKey(), WXPayConstants.SignType.MD5);
resultMap.put(
"sign"
, sign);
return
ServiceResult.SUCCESS(resultMap,
"创建微信订单成功"
);
}
return
ServiceResult.SUCCESS(resp,
"创建微信订单成功"
);
}
else
{
/**
* 插入错误日志
*/
payLogService.addPayLog(
new
PayLogDTO(
"微信订单校验"
, GsonUtil.getInstanceNoNull().toJson(data), GsonUtil.getInstanceNoNull().toJson(ServiceResult.ERROR(err_code_des))),
new
UserInfoDTO(
"1"
,
"微信订单校验1"
));
return
ServiceResult.ERROR(err_code_des);
}