微信小程序-微信登录wx.login(Thinkphp后端代码)
流程
主要通过微信登录,获取用户的三个信息:user_id(用户id),user_image(用户头像url),user_name(用户昵称)。
1、首次登录:
调用wx.login获取code,code发送给后台获取openid并存到用户表中,将返回user_id存到内存中。然后跳转到授权页面,当用户允许授权时,通过agreeGetUser方法获取到微信用户的信息保存到用户表中,并将user_name和user_image存到内存中,最后跳转到首页。
2、非首次登录:
调用wx.login获取code,code发送给后台获取openid,openid在用户表中已存在,则只改变用户登录时间,并返回user_id、user_name和user_image,存到内存后跳转首页。
代码
1、app.js
用户打开小程序时,会调用wx.login获取code,将code发送到后台获取openid。后台保存opendi并返回用户信息(首次登录信息为空,非首次登录信息存在)
App({onLaunch: function () {// 登录wx.login({success: function(res) {// 发送 res.code 到后台换取 openId, sessionKey, unionIdif(res.code){wx.request({url: 'http://XX.com/WechatUser/login_do', //改成你服务端的方法data:{code:res.code},success:function(res){//如果是首次登录,会跳到授权页面if(!res.data.data.username || res.data.data.username == " "){wx.navigateTo({url:'/pages/login/login',})}console.log(res.data.data)//首次登录,只会返回id;非首次登录,会返回三个信息wx.setStorageSync('userid', res.data.data.userid)wx.setStorageSync('username', res.data.data.username)wx.setStorageSync('userimage', res.data.data.userimage)}})}else{console.log('获取用户登录态失败!' + res.errMsg)}}})}
})
2、服务器端 login_do
获取到openid后,判断用户存在与否,不存在则保存openid,返回user_id;存在则修改登录时间,返回用户的信息
public function login_do(){try{extract(generateRequestParamVars());//接受参数的方法$result=GetWechatOpenId($code);//获取openid和session的方法在接下来的一块代码$conditions = array();$conditions['openid'] = $result['openid'];//判断用户是否存在if (!$user=D(self::$WECHAT_USER)->where($conditions)->find()) {//用户不存在,创建用户,没有详细信息$userid = D(self::$WECHAT_USER)->adds_do($result['openid']);$conditions = array();$conditions['id'] = $userid;$user = D(self::$WECHAT_USER)->where($conditions)->find();}else{//用户存在,修改登录时间D(self::$WECHAT_USER)->login_do($user['id']);//用户登录}$data=array();$data['userid']=$user['id'];$data['username']=$user['nickname'];$data['userimage']=$user['imageurl'];$ajaxReturnData['status'] = 1;$ajaxReturnData['message'] = '成功';$ajaxReturnData['data'] = $data;}catch (\Exception $e){$ajaxReturnData['status'] = 0;$ajaxReturnData['message'] = '失败';}$this->ajaxReturn($ajaxReturnData);}
GetWechatOpenId方法:
function GetWechatOpenId($js_code)
{if (!$js_code) {throw new \Exception('code参数为null!');}//获取openid和session的地址//即 https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code$url=C('WECHAT_GET_OPEN_ID');//定义好的appid、appsecret等有关小程序配置的数组常量$wechat_data=C('WECHAT_XCX_DATA');$param=array();$param[]='appid='.$wechat_data['appid'];$param[]='secret='.$wechat_data['appsecret'];$param[]='js_code='.$js_code;$param[]='grant_type=authorization_code';$params=join('&',$param);$url=$url.'?'.$params;$curl=new \Home\Common\Curl(); // 这个类具体内容在下方$result=$curl->go($url,'post');$result=json_decode($result,true);return $result;
}
放在Home\Common下的Curl.php
<?php
/** Curl操作类*/
namespace Home\Common;
class Curl {public function go($url,$method='POST',$data=''){if(!$url){return ;}if(!$method){return ;}$method=strtoupper($method);$header = array("Accept-Charset: utf-8"); $ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_AUTOREFERER, 1);//if($method=='POST'){curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//}curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$result = curl_exec($ch);if (curl_errno($ch)) {return curl_error($ch);}curl_close($ch);return $result;}}
3、login.js
首次登录会跳转到授权界面。授权之后则要保存微信用户所有信息。
Page({data: {url: "/pages/index/index",userInfo: {nickname: "",sex: "",head_pic: ""},text: "微信授权登录"},agreeGetUser: function (e) {var that = this;var msg = e.detail.errMsg;if (msg == 'getUserInfo:fail auth deny') {console.log('用户不允许授权')wx.navigateTo({url: '/pages/login/login',})}if (msg == 'getUserInfo:ok') {console.log('用户允许授权')wx.switchTab({url: '/pages/index/index',fail:function(e){console.log(e)}})}//授权保存用户信息var userid = wx.getStorageSync('userid');var username = wx.getStorageSync('username');if(!username){wx.request({url: 'http://XX.com/WechatUser/save_do',data: {id: userid,nickname: e.detail.userInfo.nickName,imageurl: e.detail.userInfo.avatarUrl,gender: e.detail.userInfo.gender,province: e.detail.userInfo.province,city: e.detail.userInfo.city,country: e.detail.userInfo.country,},success: function (res) {if (e.detail.userInfo.nickName){wx.setStorageSync('username', e.detail.userInfo.nickName);wx.setStorageSync('userimage', e.detail.userInfo.avatarUrl);}}})}},onLoad: function(t) {}
});
4、save_do的model层方法
public function save_do(){extract(generateRequestParamVars());$conditions = array();$conditions['id'] = $id;$data = array();$data['nickname']=$nickname;$data['imageurl']=$imageurl;$data['gender']=$gender;$data['province']=$province;$data['city']=$city;$data['country']=$country;if($this->where($conditions)->save($data)===false){throw new \Exception('OPERATION_FAILED');}}
OK!
微信小程序-微信登录wx.login(Thinkphp后端代码)相关推荐
- 微信小程序-bug-调用wx.login()无响应的原因和解决方案
微信小程序-bug-调用wx.login()无响应的原因和解决方案 参考文章: (1)微信小程序-bug-调用wx.login()无响应的原因和解决方案 (2)https://www.cnblogs. ...
- 微信小程序授权登录全过程解析(附代码)
今天小编对于微信小程序的登录功能比较感兴趣,也是由于工作需要,就大概研究了一下. 这里先附一张小程序的登陆整体流程图. 整体流程: 微信端点击登录按钮后会去调用 wx.login接口,如果接口调用成功 ...
- 微信小程序用户登录流程思路及主要代码
微信小程序用户登录流程思路 由于微信官方不允许在刚进入小程序的时候,弹出用户登陆页面,需要在进入小程序后,用户主动点击才能进入登陆页面.此时,将会给小程序开发者在设计用户登陆页面时,带来一定的麻烦.现 ...
- 微信小程序和百度小程序的登录 wx.login() swan.login() , 以及存在的问题处理
一说到小程序,很多人都知道 微信小程序,但是如果你是小程序开发者,那么也可能知道百度小程序: 有一句开发者的至理名言,如果你在开发百度小程序中遇到了问题,那么第一时间不是取看文档,逛社区论坛, 因为你 ...
- 文案微信小程序源码独立版 前后端代码有齐全
文案微信小程序源码文案+头像+背景图 文案微信小程序源码独立版+前端 | 星空资源网 (xk686.com) api接口是别人的,毕竟自己采集资源比较难 后台程序没有首页,只需要安装即用 后台账户: ...
- 微信小程序授权登录wx.getUserProfile获取不到昵称及头像解决方案
半年前做的个小程序,更新了二个文字,重新上传审核通过,悲剧了,新用户的昵称全部变为微信用户,头像全部变为默认头像,查了半天代码没找到原因,相当头大,搜了一下文档,尴尬了,11月9号新更新的规则,不再返 ...
- 关于微信小程序如何调用wx.login获取openId和用户信息
首先我们需要在微信开发小工具获取code临时登录凭证,下面是js文件也就是一些需要调用的函数.需要做这个的话我们需要上微信公众平台获取AppId和AppSecret Page({data: {},on ...
- 微信小程序授权登录流程
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 微信小程序官方API 说明 ...
- php做微信小程序登录,php(ThinkPHP)实现微信小程序的登录过程
下面结合thinkPHP框架来实现以下微信小程序的登录流程,这些流程是结合了官网和github的一个网站综合实现的 https://mp.weixin.qq.com/debug/wxadoc/dev/ ...
- php(ThinkPHP)实现微信小程序的登录过程
源码也在我的github中给出 https://github.com/wulongtao/think-wxminihelper 下面结合thinkPHP框架来实现以下微信小程序的登录流程,这些流程是结 ...
最新文章
- 基于javaGUI的文档识别工具制作
- myeclipse使用maven整合ssh配置
- “讯推官”招募令:变现你的影响力
- XamarinSQLite教程创建数据表
- [LeetCode] Permutations II 全排列之二
- 第七周实践项目3 负数把正数赶出队列
- WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码
- VTK:可视化之ScalarVisibility
- kafka高可用集群课程介绍
- for惠普2013实习生
- 手机web网页制作的认识(有关meta标签)
- 基于 MySQL + Tablestore 分层存储架构的大规模订单系统实践-架构篇
- 记最近分析的一个锁屏幕病毒
- Mac OS 区块链hyperledger环境搭建、环境架构介绍、环境如何用、部署 Chaincode、智能合约的调用
- securecrt 上传文件到服务器,如何在SecureCRT下使用Zmodem传输文件
- 无限循环小数四则运算_无限循环小数能做加减乘除四则运算吗?无限不循环小数能做吗??...
- 机器学习算法:K近邻(k-nearest neighbors)
- js实现文字跑马灯效果
- Laravel+layui后台开发框架
- 微型计算机的五大硬件组成,计算机系统的组成,计算机硬件的五大部分是什么...
热门文章
- 大数据监控平台-Prometheus监控Hadoop3.1.3
- 新加坡国际学校年年IB成绩领先,到底有何优势?
- 汽车零配件生产企业ERP生产管理子系统d
- hbck源码系列(四)--表的完整性检查和修复Check
- 王道考研数据结构代码总结
- psp c语言编程软件,PSP PSP用金手指软件CWCheat v0.1.9 Rev C发布 - 电玩巴士
- UserWarning: semaphore_tracker: There appear to be 4 leaked semaphores to clean up at shutdown
- 酶切位点分析(the analysis of enzyme sites)
- 【Python】Decision on buying cars COROLLA or LEVIN(数据分析技术实现过程之·1数据清洗)
- Java中高级面试题及答案收集(三)