黔优媒体网-软文媒体自助发稿平台!
  1. 行业资讯
  2. 正文

小程序开发之登录实例详解

来源:黔优媒体网   时间:2024-09-19

微信小程序登录
一. 小程序不支持cookie会话
1. 通过传递与检验3rd_session来保持会话
2. 3rd_session可以执行‘`head -n 80 /dev/urandom | tr -dc a-za-z0-9 | head -c 168`该命令生成
3. 使用redis或者数据库存储session
4. 生成的3rd_session发送给客户端,写入storage
5. 客户端的每次请求必须带上3rd_session
二、加密数据解码
1. $iv,$code是被加密过的数据,由于请求过程中因为编码原因+号变成了空格,所以我们需要用下面的方法转换回来

function define_str_replace($data){
 return str_replace( #39; #39;, #39;+ #39;,$data);
 }


三、例子:
php

// 微信登录
 public function weixin_login(){
 $session_db=D( #39;Session #39;);
 $session_id=I( #39;get.sessionid #39;, #39; #39;);
 $session=$session_db- getSession($session_id);
 if( !empty( $session ) ){
 $this- ajaxReturn([ #39;error_code #39;= 0, #39;sessionid #39;= $session_id]);
 }else{
 $iv=define_str_replace(I( #39;get.iv #39;)); //把空格转成+
 $encryptedData=urldecode(I( #39;get.encryptedData #39;)); //解码
 $code=define_str_replace(I( #39;get.code #39;)); //把空格转成+
 $msg=D( #39;Weixin #39;)- getUserInfo($code,$encryptedData,$iv); //获取微信用户信息(openid)
 if($msg[ #39;errCode #39;]==0){
 $open_id=$msg[ #39;data #39;]- openId;
 $users_db=D( #39;Users #39;);
 $info=$users_db- getUserInfo($open_id);
 if(!$info||empty($info)){
 $users_db- addUser([ #39;open_id #39;= $open_id, #39;last_time #39;= [ #39;exp #39;, #39;now() #39;]]); //用户信息入库
 $info=$users_db- getUserInfo($open_id); //获取用户信息
 $session_id=`head -n 80 /dev/urandom | tr -dc A-Za-z0-9 | head -c 168`; //生成3rd_session
 $session_db- addSession([ #39;uid #39;= $info[ #39;id #39;], #39;id #39;= $session_id]); //保存session
 if($session_id){
 $this- ajaxReturn([ #39;error_code #39;= 0, #39;sessionid #39;= $session_id]); //把3rd_session返回给客户端
 }else{
 $this- ajaxReturn([ #39;error_code #39;= 0, #39;sessionid #39;= $session_db- getSid($info[ #39;id #39;])]);
 }else{
 $this- ajaxReturn([ #39;error_code #39;= #39;用户信息获取失败! #39;]);
 }


获取微信信息模型(包括信息解密,官方例子点击下载)

require_once ABS_APP_PATH. #39;/Addon/Aes/wxBizDataCrypt.php #39;;
class WeixinModel{
 // 获取微信的用户信息(openid)
 public function getUserInfo($code,$encryptedData,$iv){
 $appid=C( #39;appid #39;);
 $secret=C( #39;secret #39;);
 $grant_type= #39;authorization_code #39;;
 $url= #39;https://api.weixin.qq.com/sns/jscode2session #39;;
 $url= sprintf( %s?appid=%s secret=%s js_code=%s grant_type=% ,$url,$appid,$secret,$code,$grant_type);
 $user_data=json_decode(file_get_contents($url));
 $session_key= define_str_replace($user_data- session_key);
 $data= 
 $wxBizDataCrypt=new \WXBizDataCrypt($appid,$session_key);
 $errCode=$wxBizDataCrypt- decryptData($encryptedData,$iv,$data);
 return [ #39;errCode #39;= $errCode, #39;data #39;= json_decode($data), #39;session_key #39;= $session_key];
 }


javascript

getUserInfo: function(cb) {
 var that = this
 if (this.globalData.userInfo) {
 typeof cb == function cb(this.globalData.userInfo)
 } else {
 //调用登录接口
 wx.login({
 success: function(r) {
 wx.getUserInfo({
 success: function(res) {
 that.login({
 code: r.code,
 iv: res.iv,
 encryptedData: encodeURIComponent(res.encryptedData),
 that.globalData.userInfo = res.userInfo
 typeof cb == function cb(that.globalData.userInfo)
 login: function(param) {
 wx.request({
 url: this.requestUrl( #39;Index/weixin_login #39;),
 data: param,
 header: {
 #39;content-type #39;: application/json ,
 success: function(res) {
 var data = JSON.parse(res.data.trim());
 wx.setStorageSync( #39;sessionid #39;, data.sessionid);
 },

以上就是小程序开发之登录实例详解的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。


【免责申明】黔优媒体网以上展示内容来源于用户自主上传、合作媒体、企业机构或网络收集整理,版权争议与本站无关,文章涉及见解与观点不代表黔优媒体网官方立场,请读者仅做参考,本文标题:小程序开发之登录实例详解;欢迎转载,转载时请说明出处。若您认为本文侵犯了您的版权信息,或您发现该内容有任何违法/违规的内容,请您立即联系我们及时修正或删除。(邮箱号: kefu@qianu.com)