php--tp5小程序授权登录

古城微笑少年丶 2023-07-08 13:25 57阅读 0赞
  1. public function login()
  2. {
  3. $appid = ''; //小程序appid
  4. $secret = ''; //小程序秘钥
  5. $code = input('code'); //接收小程序端传的code参数
  6. //拼接微信接口登录接口地址
  7. $url = "https://api.weixin.qq.com/sns/jscode2session?appid=".$appid."&secret=".$secret."&js_code=".$code."&grant_type=authorization_code";
  8. $data = file_get_contents($url); //请求微信登录接口
  9. $data = json_decode($data,true); //将微信返回值转换成数组
  10. //如果返回值中有openid参数表示登录成功
  11. if(isset($data['openid'])){
  12. $user = Users::where('openid',$data['openid'])->find(); //在数据库中查询当前登录用户信息
  13. $userinfo = json_decode(input('userinfo'),true); //接收小程序端用户数据
  14. //判断该用户在数据库中是否存在
  15. if($user)
  16. {
  17. //存在更新数据库用户数据
  18. $user->img = $userinfo['avatarUrl'];
  19. $user->nickname = $userinfo['nickName'];
  20. $user->save();
  21. return $this->return_msg(true,'登录成功',$user);
  22. }else{
  23. //不存在根据自己数据库的数据结构添加用户数据
  24. $user = new Users();
  25. $user->nickname = $userinfo['nickName'];
  26. $user->openid = $data['openid'];
  27. $user->img = $userinfo['avatarUrl'];
  28. $user->createtime = time();
  29. $user->save();
  30. return $this->return_msg(true,'登录成功',$user);
  31. }
  32. }else{
  33. return $this->return_msg(false,'登录失败');
  34. }
  35. }

小程序页面

  1. <button open-type="getUserInfo" bindgetuserinfo="getUserInfo">授权登录</button>

小程序前端

  1. getUserInfo: function() {
  2. let that = this
  3. wx.login({
  4. success: res => {
  5. // 发送 res.code 到后台换取 openId, sessionKey, unionId
  6. that.setData({
  7. is_login:false,
  8. })
  9. wx.getSetting({
  10. success: ress => {
  11. if (ress.authSetting['scope.userInfo']) {
  12. // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
  13. this.getinfo(res.code)
  14. }else{
  15. wx.request({
  16. url: app.globalData.url+'login/getname',
  17. data:{
  18. shop_id:app.globalData.shop_id
  19. },
  20. success:function(data){
  21. that.setData({
  22. is_login:true,
  23. name:data.data.data.name,
  24. logo:data.data.data.logo
  25. })
  26. that.getinfo(data.code)
  27. }
  28. })
  29. }
  30. }
  31. })
  32. }
  33. })
  34. },
  35. login:function(code){
  36. let that = this
  37. wx.request({
  38. url: app.globalData.url+'login/login',
  39. data:{
  40. shop_id:app.globalData.shop_id,
  41. code:code,
  42. nickname:that.data.nickname,
  43. img:that.data.img,
  44. gender:that.data.gender,
  45. },
  46. success:function(data){
  47. console.log(data)
  48. }
  49. })
  50. },
  51. getinfo:function(code){
  52. wx.getUserInfo({
  53. success: res => {
  54. // 可以将 res 发送给后台解码出 unionId
  55. var userinfo = JSON.parse(res.rawData)
  56. this.setData({
  57. nickname:userinfo.nickName,
  58. gender:userinfo.gender,
  59. img:userinfo.avatarUrl,
  60. })
  61. app.globalData.userinfo = userinfo
  62. this.login(code)
  63. // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
  64. // 所以此处加入 callback 以防止这种情况
  65. if (this.userInfoReadyCallback) {
  66. this.userInfoReadyCallback(res)
  67. }
  68. }
  69. })
  70. }

发表评论

表情:
评论列表 (有 0 条评论,57人围观)

还没有评论,来说两句吧...

相关阅读

    相关 程序如何登录授权

    如何登录授权 登录的时候获取用户的token 什么token? 用户权限标识 前端鉴权的一种方式 (可认为是一把钥匙) 后端生成 有时效性 token的传递顺

    相关 uni-app程序授权登录

    在uni-app授权登录的时候我发现本地测试都没有在开发者工具里面弹窗授权。但是却授权成功,获取到了用户的一些基本信息。 发布到了体验版也没问题,因为能够使用体验版的都是小程

    相关 微信程序授权登录

    现在微信小程序非常火爆,很多常规的APP都推出了自己的微信小程序。说到微信小程序,不可避免会触及到微信账号的授权登录,现在来说说一下哈! 首先需要自己的一个小程序,可以到微

    相关 微信程序授权登录

    现在微信小程序非常火爆,很多常规的APP都推出了自己的微信小程序。说到微信小程序,不可避免会触及到微信账号的授权登录,现在来说说一下哈! 首先需要自己的一个小程序,可以到微