1.代码集成到springboot时汉字会乱码,导致验签失败。
解决方案:解析request参数之前,先进行编码设置,代码如下。
request.setCharacterEncoding("GBK");
2.demo中解析xml使用的是net.sf.json,项目使用的是cn.hutool.json
对于XML头部
<?xml version="1.0" encoding="GB2312"?>
的处理上
net.sf.json直接以第一个标签作为跟节点,而cn.hutool.json把XML当作跟节点。
JSONObject bizContentJson = (JSONObject) new XMLSerializer().read(bizContent);
需要修改为
JSONObject xmlContentJson = JSONUtil.xmlToJson(bizContent);
JSONObject bizContentJson = xmlContentJson.getJSONObject("XML");
3.密钥配置
网关
ALIPAY_PUBLIC_KEY 为支付宝开放平台的公钥
PUBLIC_KEY 是生活号自己的公钥,页面上查看不到,生成的时候记得保存一份
APP_ID 是生活号自己的APP_ID
PRIVATE_KEY 是生活号公钥对应的私钥,网页可以查看到。
接口调用
APP_ID 是生活号自己的APP_ID
privateKey 是生活号公钥对应的私钥,网页可以查看到。
publicKey 为支付宝开放平台的公钥
4.用户ID
FromUserId | 是 | 用户OpenId。2016年1月1日起,支付宝用于唯一标识用户的OpenId(32位)由于业务原因计划于2016年9月份废弃,FromAlipayUserId将替代FromUserId作为用户唯一性标示 |
FromAlipayUserId | 是 | 用户userid,用户唯一标识 |
推送模板消息时使用以上两个都能推送到用户手中。
5.消息模板配置
先选择的在下面,后编辑的在上面。
解决方案:根据自己想要的顺序倒序配置即可。
6.模板字段需要特殊处理
如果存在空串或者只有空格的字符串,接口报错:{"code":"40004","msg":"Business Failed","sub_code":"SYSTEM_ERROR","sub_msg":"系统繁忙"}
如果存在双引号,接口报错:{"code":"40004","msg":"Business Failed","sub_code":"ILLEGAL_ARGUMENT_PARAMS","sub_msg":"无效的参数"}
所以模板字段转json时需要进行特殊处理,空串和只有空格的字符串变成点,双引号进行转义。
//1.空串和纯空格之坑
String after = value.replace(" ", "");
if(after.isEmpty()) {
value = ".";
}
//2.双引号大坑
value = value.replace("\"", "\\\"");