在微信中如何接入支付寶的提示打開瀏覽器樣式:方法一官網方法

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章