手机版

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

时间:2021-12-19 来源:互联网 编辑:宝哥软件园 浏览:

作者:YXJ,来自原文地址:http://博客。csdn。net/sk 719887916/article/details/53761107

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

做过微信登录的都知道,我们需要一个标识来记录用户的身份的唯一性,在微信中unionId就是我们所需要的记录唯一身份证,那么如何拿到unionId就成了关键,我将项目分为小程序和后台服务器端编程语言(专业超文本预处理器的缩写)代码两部分来讲。

微信小程序开放平台

先从我们的小程序代码开始

微信小程序开发(一) 微信登录流程(图1)

简单的说一下我们小程序的js代码登录流程

登录-获取代码-getUserInfo获取希腊字母的第四个字母和加密数据-传给自己的服务器处理-返回给小程序结果

' var API_URL='自己的服务器地址;page({ OnLoad : function(){ console。日志(' iv ');wx.login({//login流程成功:函数(res) {//登录成功if(RES . code){ var code=RES . code;wx.getUserInfo({//getUserInfo流程成功:函数(res2) {//获取用户信息成功控制台。日志(res2);var encryptedData=encodeURIComponent(RES 2。encrypted data);//一定要把加密串转成上呼吸道感染编码var iv=RES 2。//请求自己的服务器登录(代码,encryptedData,iv);}})} else {console.log('获取用户登录态失败!'RES . errmsg)} });代码:服务器用来获取会话密钥的必要参数第四:加密算法的初始向量,加密数据:加密过的字符串

把code iv encryptedData 传递给我们的服务器

函数登录(代码,encryptedData,iv){控制台。日志(' code=' code ' encryptedData=' encryptedData ' iv=' iv ');//创建一个dialogwx.showToast({title: '正在登录.icon: 'loading ',持续时间: 10000 });//请求服务器wx.request({url: API_URL,data: {code:code,encrypted data : encrypted data,iv:iv}),method: 'GET ',//OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,connect header : { ' content-type ' : ' application/JSON ' },//设置请求的header successs :函数(RES){//成功wx。HideToast();console.log('服务器返回可再生能源数据);},fail : function(){//fail//wx。HideToast();},完成:函数(){//完成} })看文档的话,应该知道,我们所需要的unionId就在加密数据中,所以服务器需要这些信息来把unionId解析出来。

服务器处理逻辑

我服务器端编程语言(专业超文本预处理器的缩写)用的是laravel框架

先下载微信的解密demo

下载地址

微信小程序开发(一) 微信登录流程(图2)

这里我选择的是服务器端编程语言(专业超文本预处理器的缩写)代码,把除了演示外的三个班级文件,放入我们自己的项目,以后后面调用。

这里讲解一下服务器的处理流程:通过微信的https://api.weixin.qq.com/sns/jscode2session接口获取请参见安全密钥,然后在通过会话密钥和希腊字母的第四个字母来解密加密数据数据获取UnionID。具体文档

/*** 登录* * @返回响应*/公共函数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(数组('代码',' iv ','加密数据');if(!空($ validator _ result)){ 0返回响应($ validator _ result);} $ js _ code=$ _ REQUEST[' code '];$加密数据=$ _ REQUEST['加密数据'];$ iv=$ _ REQUEST[' iv '];$ appid=$ Weisin _ Xd _ Conf[' appid '];$ secret=$ Weisin _ Xd _ Conf[' secret '];$ grant _ type=$ WeiXin _ Xd _ Conf[' grant _ type '];//从微信获取session _ key $ user _ info _ URL=$ Weisin _ Xd _ Conf['代码2 session _ URL '];$user_info_url=sprintf('%s?appid=% s secret=% sjs _ 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=$ wxBizDataCryptdecryptData($ appid,$session_key,$encryptedData,$iv,$ data);最后拿到的这个数据就是我们解密后的加密数据里面会包含unionId。

版权声明:微信小程序开发(一)微信登录流程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。