微信支付JAVA DEMO 微信支付爬过的坑

JAVA服务端访问统一下单接口:
遇见的问题:
1.xml格式错误
首先明确自己是那种支付方式,我是APP支付方式。
1>要知道传哪些参数
可以看一下《统一下单》的必填参数。其他可以不管,但是必填参数必须要。
header.setParameter("appid", WEIXIN_APPID);
header.setParameter("mch_id", WEIXIN_MCH_ID);
//header.setParameter("device_info", WEIXIN_DEVICE_INFO);
header.setParameter("nonce_str", WEIXIN_NONCE_STR);
header.setParameter("body", WEIXIN_BODY);
header.setParameter("out_trade_no", WEIXIN_OUT_TRADE_NO);
header.setParameter("total_fee", WEIXIN_TOTAL_FEE);
// header.setParameter("spbill_create_ip", request.getRemoteAddr());
// header.setParameter("spbill_create_ip", userIp);
header.setParameter("spbill_create_ip", "外网IP");
header.setParameter("notify_url", WEIXIN_NOTIFY_URL);
header.setParameter("trade_type", WEIXIN_TRADE_TYPE);
//header.setParameter("openid", WEIXIN_OPENID);
 
String signStr = createSign("UTF-8", header.getAllParameters());
System.out.println("统一下单signStr:" + signStr);
//header.setParameter("sign", signStr);
 
String xmlBody = buildXML(header.getAllParameters(), signStr);
System.out.println("统一下单xmlBody:" + xmlBody);
 
2>建立签名字符串
可以看一下《createSign 微信支付生成签名的算法方法》
3>生成签证
可以看一下《微信支付sign签名算法 规则》
4>创建请求报文
可以看一下《微信统一下单 创建请求报文的方法》特别注意一下。sign必须是报文的最后一项值。不然会报xml格式错误。还有就是请求的编码必须是UTF-8。不然会有乱码。
2.sign签证错误
1>签证校验不通过
一个就是传的参数必须要必填。
第二个就是sign必须要在xml的最后面
不然sign校验不通过
3.返回给APP端,支付失败,支付取消等情况
1>支付失败的原因
clientHandler.setParameter("appid", WEIXIN_APPID);
clientHandler.setParameter("noncestr", noncestr);
clientHandler.setParameter("package", "Sign=WXPay");
clientHandler.setParameter("partnerid", WEIXIN_MCH_ID);
clientHandler.setParameter("prepayid", prepayid);
clientHandler.setParameter("timestamp", timestamp);
sign生成必须要这些参数。
不然支付会失败。不能起调微信支付界面。
posted @ 2017-09-19 10:08  移动的130  阅读(2231)  评论(0编辑  收藏  举报