支付宝这个验签真是坑多多啊
官方demo里给的验签代码如下
Map<String, String> params = new HashMap<String, String>();
Map<String, String[]> requestParams = request.getParameterMap();
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用
// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); //调用SDK验证签名
// valueStr = new String(valueStr.getBytes(“ISO-8859-1”), “utf-8”);
罪魁祸首主要是上面这句,解决乱码的,在异步通知时候,这个好像没有用…
加上的话就会导致产生验签失败问题!
如果你也是这样的问题,就好办了,直接注释掉这一句就行了.
看来demo只能提供一下借鉴功能,项目的具体实现还要根据实际情况来做
特别感谢一下这个同学