验签传入的参数map集合、支付宝公钥、编码格式(UTF-8,GBK....)
主要验签失败的原因是map集合中存放的值是不正确的
下面列出map集合中需要放入的参数值
paramsMap.put("sign",实际取到的sign值,下同。。); paramsMap.put("gmt_create",); paramsMap.put("gmt_payment",); paramsMap.put("notify_time",); paramsMap.put("subject",); paramsMap.put("buyer_id",); paramsMap.put("notify_id",); paramsMap.put("notify_type",); paramsMap.put("out_trade_no",); paramsMap.put("total_amount",); paramsMap.put("trade_status",); paramsMap.put("trade_no",); paramsMap.put("app_id",); paramsMap.put("seller_id",);
如果使用的是springmvc框架,可以直接使用以下的代码进行验证
@RequestMapping("/yanqian") @ResponseBody public void tuikaun1(HttpServletRequest request,HttpServletResponse httpResponse) throws ServletException, IOException, AlipayApiException { Map<String,String> params = new HashMap<String,String>(); Map requestParams = request.getParameterMap(); for (Iterator 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] + ","; } //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化 //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk"); params.put(name, valueStr); } System.out.println(params); boolean signVerified = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, "utf-8"); System.out.println("signVerified======"+signVerified); }