zoukankan      html  css  js  c++  java
  • 记一次前端服务端客户端三方联调的总结

    由于负责项目的原因第一次与客户端服务端三方联调,感觉有必要总结一下,虽然内容不复杂 技术也不难,总结总是好的。

    就是要求用户去关注公众号,成功之后给予金币奖励。

    和服务端的交互:进入页面,反复轮循去请求接口,服务端轮循去查询数据库,当得到返回结果是成功的时候销毁该页面。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>
  • 相关阅读:
    通过USB转TTL串口下载stm32程序
    实验一:基于STM32F1的流水灯实验(库函数)
    opencv 常用头文件介绍
    OpenCV 1.0在VC6下安装与配置(附测试程序)
    在Angularjs使用中遇到的那些坑
    js和ts关于遍历的几个小总结
    angularjs的启动方式
    关于跨域和如何解决跨域问题的小结
    TypeScript(入门)
    截取字符串部分汇总
  • 原文地址:https://www.cnblogs.com/xuniannian/p/9897611.html
Copyright © 2011-2022 走看看