当前位置:微信小程序开发 > 小程序资讯 > 小程序开发教程 > 微信小程序技术教程之用户授权登陆开发

微信小程序技术教程之用户授权登陆开发

2018-06-08 11:22 来源: 霸界科技

摘要:微信用户授权登陆的时候,用来记录用户身份唯一性的标识就是微信中的unionID,所以在做授权登陆开发的时候,如何拿到unionID就成为开发的关键之一。本文介绍微信小程序JS代码登陆流...

期权保本理财
  微信用户授权登陆的时候,用来记录用户身份唯一性的标识就是微信中的unionID,所以在做授权登陆开发的时候,如何拿到unionID就成为开发的关键之一。本文介绍微信小程序JS代码登陆流程与服务器处理流程,来说说如何进行用户授权登陆开发 。
 
微信小程序技术教程之用户授权登陆开发
 
  

1、JS代码登陆流程及示例代码

 
  (1)微信小程序JS代码的登陆流程为:login ->获取code ->getUserInfo获取iv和encryptedData ->传给自己的服务器处理 ->返回给小程序结果。
 
  (2)JS登陆示例代码如下
 
  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)
 
  }
 
  }
 
  });
 
  (3)所需参数介绍
 
  code:服务器用来获取sessionKey的必要参数
 
  encryptedData:加密过的字符串
 
  IV:加密算法的初始向量
 
  (4)服务器处理流程示例代码
 
  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
 
  }
 
  })
 
  }
 
  

2、服务器解析说明及示例代码

 
  微信授权登陆所需的标识用户身份唯一性的unionID,就在encryptedData中,所以获取unionID则需要在encryptedData这些信息中将它解析出来,解析流程是:通过微信的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 );
 
  在拿到解析后的encryptedData之后,就可以在里面找到unionID,而用户的微信授权登陆开发也就实现了。
分享到:
最新评论

网友:

验证码: 点击我更换图片

联系我们

业务咨询:15918761088

招商咨询:15918761088(微信同号)

周一至周五 9:30-18:30

公司地址:广州市海珠区昌岗中路166号富盈国际大厦2505室

官方微信 官方微博

Copyright © 2018 www.keji168.com 广州霸界网络科技有限公司版权所有 粤ICP备18083764号-1

客服
套餐咨询,合作细节等
在线客服
电话咨询
159-1876-1088