在最近的开发需求中,有一个需求,就是需要把微信退款通知记录在数据库中,原本以为是一个简单的需求,但是微信文档的坑,是你不能理解的。
在微信退款通知返回的字段中有一个加密信息字段req_info。这个加密字段需要三个解密步骤才能最终获取到信息。由此可见,这个字段是多么的重要。以下是微信官方文档给出的解密步骤:
解密步骤如下:
(1)对加密串A做base64解码,得到加密串B
(2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 )
(3)用key*对加密串B做AES-256-ECB解密(PKCS7Padding)
第一步,第二步都好理解,但是第三步说的真是太简单了。被坑了一天,现在把代码留下。
1.通过微信退款通知先获取到req_info这个字段
public static Map xmlToMap(HttpServletRequest request) throws Exception {
Map map = new HashMap();
SAXReader reader = new SAXReader();
InputStream ins = request.getInputStream();
Document doc = reader.read(ins);
Element root = doc.getRootElement();
List list = root.elements();
for (Element e : list) {