我们需要一个标识来记录用户的身份的唯一性,在微信中unionId就是我们所需要的记录唯一ID,那么如何拿到unionId就成了关键,我将项目分为小程序和 后台PHP代码两部分来讲。

从小程序代码说起

简单说下小程序的js代码登陆流程

login -> 获取code -> getUserInfo获取iv和encryptedData -> 传给自己的服务器处理 -> 返回给小程序结果

var API_URL = '自己服务器地址';Page({  onLoad: function(){    console.log("iv");    wx.login({      success:function(res){        if(res.code){          var code = res.code;          wx.getUserInfo({            success:function(res2){              console.log(res2);              var encryptedData = encodeURTComponent(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: 1000  });  //请求服务器  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'    },    success: function(res){      wx.hideToast();      console.log('服务器返回'+res.data);    },    fail:function(){      //wx.hideToast();    },    complete:function(){      //complete    }  })
}

我们所需要的unionId就在encryptedData中,所以服务器需要这些信息来把unionId解析出来。

服务器处理逻辑

先下载微信的解密demo: https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html?t=20161122

我们选择php,把除了demo外的三个php文件,放入我们自己的项目,方便以后调用。

讲一下服务器的处理流程:

通过微信的https://api.weixin.qq.com/sns/jscode2session接口获取seesionKey,然后再通过sessionKey和iv来解密encryptedData数据获取UnionID

/*登陆*/
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&js_code=%s&grant_type=%",$user_info_url,$appid,$secret,$js_code,$grand_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.

这样就实现了微信的简单登录。

原文地址:http://blog.csdn.net/sk719887916/article/details/53761107

转载于:https://www.cnblogs.com/baixuemin/p/6511142.html

微信小程序开发-微信登陆流程相关推荐

  1. 微信小程序开发-微信支付之免密支付(自动扣费)一 小程序+java接口

    微信小程序开发-微信支付之免密支付(自动扣费)一 小程序+java接口 链接: 点击进入

  2. 视频教程-微信小程序开发-微信开发

    微信小程序开发 我是一名java高级开发工程师,已有七年的工作经验,从事过多个大型项目的开发与架构设计 王鹤然 ¥298.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 ...

  3. springboot+Vue+微信小程序开发微信做菜系统

    摘要: 当代人虽然越来越注重养生,却盲目的补进不适合自己的药膳或汤,反而影响了健康,经常自己误判食错药膳等,"药膳典"小程序是针对这一现象来根据用户的身体信息,个人喜好,为用户量身 ...

  4. 微信小程序开发 | 微信小程序入门

    微信小程序入门 1.1 初识微信小程序 1.1.1 什么是微信小程序 1.1.2 微信小程序的账号 1.1.3 微信小程序的特点 1.1.4 微信小程序的发展前景 1.2 开发环境搭建 1.2.1 注 ...

  5. 微信小程序开发-微信支付功能【WxMaService 获取openid,WxPayService建微信订单,接收微信支付异步通知回调方法,附有完整前后端代码】

    前提:对小程序开发有一定的基础:小程序已发布使用,已开通微信支付,关联商户号. 微信小程序平台:小程序平台 微信开发者文档:开发者文档 微信小程序支付API 地址:微信支付文档地址 微信支付平台:微信 ...

  6. 微信小程序 开发 微信开发者工具 快捷键

    微信小程序已经跑起来了.快捷键设置找了好久没找到,完全凭感觉.图贴出来.大家看看. 我现在用的是0.10.101100的版本,后续版本更新快捷键也应该不会有什么变化. 现在貌似不能修改.如果有同学找到 ...

  7. 启达传媒-微信小程序|微信小程序工具|微信小程序开发|微信小程序制作

    标准的商城体系,提供双端数据管理功能,可随时登录后台操作.让用户畅通体验全方面优质服务,帮助线下商户直接触达用户. 集行业资讯.分享.浏览关于我们等功能于一体,为用户提供立体式的线上线下无缝衔接的多形 ...

  8. python开发微信小程序-Python 开发者的微信小程序开发实践

    导读 在知乎上,有人提问"如何使用 Python 开发微信小程序". 其实微信小程序作为一个前端的机制,Python 并不能插上边.只不过可以作为后端接口为微信小程序提供数据服务而 ...

  9. 微信小程序开发教程7:实现小程序登陆功能

    平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我. 跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信 ...

最新文章

  1. Win10 下 RabbitMQ 的 安装 配置
  2. 求1到30的阶乘和(Java)
  3. 动态规划之----最长公共子序列
  4. I.MX6ULL芯片介绍 —— 迅为
  5. isecure center 综合安防管理平台_企业综合安全管理平台
  6. php 单一职责,单一职责原则
  7. 腾讯云加码 IDaaS,加速 SaaS 时代进程
  8. 【2022最新Java面试宝典】—— Java集合面试题(52道含答案)
  9. 太阳光是平行光吗_百思 | 太阳光是不是平行光?
  10. iso硬盘安装 凤凰os_在Linux中安装凤凰系统(Phoenix OS)的方法
  11. jQuery boxy
  12. cdn搭建原理_CDN运行过程四大要点,附技术原理图解,智能DNS解析
  13. VUE使用benz-amr-recorder 实现解码、播放
  14. Openlayers设置请求瓦片大小
  15. 多个HTML页面公用头部尾部
  16. udevinfo__ udevadm info
  17. AXI总线技术简介——ZYNQ PS和PL的互联技术
  18. 在Kmplayer中添加sub字幕过大而挡住视频的解决方法
  19. matlab中和 |和||的区别
  20. 流利说硅谷AI Lab负责人刘扬:语言学习产品如何在技术上保持优势?

热门文章

  1. [Algorithm]一切始于ADT-表达式计算
  2. nginx 的源码安装
  3. Linux下ps命令详解
  4. 自动化运维专题之zabbix课程内容大纲
  5. 观察者模式(Head First设计模式学习2)
  6. 开源的人品测试机 (windows版)
  7. c语言异或运算符_计算机中C语言的-运算符
  8. sysbench --with-mysql-libs_linux安装sysbench
  9. 各种池化操作(包括组合池化)
  10. json vue 对象转数组_vue.js基于v-for实现批量渲染 Json数组对象列表数据示例