zoukankan      html  css  js  c++  java
  • 微信小程序授权获取用户详细信息openid

    • 小程序获取用户的头像昵称openid之类

      这里写图片描述


    • 第一种使用wx.getUserInfo直接获取微信头像,昵称
    wx.getUserInfo({
         success: function (res) {
          that.setData({
              nickName: res.userInfo.nickName,
             avatarUrl: res.userInfo.avatarUrl,
          })
          },
    })

    • 第二种
      我们在使用小程序wx.login API进行登录的时候,直接使用wx.getUserInfo是不能获取更多的信息的,如微信用户的openid。
      官方提示,需要发送获取到的code进行请求到微信的后端API,
    根据文档,只需要进行一个get请求到如下地址即可:
    https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&
    js_code=JSCODE&grant_type=authorization_code
    
    appid和secret在微信小程序后台可以看到,
    js_code为使用wx.login登录时获取到的code参数数据,
    grant_type这个不用改动。

    • js文件
     var openId = (wx.getStorageSync('openId'))
            if (openId) {
              wx.getUserInfo({
                success: function (res) {
                  that.setData({
                    nickName: res.userInfo.nickName,
                    avatarUrl: res.userInfo.avatarUrl,
                  })
                },
                fail: function () {
                  // fail
                  console.log("获取失败!")
                },
                complete: function () {
                  // complete
                  console.log("获取用户信息完成!")
                }
              })
            } else {
              wx.login({
                success: function (res) {
                  console.log(res.code)
                  if (res.code) {
                    wx.getUserInfo({
                      withCredentials: true,
                      success: function (res_user) {
                        wx.request({
                         //后台接口地址
                          url: 'https://....com/wx/login',
                          data: {
                            code: res.code,
                            encryptedData: res_user.encryptedData,
                            iv: res_user.iv
                          },
                          method: 'GET',
                          header: {
                            'content-type': 'application/json'
                          },
                          success: function (res) {
                            // this.globalData.userInfo = JSON.parse(res.data);
                            that.setData({
                              nickName: res.data.nickName,
                              avatarUrl: res.data.avatarUrl,
                            })
                            wx.setStorageSync('openId', res.data.openId);
    
                          }
                        })
                      }, fail: function () {
                        wx.showModal({
                          title: '警告通知',
                          content: '您点击了拒绝授权,将无法正常显示个人信息,点击确定重新获取授权。',
                          success: function (res) {
                            if (res.confirm) {
                              wx.openSetting({
                                success: (res) => {
                                  if (res.authSetting["scope.userInfo"]) {////如果用户重新同意了授权登录
                                    wx.login({
                                      success: function (res_login) {
                                        if (res_login.code) {
                                          wx.getUserInfo({
                                            withCredentials: true,
                                            success: function (res_user) {
                                              wx.request({
                                               url: 'https://....com/wx/login',
                                                data: {
                                                  code: res_login.code,
                                                  encryptedData: res_user.encryptedData,
                                                  iv: res_user.iv
                                                },
                                                method: 'GET',
                                                header: {
                                                  'content-type': 'application/json'
                                                },
                                                success: function (res) {
                                                  that.setData({
                                                    nickName: res.data.nickName,
                                                    avatarUrl: res.data.avatarUrl,
    
                                                  })
                                                  wx.setStorageSync('openId', res.data.openId);
                                                }
                                              })
                                            }
                                          })
                                        }
                                      }
                                    });
                                  }
                                }, fail: function (res) {
    
                                }
                              })
    
                            }
                          }
                        })
                      }, complete: function (res) {
    
    
                      }
                    })
                  }
                }
              })
    
            }
    
    
      },
      globalData: {   
        userInfo: null
      }
    • 后台是php 框架是laravel5.4版本
    官方文档:
    https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html
    
    微信官方提供了多种编程语言的示例代码(点击下载)。每种语言类型的接口名字均一致。调用方式可以参照示例。
    下载之后在php文件中引入:
    <?php
    
    namespace AppHttpControllersAdmin;
    
    use IlluminateHttpRequest;
    use AppHttpControllersController;
    use AppModelsUser;
    use AppModelsWechatuser;
    include_once   app_path('/Http/Controllers/Admin/PHP/wxBizDataCrypt.php');
    
    
      // 获取微信用户信息
       public function getWxLogin(Request $request)
       {
          // require_once ROOTPATH . "./PHP/wxBizDataCrypt.php";
    
            $code   =   $request->get('code');
            $encryptedData   =   $request->get('encryptedData');
            $iv   =   $request->get('iv');
            $appid  =  "***" ;
            $secret =   "***";
    
            $URL = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";
    
            $apiData=file_get_contents($URL);
            // var_dump($code,'wwwwwwww',$apiData['errscode']);
            //     $ch = curl_init();
            //   curl_setopt($ch, CURLOPT_URL, $URL);
            //   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            //   curl_setopt($ch, CURLOPT_HEADER, 0);
            //   $output = curl_exec($ch);
            //   curl_close($ch)
    
            if(!isset($apiData['errcode'])){
                $sessionKey = json_decode($apiData)->session_key;
                $userifo = new WXBizDataCrypt($appid, $sessionKey);
    
                $errCode = $userifo->decryptData($encryptedData, $iv, $data );
    
                if ($errCode == 0) {
                    return ($data . "
    ");
                } else {
                    return false;
                }
            }
       }

    • 官方文档的登录流程图,整个登录流程基本如下图所示:

      这里写图片描述

  • 相关阅读:
    (五)串口通讯方式设置
    (四)计算机上电自启动
    (三)磁盘分区
    (一)老毛桃U盘启动盘制作
    (二)操作系统安装
    计算机常见问题1:计算机网口问题
    Java日志打印方法
    MySQL数据库常见问题1:关于 “ MySQL Installer is running in Community mode ” 的解决办法
    窥见云技术未来大势,腾讯云Techo开发者大会即将在京召开
    揭秘国庆阅兵直播背后的黑科技,腾讯云提供技术支持
  • 原文地址:https://www.cnblogs.com/jett010/p/8778662.html
Copyright © 2011-2022 走看看