- String partner = “”; //partner合作伙伴id(必须填写)
- String privateKey = “”; //partner 的对应交易安全校验码(必须填写)
- //如果您服务器不支持https交互,可以使用http的验证查询地址
- //String alipayNotifyURL = “https://www.alipay.com/cooperate/gateway.do?service=notify_verify”
- String alipayNotifyURL = “http://notify.alipay.com/trade/notify_query.do?”
- + “partner=”
- + partner
- + “¬ify_id=”
- + request.getParameter(“notify_id”);
- // String sign = request.getParameter(“sign”);
- //获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
- String responseTxt = CheckURL.check(alipayNotifyURL);
- Map params = new HashMap();
- //获得POST 过来参数设置到新的params中
- 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] + “,”;
- }
- try {
- params.put(name, new String (valueStr.getBytes(“ISO-8859-1”),“UTF-8”));
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
- }
- }
- String mysign = SignatureHelper_return.sign(params, privateKey);
- String orderNO=params.get(“out_trade_no”).toString();
- double post=Double.parseDouble(params.get(“logistics_fee”).toString());
- double price=Double.parseDouble(params.get(“price”).toString());
- //打印,收到消息比对sign的计算结果和传递来的sign是否匹配
- if (mysign.equals(request.getParameter(“sign”)) && responseTxt.equals(“true”)) {
- System.out.println(“sucess”);
- }else{
- System.out.println(“fail”);
- }
String partner = ""; //partner合作伙伴id(必须填写)
String privateKey = ""; //partner 的对应交易安全校验码(必须填写)
//如果您服务器不支持https交互,可以使用http的验证查询地址
//String alipayNotifyURL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify"
String alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?"
+ "partner="
+ partner
+ "¬ify_id="
+ request.getParameter("notify_id");
// String sign = request.getParameter("sign");
//获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
String responseTxt = CheckURL.check(alipayNotifyURL);
Map params = new HashMap();
//获得POST 过来参数设置到新的params中
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] + ",";
}
try {
params.put(name, new String (valueStr.getBytes("ISO-8859-1"),"UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
String mysign = SignatureHelper_return.sign(params, privateKey);
String orderNO=params.get("out_trade_no").toString();
double post=Double.parseDouble(params.get("logistics_fee").toString());
double price=Double.parseDouble(params.get("price").toString());
//打印,收到消息比对sign的计算结果和传递来的sign是否匹配
if (mysign.equals(request.getParameter("sign")) && responseTxt.equals("true")) {
System.out.println("sucess");
}else{
System.out.println("fail");
}
最近公司项目再集成支付宝,按照给的例子,终于调通了,可以支付了,不过支付宝网站再回调的时候,验证mysign和sign总是返回false,再网上苦苦的寻找,最好确定有两个原因,一个是参数不对,第二个就是编码不对!!
但是按照支付宝给的例子,也是不行,最好确定可能是编码的问题,再支付宝支付的时候用户必须填写地址邮编信息,再测试中打印出所有参数,发现填写的中文都出现乱码,说明是编码出现了问题,所以在SignatureHelper_return.sign(params, privateKey)前对参数都进行了转码params.put(name, new String (valueStr.getBytes(“ISO-8859-1″),”UTF-8”))转换后支付宝回调正常!!!