都知道支付宝支付在不同环境下分好多种,本文介绍的是<手机网页即时到账接口-手机网页即时到账接口>如何接入。至于如何开通支付宝,审核等步骤,请查阅其他文档。本文使用的是其中JAVA版接入。
由于微信“封杀”了支付宝支付,支付宝给出了<关于微信公众平台无法使用支付宝收付款的解决方案说明>解决方案,本文介绍如何接入。
文档中,主要有用的是2个文件pay.html、ap.js.另外两个demo_get.htm,demo_post.htm是测试用例。
接入参考demo_get.htm,主要遇到的问题:
1.代码pay.htm有小错误
2.引入路径问题
3.如何引入ap.js和参数加引号
4.URLEncoder
解决:
1.代码pay.htm有错:
第四行修改为<meta charset="utf-8"/>
2.引入路径问题:
如果是使用的JAVA版接入微信,且使用JSP方式生成自动submit的表单内容。那么请在JSP存放的路径拷贝进去pay.html、ap.js两个文件。
3.如何引入ap.js和参数加引号:
如何引入ap.js
/**
* 建立请求,以表单HTML形式构造(默认)
* @paramALIPAY_GATEWAY_NEW 支付宝网关地址
* @param sParaTemp 请求参数数组
* @param strMethod 提交方式。两个值可选:post、get
* @param strButtonName 确认按钮显示文字
* @return 提交表单HTML文本
*/
public static String buildRequest(String ALIPAY_GATEWAY_NEW, Map<String, String> sParaTemp, String strMethod, String strButtonName) {
//待请求参数数组
Map<String, String> sPara = buildRequestPara(sParaTemp);
List<String> keys = new ArrayList<String>(sPara.keySet());
StringBuffer sbHtml = new StringBuffer();
//添加微信 兼容性
sbHtml.append("<script type='text/javascript' src='ap.js'></script>");
sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + ALIPAY_GATEWAY_NEW
+ "_input_charset=" + AlipayConfig.input_charset + "\" method=\"" + strMethod
+ "\">");
for (int i = 0; i < keys.size(); i++) {
String name = (String) keys.get(i);
String value = (String) sPara.get(name);
sbHtml.append("<input type=\"hidden\" name=\"" + name + "\" value=\"" + value + "\"/>");
}
//submit按钮控件请不要含有name属性
sbHtml.append("<input type=\"submit\" value=\"" + strButtonName + "\" style=\"display:none;\" οnclick=\"sendTo()\"></form>");
String prestr = createLinkStr(sPara);
String str = ALIPAY_GATEWAY_NEW + prestr;
sbHtml.append("<script>function sendTo(){"
+ "_AP.pay(\""+ str +"\");"
+ "};sendTo();</script>");
/* sbHtml.append("<input type=\"submit\" value=\"" + strButtonName + "\" style=\"display:none;\"></form>");
sbHtml.append("<script>document.forms['alipaysubmit'].submit();</script>");*/
return sbHtml.toString();
}
public static String createLinkStr(Map<String, String> params) {
List<String> keys = new ArrayList<String>(params.keySet());
Collections.sort(keys);
String prestr = "";
for (int i = 0; i < keys.size(); i++) {
String key = keys.get(i);
String value = params.get(key);
try {
value = URLEncoder.encode(value, AlipayConfig.input_charset);
} catch (UnsupportedEncodingException e) {
}
if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符
prestr = prestr + key + "=" + value;
} else {
prestr = prestr + key + "=" + value + "&";
}
}
return prestr;
}
代码片段 + "_AP.pay(\""+ str +"\");" 中 str 变量两侧要有 \" ,不光是str变量要是字符串,还要用引号包起来。
4.URLEncoder
createLinkStr方法是拼装字符串的作用,拼装的同时,要为每个value都进行URLEncoder.encode