收藏
回答

小程序统一下单正常,但是做二次签名时就不对了,这是什么原因啊?

// 开始下单


Map<String, String> resp = wxpay.unifiedOrder(data);

logger.info("-------------------下单结果-------------------------");
for(Map.Entry<String,String> entry : resp.entrySet()){
    logger.info(entry.getKey() + "---->" + entry.getValue());
}


/**
 * 字段名        变量名        必填     类型  示例值                                            描述
 * 小程序ID    appId     是         String   wxd678efh567hg6787                                 微信分配的小程序ID
 * 时间戳        timeStamp   是         String   1490840662                                         时间戳从1970年1月1日00:00:00至今的秒数,即当前的时间
 * 随机串        nonceStr    是         String   5K8264ILTKCH16CQ2502SI8ZNMTM67VS                随机字符串,不长于32位。推荐随机数生成算法
 * 数据包        package        是         String   prepay_id=wx2017033010242291fcfe0db70013231072     统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=wx2017033010242291fcfe0db70013231072
 * 签名方式    signType    是         String   MD5                                             签名类型,默认为MD5,支持HMAC-SHA256和MD5。注意此处需与统一下单的签名类型一致
 *
 */
Map<String, String> packageParams = new HashMap<>();
packageParams.put("appId", config.getAppID().trim());
packageParams.put("timeStamp", (WxUtil.getCurrentTimestamp() + "").trim());
packageParams.put("nonceStr", WXPayUtil.generateNonceStr().trim());
packageParams.put("package", "prepay_id=" + resp.get("prepay_id").trim());
packageParams.put("signType", WXPayConstants.MD5.trim());

logger.info("******************二次签名******************");
String packageSign = WXPayUtil.generateSignature(packageParams,config.getKey().trim());  // 这个地方的结果与线上验证不一致是什么原因呢?
logger.info(packageSign);


logger.info("----------------------------------------------------------------");
packageParams.put("paySign", packageSign);

for(Map.Entry<String,String> entry : packageParams.entrySet()){
    logger.info(entry.getKey() + "---->" + entry.getValue());
}
return packageParams;


回答关注问题邀请回答
收藏

1 个回答

登录 后发表内容
问题标签