Fork me on GitHub

支付宝接口程序JSP版

支付宝论坛提供的:支付宝接口程序论坛地址 | ASP | ASP.net(GBK) | ASP.net(UTF-8) | JSP(GBK) | JSP(UTF-8)

支付宝提供的接口,似乎有点问题,处理完返回的时候总是出现false,经对比发现是MD5加密后字符串不一样了

1
2
3
4
5
6
7
8
9
10
11
12
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] + ",";
}
params.put(name, valueStr);
}

解决办法是做字符转换,正确代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
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] + ",";
}
valueStr = new String(valueStr.getBytes("iso8859_1"),"gb2312"); //转换字符集
params.put(name, valueStr);
}

附上 service 参数类型,接口文档没有的

  1. create_digital_goods_trade_p 通知返回地址等即可实现实物交易
  2. trade_create_by_buyer 修改物流方式以及费用等即可实现实物交易
  3. create_donate_trade_p 可实捐赠项目
  4. create_direct_pay_by_user 支付宝论坛没说,自己试了,应该即时到帐

另外Payment.java似乎有2个版本,一个用于虚拟物品交易(无收货地址),另一个用于现实物品交易,源码是一样的,只是有2个变量名称不一样,致使MD5加密的时候出错,如果你提交支付的时候出现支付类型错误,可以试着检查一下

相关文章推荐

如果觉得我的文章对您有用,可否请我喝杯速溶咖啡