在做沙箱测试的时候,微信支付里面的金额固定的,其他金额是无效的。需要按照文档来输入。
这里需要用到沙箱秘钥来替换签名中的key,同样验签的时候也是同样用沙箱秘钥获取签名,沙箱秘钥的获取方法
public static String GetSignKey() throws Exception { String nonce_str = WXPayUtil.generateNonceStr();//生成随机字符 Map<String, String> param = new HashMap<String, String>(); param.put("mch_id", "自己的商户号");//需要真实商户号 param.put("nonce_str", nonce_str);//随机字符 String sign = WXPayUtil.generateSignature(param,API_KEY,WXPayConstants.SignType.MD5);//通过SDK生成签名其中API_KEY为商户对应的真实密钥 param.put("sign", sign); String xml = WXPayUtil.mapToXml(param);//将map转换为xml格式 String url = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey";//沙箱密钥获取api String SignKey = HttpUtil.postData(url, xml);// System.out.println("signkey+"+SignKey); Map<String, String> param1 = new HashMap<String, String>(); param1 = WXPayUtil.xmlToMap(SignKey); String key = param1.get("sandbox_signkey"); return key; }
这里的WXPayUtil是微信支付sdk中的工具类,在支付之前签名和之后验签都要用到它