说明:正常接口使用 AlipaySignature.rsaCheckV1,sign_type不参与签名
特殊说明:AlipaySignature.rsaCheckV2方法生活号异步通知需要使用,会保留sign_type参数参与验签。
代码示例:
php语言:
function checkSign($arr){ $aop = new AopClient(); $aop->alipayrsaPublicKey = $this->alipay_public_key; $result = $aop->rsaCheckV1($arr, $this->alipay_public_key, $this->signtype); return $result; }
java语言:
//获取支付宝POST过来反馈信息 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 : valueStr + values + ","; } //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化 //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk"); params.put(name, valueStr); } //商户订单号 String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8"); //支付宝交易号 String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8"); //交易状态 String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8"); //计算得出通知验证结果 boolean verify_result = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, "RSA2"); if(verify_result){//验证成功 if(trade_status.equals("TRADE_FINISHED")){ } else if (trade_status.equals("TRADE_SUCCESS")){ } out.clear(); out.println("success"); //请不要修改或删除 }else{//验证失败 out.println("fail"); }
建议:如果是php,java,.NET可以参考手机网站官方demo异步通知验签(因为所有支付接口验签方式都是一样的方式)
1.demo下载地址:【点击查看demo】
2.只是用notify_url相关关联文件即可,php也是相同的方式(如下图)
常见问题
验签失败自查:https://openclub.alipay.com/read.php?tid=1598
使用工具验签方法:https://openclub.alipay.com/read.php?tid=2208
大家如果在测试过程中有什么疑问欢迎在帖子下方追问吐