微信小程序开发(一) 微信登录流程详解

发布时间 - 2026-01-10 22:26:24    点击率:

最近在研究微信小程序开发,非常有意思的一个东西。花了一点时间写了一个微信的登录流程,包括后端接口和小程序代码。

做过微信登录的都知道,我们需要一个标识来记录用户的身份的唯一性,在微信中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 );

最后拿到的这个 data就是我们解密后的encryptedData里面会包含unionId。

这样简单登录就实现了!以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# 微信小程序开发流程  # 微信小程序开发教程  # 详解小程序之简单登录注册表单验证  # 微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能  # 微信小程序 教程之注册页面  # 微信小程序 教程之注册程序  # 微信小程序实战之登录页面制作(5)  # 微信小程序 登录的简单实现  # 微信小程序 新建登录页并实现tabBar隐藏  # 微信小程序搭建及解决登录失败问题  # 小程序云开发之用户注册登录  # 自己的  # 的是  # 所需要  # 文档  # 就在  # 的说  # 下载地址  # 给我们  # 花了  # 做过  # 写了  # 我将  # 用户登录  # 两部分  # 创建一个  # 转成  # 信中  # 大家多多  # 程序开发  # 一定要把 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  如何制作一个表白网站视频,关于勇敢表白的小标题?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  独立制作一个网站多少钱,建立网站需要花多少钱?  七夕网站制作视频,七夕大促活动怎么报名?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  Laravel如何使用Service Container和依赖注入?(代码示例)  Laravel如何发送系统通知?(Notification渠道示例)  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Bootstrap CSS布局之列表  利用vue写todolist单页应用  Laravel PHP版本要求一览_Laravel各版本环境要求对照  如何基于云服务器快速搭建网站及云盘系统?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  详解MySQL数据库的安装与密码配置  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  公司网站制作价格怎么算,公司办个官网需要多少钱?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Python制作简易注册登录系统  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何获取上海专业网站定制建站电话?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  PythonWeb开发入门教程_Flask快速构建Web应用  如何在万网自助建站中设置域名及备案?  网站图片在线制作软件,怎么在图片上做链接?  如何快速搭建高效WAP手机网站?  如何用AWS免费套餐快速搭建高效网站?  JS实现鼠标移上去显示图片或微信二维码  网站优化排名时,需要考虑哪些问题呢?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  油猴 教程,油猴搜脚本为什么会网页无法显示?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  JavaScript如何实现音频处理_Web Audio API如何工作?  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何快速生成ASP一键建站模板并优化安全性?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  如何有效防御Web建站篡改攻击?