微信应用开发之微信小程序开发(一) 微信登录流程
凌雪 2018-09-19 来源 :网络 阅读 513 评论 0

摘要:本文将带你了解微信应用开发之微信小程序开发(一) 微信登录流程,希望本文对大家学微信有所帮助。

本文将带你了解微信应用开发之微信小程序开发(一) 微信登录流程,希望本文对大家学微信有所帮助。


    
   
    最近在研究微信小程序开发,非常有意思的一个东西。花了一点时间写了一个微信的登录流程,包括后端接口和小程序代码。
   
    做过微信登录的都知道,我们需要一个标识来记录用户的身份的唯一性,在微信中unionId就是我们所需要的记录唯一ID,那么如何拿到unionId就成了关键,我将项目分为小程序和   后台PHP代码两部分来讲。
   
    微信小程序开放平台
   
   
   
    先从我们的小程序代码开始
   
   
   
   
   
    简单的说一下我们小程序的js代码登录流程
   
    login ->获取code ->getUserInfo获取iv和encryptedData ->传给自己的服务器处理   ->返回给小程序结果
   
    var API_URL = "自己的服务器地址";
    Page({
      onLoad: function () {
  console.log("iv");
  wx.login({//login流程
  success: function (res)   {//登录成功
    if (res.code) {
      var code = res.code;
        wx.getUserInfo({//getUserInfo流程
        success: function (res2)   {//获取userinfo成功
        console.log(res2);
        var encryptedData =   encodeURIComponent(res2.encryptedData);//一定要把加密串转成URI编码
          var iv = res2.iv;
          //请求自己的服务器
           Login(code,encryptedData,iv);
        }
      })
   
        } else {
      console.log('获取用户登录态失败!' +   res.errMsg)
    }
  }
    });

    }
    }) 
   
   
    code:服务器用来获取sessionKey的必要参数。
    IV:加密算法的初始向量,encryptedData:加密过的字符串。
   
   
   
   
    把code iv encryptedData 传递给我们的服务器
   
    function    Login(code,encryptedData,iv){    console.log('code='+code+'&encryptedData='+encryptedData+'&iv='+iv);
 //创建一个dialog
          wx.showToast({
            title: '正在登录...',
            icon: 'loading',
            duration: 10000
          });
          //请求服务器
          wx.request({
            url: API_URL,
            data: {
              code:code,
                encryptedData:encryptedData,
              iv:iv
            },
            method: 'GET', //   OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
            header: {
              'content-type':   'application/json'
            }, // 设置请求的 header
            success: function (res)   {
              // success
              wx.hideToast();
                console.log('服务器返回'+res.data);
   
                },
            fail: function () {
              // fail
              //   wx.hideToast();
            },
            complete: function ()   {
              // complete
            }
          })
  }
   
    看文档的话,应该知道,我们所需要的unionId就在encryptedData中,所以服务器需要这些信息来把unionId解析出来。
   
   
   
    服务器处理逻辑
   
    我php用的是laravel框架
   
   
   
    先下载微信的解密demo
   
    下载地址
     
    这里我选择的是PHP代码,把除了demo外的三个class文件,放入我们自己的项目,以后后面调用。
   
    这里讲解一下服务器的处理流程:
      通过微信的https://api.weixin.qq.com/sns/jscode2session接口获取seesionKey,然后在通过sessionKey和iv来解密encryptedData数据获取UnionID。  
    具体文档
   
    /**
         *    登录
     *
     * @return Response
     */
    public function weixinlogin(   $user_id=null )
    {
            global   $App_Error_Conf,$Gift_Ids,$Server_Http_Path,$Is_Local,$Test_User,$Good_Vcode,$WeiXin_Xd_Conf;
            $validator_result =   input_validator(array('code','iv','encryptedData'));
            if(!empty($validator_result)){
                    return   response($validator_result);
            }
            $js_code =   $_REQUEST['code'];
            $encryptedData =   $_REQUEST['encryptedData'];
            $iv =   $_REQUEST['iv'];
            $appid = $WeiXin_Xd_Conf['appid'];
            $secret =  $WeiXin_Xd_Conf['secret'];
            $grant_type =  $WeiXin_Xd_Conf['grant_type'];
            //从微信获取session_key
            $user_info_url =   $WeiXin_Xd_Conf['code2session_url'];
            $user_info_url =   sprintf("%s?appid=%s&secret=%s&js_code=%s&grant_type=%",$user_info_url,$appid,$secret,$js_code,$grant_type);
            $weixin_user_data =   json_decode(get_url($user_info_url));
            $session_key =   $weixin_user_data->session_key;
    //解密数据
    $data = '';
    $wxBizDataCrypt = new WXBizDataCrypt($appid, $session_key);
    $errCode=$wxBizDataCrypt>decryptData($appid,$session_key,$encryptedData,   $iv, $data );

 

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之微信频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程