Posts 微信支付宝支付注意事项
Post
Cancel

微信支付宝支付注意事项

微信支付

Q 商品名称为中文时返回签名失败 A 在签名是需要将字符串转成ISO8859-1格式

1
2
//DigestUtils 是第三方commons-codec库
String sign = DigestUtils.md5Hex(signstr.toString().getBytes("ISO8859-1")).toUpperCase();

Q 创建完订单进行扫码支付时,中文商品名称显示乱码 A 微信中用的编码是ISO8859-1 所以需要将字符串转为ISO8859-1格式

1
String body = new String (goodname.getBytes("UTF-8"),"ISO-8859-1")

Q 如何获取微信成功支付的回调内容 A 回调的内容是xml字符串,我们需要手动解析

1
2
3
4
5
6
7
8
// HttpServletRequest request #spring boot
BufferedReader reader = request.getReader();
StringBuffer inputString = new StringBuffer();
String line ;
while (( line = reader.readLine()) != null) {
	inputString.append(line);
}
String xmlstr = inputString.toString();

支付宝支付

Q 如何正确的签名 A 支付宝签名要比微信的容易的多,而且出错概率较低,签名方式分为RSARSA2,两种方式分别都需要商户自己生成 公钥和私钥,长度必须是2048 私钥保存在本地,公钥需要上传到 商户中心 – 开发者中心,上传时需要去掉头尾部字符串,并且去掉换行,上传时请分清楚打算用哪个加密,别RSA加密,却上传到RSA2上面.

Q 进行扫码支付时,商品中文是乱码 A 注意提交的参数charset是什么格式,如格式正确,在请求订单是header 部分需要声明字符编码

1
2
3
HttpPost post = new HttpPost(url);
httpPost.setHeader("Content-Type","application/x-www-form-urlencoded");
httpPost.setEntity( new UrlEncodedFormEntity(dataList,"GBK"));

Q 支付成功回调 A 支付宝默认开通 TRADE_SUCCESSWAIT_BUYER_PAY 支付通知,TRADE_CLOSEDTRADE_FINISHED 需要申请开通,回调的内容数据也很好的获取.

1
2
// HttpServletRequest request
request.getParameter()

Q 商品名称英文时签名成功,中文时签名失败 A 该问题应该是提交数据时格式编码有误,小伙伴试试这样。在签名时,把签名的字符串转成GBK编码,form 提交时 也用GBK提交 支付宝 判断字符编码格式主要依据于头部Content-Type属性 如"Content-Type :application/x-www-form-urlencoded;charset=utf-8那么字符编码就是utf-8跟公共参数里的charset没有什么关系,这里推荐使用Okhttp包。 微信则需要把中文字符串转成ISO-8859-1编码,然后再进行签名。

This post is licensed under CC BY 4.0 by the author.