1. 程式人生 > >記一次前端服務端客戶端三方聯調的總結

記一次前端服務端客戶端三方聯調的總結

由於負責專案的原因第一次與客戶端服務端三方聯調,感覺有必要總結一下,雖然內容不復雜 技術也不難,總結總是好的。

就是要求使用者去關注公眾號,成功之後給予金幣獎勵。

和服務端的互動:進入頁面,反覆輪循去請求介面,服務端輪循去查詢資料庫,當得到返回結果是成功的時候銷燬該頁面。30s後停止請求。

和客戶端的互動:

JS模組名定義為:wechat。
提供介面供js呼叫:
launchWeChat()  調起微信
pasteAccountName(String accountName)複製公眾號文字
getWeChatCode() 用於獲取微信登入的code值,返回值是string
onWeChatGuideGoToTaskPage()彈窗點選確認返回任務列表
getWeChatFocusRequestEncryptString() 獲取請求引數的加密資料,返回值是string
decryptWeChatFocusString(String dataString)  獲取解密資料,返回值是string

這裡涉及到的一個點是:為了保證安全,前端這邊傳遞給服務端的資料要是加密的,服務端返回的資料也是加密的,所以這時候H5就做了一箇中轉。

將資料傳遞給客戶端,客戶端加密後,H5傳遞給服務端

服務端返回的資料先傳遞給客戶端,客戶端解密後傳遞給H5

這裡要注意一點,當服務端返回的資料是string型別而不是json時,dataType:json,ajax會去走error方法,返回值是:readysSatus:400,responseText:"aaaa",status“200”,statusText:"ok"

這時要把json改為text,dataType:json

這裡記錄下原始碼僅供學習

<body>   <div class="focus">     <ul class="clear">       <li>         <h3><span>1</span><em>在微信中點選放大鏡</em></h3>           <img src="./images/step1.png" alt="">         </li>       <li>         <h3><span>2</span><em>點選搜尋框,長按貼上“太易文化”,點選搜尋</em></h3>           <img src="./images/step2.png" alt="">       </li>       <li>         <h3><span>3</span><em>找到“pillar工作室”公眾號,點選關注</em></h3>           <img src="./images/step3.png" alt="">       </li>     </ul>     <a href="" id="toFocus">立即關注</a>   </div>   <div id="jinbiLayer">     <div class="jinbi-box">         <h3 class="jb-tit"><img src="./images/jb-tit.png"></h3>         <span class="jb-close" id="jb-close" ><img src="./images/close.png"></span>         <div class="jb-txt"><span id="gold-num"></span>金幣</div>         <p>恭喜,已完成關注任務</p>         <a class="toDisk" href="com.calendar2345://task/android">繼續其他任務</a>      </div>      <div class="ad-pic"><a href="" id="ad-link"><img src="" id="ad-pic"></a></div>    </div>   <script src="http://www.77tianqi.com/js/jquery.min.js"></script>   <script>     $(function(){       //輪循30s每2s一次5次每4s一次5次       var weChatMethods={         toWeChatResult: function (){           var _this = this;           var $time = 0;           var timerOne = setInterval(function(){             if($time<5){               $time++;               _this.toWechatAjax();               if($time>=5){                 clearInterval(timerOne);                 var timerTwo = setInterval(function(){                   $time++;                   if($time>=10){                     clearInterval(timerTwo);                    }                 _this.toWechatAjax();               },4000)             }           }         },2000)       },       //請求服務端獲取是否關注成功       toWechatAjax:function (){         var postData = window.wechat.getWeChatFocusRequestEncryptString();         //alert(postData);         $.ajax({           type: "post",           url: "http://dan.oyinji.com/frame/api/task/queryFocusTask",           dataType: 'text',           data:{"data":postData},           success: function (msg) {             var msg = window.wechat.decryptWeChatFocusString(msg);             var msg = JSON.parse(msg);             var data = msg.data;             if(msg.code==200 && data.taskFinish=="true"){                console.log("關注成功");                var jinbiNum = data.taskGold;                $("#jinbiLayer").show();                $("#gold-num").html(jinbiNum);                $("#ad-link").attr("href",data.adverImage);                $("#ad-pic").attr("src",data.adverUrl);             }else{               alert("關注失敗");             }         },         error: function (msg) {alert(JSON.stringify(msg))}       })     },     //點選事件     events:function(){       //點選立即去關注       $("#toFocus").click(function(){             //調起微信         window.wechat.launchWeChat();         //複製文案給客戶端         window.wechat.pasteAccountName('太易文化');     })      //點選金幣彈窗按鈕     $("#closeBtn").click(function(){         //彈窗點選確認返回任務列表         window.wechat.onWeChatGuideGoToTaskPage();       })     $("#jb-close").click(function(){         $('#jinbiLayer').hide();       })     },     //判斷是否有後臺切入前臺     onWebViewStateSwitched: function (isForeground){         if(isForeground==true){           toWeChatResult();         }     }   }   weChatMethods.events(); })   </script> </body>