微信支付API对接备注

wechat-pay

本文仅对微信支付H5对接中(V2版本)可能产生的问题做一个备注。
微信支付对接H5文档V2地址:https://pay.weixin.qq.com/wiki/doc/api/index.html

1.接口返回值乱码

接口请求返回值中文乱码,类似:

1
2
3
4
5
6
7
8
<xml>
<return_code>
<![CDATA[FAIL]]>
</return_code>
<return_msg>
<![CDATA[appid和mch_id不匹配]]>
</return_msg>
</xml>

这个是因为返回数据编码为ISO-8859-1,转为UTF-8编码即可:

1
2
3
String responseBody = responseEntity.getBody();
// 转换字符串编码
responseBody = new String(responseBody.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);

2.返回“appid和mch_id不匹配”

虽然在微信支付商户平台上(pay.weixin.qq.com)生成了商户号和应用ID,但商户号和应用ID绑定需要在公众平台(mp.weixin.qq.com)或者开放平台(open.weixin.qq.com)上设置,文档地址:https://kf.qq.com/faq/1801116VJfua1801113QVNVz.html

3.签名错误

如果确认签名计算没有问题,那么就可能是商品描述(body)为中文导致,可以调整为英文尝试。

4.商品描述支持中文

商品描述如果需要中文支持,可以在发送请求时,调整流编码:

1
2
3
4
5
// 以 RestTemplate 为例

// 修改编码
HttpEntity<byte[]> formEntity = new HttpEntity<>(postData.getBytes(StandardCharsets.UTF_8), headers);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(requestUrl, formEntity, String.class);

5.支付成功后返回页面

统一下单接口请求成功后,可以拿到订单支付地址,在订单地址后加上参数&redirect_url=${returnUrl}即可。