流程

主要通过微信登录,获取用户的三个信息: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后端代码)相关推荐

  1. 微信小程序-bug-调用wx.login()无响应的原因和解决方案

    微信小程序-bug-调用wx.login()无响应的原因和解决方案 参考文章: (1)微信小程序-bug-调用wx.login()无响应的原因和解决方案 (2)https://www.cnblogs. ...

  2. 微信小程序授权登录全过程解析(附代码)

    今天小编对于微信小程序的登录功能比较感兴趣,也是由于工作需要,就大概研究了一下. 这里先附一张小程序的登陆整体流程图. 整体流程: 微信端点击登录按钮后会去调用 wx.login接口,如果接口调用成功 ...

  3. 微信小程序用户登录流程思路及主要代码

    微信小程序用户登录流程思路 由于微信官方不允许在刚进入小程序的时候,弹出用户登陆页面,需要在进入小程序后,用户主动点击才能进入登陆页面.此时,将会给小程序开发者在设计用户登陆页面时,带来一定的麻烦.现 ...

  4. 微信小程序和百度小程序的登录 wx.login() swan.login() , 以及存在的问题处理

    一说到小程序,很多人都知道 微信小程序,但是如果你是小程序开发者,那么也可能知道百度小程序: 有一句开发者的至理名言,如果你在开发百度小程序中遇到了问题,那么第一时间不是取看文档,逛社区论坛, 因为你 ...

  5. 文案微信小程序源码独立版 前后端代码有齐全

    文案微信小程序源码文案+头像+背景图  文案微信小程序源码独立版+前端 | 星空资源网 (xk686.com) api接口是别人的,毕竟自己采集资源比较难 后台程序没有首页,只需要安装即用 后台账户: ...

  6. 微信小程序授权登录wx.getUserProfile获取不到昵称及头像解决方案

    半年前做的个小程序,更新了二个文字,重新上传审核通过,悲剧了,新用户的昵称全部变为微信用户,头像全部变为默认头像,查了半天代码没找到原因,相当头大,搜了一下文档,尴尬了,11月9号新更新的规则,不再返 ...

  7. 关于微信小程序如何调用wx.login获取openId和用户信息

    首先我们需要在微信开发小工具获取code临时登录凭证,下面是js文件也就是一些需要调用的函数.需要做这个的话我们需要上微信公众平台获取AppId和AppSecret Page({data: {},on ...

  8. 微信小程序授权登录流程

    https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html     微信小程序官方API 说明 ...

  9. php做微信小程序登录,php(ThinkPHP)实现微信小程序的登录过程

    下面结合thinkPHP框架来实现以下微信小程序的登录流程,这些流程是结合了官网和github的一个网站综合实现的 https://mp.weixin.qq.com/debug/wxadoc/dev/ ...

  10. php(ThinkPHP)实现微信小程序的登录过程

    源码也在我的github中给出 https://github.com/wulongtao/think-wxminihelper 下面结合thinkPHP框架来实现以下微信小程序的登录流程,这些流程是结 ...

最新文章

  1. 基于javaGUI的文档识别工具制作
  2. myeclipse使用maven整合ssh配置
  3. “讯推官”招募令:变现你的影响力
  4. XamarinSQLite教程创建数据表
  5. [LeetCode] Permutations II 全排列之二
  6. 第七周实践项目3 负数把正数赶出队列
  7. WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码
  8. VTK:可视化之ScalarVisibility
  9. kafka高可用集群课程介绍
  10. for惠普2013实习生
  11. 手机web网页制作的认识(有关meta标签)
  12. 基于 MySQL + Tablestore 分层存储架构的大规模订单系统实践-架构篇
  13. 记最近分析的一个锁屏幕病毒
  14. Mac OS 区块链hyperledger环境搭建、环境架构介绍、环境如何用、部署 Chaincode、智能合约的调用
  15. securecrt 上传文件到服务器,如何在SecureCRT下使用Zmodem传输文件
  16. 无限循环小数四则运算_无限循环小数能做加减乘除四则运算吗?无限不循环小数能做吗??...
  17. 机器学习算法:K近邻(k-nearest neighbors)
  18. js实现文字跑马灯效果
  19. Laravel+layui后台开发框架
  20. 微型计算机的五大硬件组成,计算机系统的组成,计算机硬件的五大部分是什么...

热门文章

  1. 大数据监控平台-Prometheus监控Hadoop3.1.3
  2. 新加坡国际学校年年IB成绩领先,到底有何优势?
  3. 汽车零配件生产企业ERP生产管理子系统d
  4. hbck源码系列(四)--表的完整性检查和修复Check
  5. 王道考研数据结构代码总结
  6. psp c语言编程软件,PSP PSP用金手指软件CWCheat v0.1.9 Rev C发布 - 电玩巴士
  7. UserWarning: semaphore_tracker: There appear to be 4 leaked semaphores to clean up at shutdown
  8. 酶切位点分析(the analysis of enzyme sites)
  9. 【Python】Decision on buying cars COROLLA or LEVIN(数据分析技术实现过程之·1数据清洗)
  10. Java中高级面试题及答案收集(三)