程序ajax請求公共組件app-jquery-http.js中url參數部分的項目應用

結合微信登陸以及微信支付的案例:= =||| (案例比較奇葩複雜)jquery

簡述項目流程:ajax

1.獲取用於公衆號支付的openid(公衆平臺):在微信內置瀏覽器中打開網頁連接,剛進入頁面就經過微信公衆平臺獲取該微信用戶的code,拿到code傳給後臺,換取用戶的openid。api

2.微信登陸(開放平臺):微信登陸經過微信開放平臺,因爲第一步公衆平臺拿到的code會混淆開放平臺的code,致使用戶使用微信登陸失敗,就須要使用該插件將url參數重置。瀏覽器

3.微信支付(公衆平臺):像後臺傳輸步驟一獲取的openid,以及其餘參數,完成微信公衆號支付。緩存

代碼以下:微信

1.獲取用於公衆號支付的openid:cookie

 1 $(function() {  2 
 3     function isWeiXin() {  //判斷是否爲微信環境   4         var ua = window.navigator.userAgent.toLowerCase();  5         if(ua.match(/MicroMessenger/i) == 'micromessenger') {  6             return true;  7         } else {  8             return false;  9  } 10  } 11     if(isWeiXin()) { //只在微信環境中獲取openid,普通的瀏覽器也獲取不到啊! 12         var openid = $.cookie("geekbar_weixinid"); // Jquery-cookie插件用於存儲獲取到的openid,一開始這裏確定是null。 13         if(openid != null && openid != '') { 14             return; 15  } 16         var code = $.HTTP.getUrlParam("code"); //獲取當前頁面連接中的參數code!一開始這裏確定是null。 17         if(code == undefined || code == null) { 18             var sendUrl = location.href; //redirect_uri(受權後重定向的回調連接地址):當前頁面。 19             sendUrl = $.HTTP.setUrlParam(sendUrl,"xz","public"); //給當前頁面的url添加一個參數xz=public,提示是公衆平臺,避免與開放平臺搞混淆。
//拼接後的地址(例):www.baidu.com?xz=public,對連接自己沒有任何影響。
20 sendUrl = encodeURIComponent(sendUrl); //處理該地址爲格式要求的樣式,點擊查看微信公衆平臺文檔要求。 21 22 //var sendUrl = encodeURIComponent(location.href); 23 var requrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=' + 24 sendUrl + '&response_type=code&scope=snsapi_base&state=wx#wechat_redirect'; 25 26 location.href = requrl; //刷新後頁面連接後便拼接了公衆平臺獲取的code,同時進入else 27 return; 28 29 } else { 30 31 $.ajax({ 32 url: '../common/user/wx/getopenid?code=' + code, //將公衆平臺code傳給後臺,獲取用於公衆號支付的openid 33 success: function(data) { 34 $.cookie("geekbar_weixinopenid", data.data, { //成功後將openid(代碼中的data.data)存入緩存中去。使用jquery-cookie插件。 35 expires: 1 36 }); 37 }, 38 error: function(XMLHttpRequest, textStatus, errorThrown) { 39 var info = "XMLHttpRequest:" + JSON.stringify(XMLHttpRequest) + 40 " ;textStatus:" + textStatus + "; errorThrown:" + 41 JSON.stringify(errorThrown) + "; 【" + opt.url + "】"; 42 alert(info); 43 if(opt.error != undefined) 44 opt.error(XMLHttpRequest, textStatus, errorThrown); 45 else { 46 console.error("請求錯誤", "系統發生請求錯誤,請聯繫管理員解決。"); 47 } 48 } 49 }); 50 51 } 52 53 } else { 54 console.log("當前環境不是微信環境") 55 } 56 57 });

2.微信登陸(開放平臺)app

 1     $("#wchartLogin").on("click", function() {  4         var sendUrl = location.href; //受到步驟一的影響,頁面連接後拼接的是公衆平臺獲取的code,xz參數。即xxxx.jsp?code=publiccode&xz=public&state=wx  5         sendUrl = $.HTTP.setUrlParam(sendUrl, "xz", "open"); //重置xz參數:xxxx.jsp?code=publiccode&xz=open&sate=wx  6         sendUrl = $.HTTP.deleteUrlParam(sendUrl, "code"); //刪除公衆平臺code參數:xxxx.jsp?xz=open&state=wx (最爲重要,是混淆開放平臺code的元兇!)  7         sendUrl = $.HTTP.deleteUrlParam(sendUrl, "state"); //刪除state參數:xxxx.jsp?xz=open  8         sendUrl = $.HTTP.setUrlParam(sendUrl, "ls", "wx"); //增添ls參數:xxxx.jsp?xz=open&ls=wx (後臺設置的,沒有此參數不行)  9         sendUrl = encodeURIComponent(sendUrl); //處理成redirect_uri的標準格式。 10         requrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=' + sendUrl + '&response_type=code&scope=snsapi_login&state=wx#wechat_redirect'; 11         location.href = requrl; //就能夠成功登陸了! 12         return; 13     });

 

3.微信支付(公衆平臺):微信公衆平臺

1 <input type="radio" value="WeiXinPub" name="payType" checked="checked">  
 1 <script>
 2 $(function(){  3     $("#payFBtn").on("click",function(){  4         var payType=$("#payChooseList input[name=payType]:checked").val();  5         if(payType==undefined||payType==null||payType==''){  6             alert("請選擇支付類型!");  7             return;  8  }  9         pay('{{orderNo}}',payType); 10  }) 11 
12 }) 13 </script>
 1 function pay(orderNo, payChannel) {  2  $.HTTP.obj({  3         url: "../rest/order/pay",  4  ajaxData: {  5  orderNo: orderNo,  6  payChannel: payChannel,  7             wxOpenId: $.cookie("geekbar_weixinid"), //將獲取到的公衆平臺的openid傳給後臺。只有有用戶openid才能支付。  8  success_url: encodeURI(location.href)  9  }, 10         success: function(data) { 11 
12             if(data) { 13                 switch(payChannel) { 14 
15                     case "AlipayWap": 16 
17                         var pos = JSON.stringify(data); 18                         pingpp.createPayment(pos, function(result, err) { 19  alert(result); 20  alert(err.msg); 21  alert(err.extra); 22                             if(result == "success") { 23                                 
24                             } else if(result == "cancel") { 25 
26  } 27  }); 28                         break; 29 
30                     case "WeiXinPub": 31                         var pos = JSON.stringify(data); 32 
33                         pingpp.createPayment(pos, function(result, err) { 34                             /*alert(result); 35  alert(err.msg); 36  alert(err.extra);*/
37                             if(result == "success") { 38                                 //alert(result);
39                             } else if(result == "fail") { 40  alert(err.msg); 41                                 // charge 不正確或者微信公衆帳號支付失敗時會在此處返回
42                             } else if(result == "cancel") { 43                                 // 微信公衆帳號支付取消支付
44                                 result = '您已取消支付'; 45  alert(result); 46  } 47  }); 48                         break; 49 
50  } 51 
52             } else { 53                 alert("支付異常"); 54  } 55 
56  } 57  }) 58 }
相關文章
相關標籤/搜索