都知道支付寶支付在不同環境下分好多種,本文介紹的是<手機網頁即時到賬接口-手機網頁即時到賬接口>如何接入。至於如何開通支付寶,審覈等步驟,請查閱其他文檔。本文使用的是其中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;\" onclick=\"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