支付宝即时到账接口

支付宝的即时到账接口的实现还算是比较简单,从官网下载好demo后,配置好接口所需的参数,比如partner、seller_email、key等这些信息后,就可以调用支付宝的接口了。但是支付宝没有测试账号,所以测试的时候都是使用真实账号,并且要是真实的商家账号。所幸的是个人也可以申请成为商家,获取partner ID和key,这是申请链接和下载demo的地址:https://b.alipay.com/order/techService.htm。在测试的过程中,发现了一个问题,支付完成后支付宝异步通知notify_url地址验证支付宝反馈的结果时,一直提示sign和mysign的值不匹配,说可能是中文乱码问题造成的。验证的代码如下:

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"), "utf-8");

params.put(name, valueStr);

}

//计算得出通知验证结果

return AlipayNotify.verify(params, partner ID,  key);

反复检查代码,发现这是的字符编码都是utf-8,没有不会出现字符编码不一致的情况。后来把日志中的乱码拿出来在main方法中运行了一遍,发现控制台打印的内容和日志中乱码一致,算是有点眉目了。

public void main(String args[]) {

    System.out.println(new String(中文.getBytes("ISO-8859-1"), "utf-8"));

}

于是就把标红那行代码注释掉,测试一把,验证成功。因为支付宝是通过post请求发送异步通知的,传递的中文参数无需再转码。这跟return_url同步通知不一样,同步通知是通过get请求发送,传递的中文参数经过浏览器处理后是乱码,故需要进行转码。

你可能感兴趣的:(支付宝,即时到账)