微信小程式授權獲取用戶詳細信息openid

来源:http://www.cnblogs.com/haifengliang/archive/2017/12/07/7998868.html
-Advertisement-
Play Games

小程式獲取用戶的頭像昵稱openid之類 第一種使用wx.getUserInfo直接獲取微信頭像,昵稱 ? 1 2 3 4 5 6 7 8 wx.getUserInfo({ success:function(res) { that.setData({ nickName: res.userInfo.n ...


小程式獲取用戶的頭像昵稱openid之類  

第一種使用wx.getUserInfo直接獲取微信頭像,昵稱

?
1 2 3 4 5 6 7 8 wx.getUserInfo({    success:function(res) {    that.setData({      nickName: res.userInfo.nickName,      avatarUrl: res.userInfo.avatarUrl,    })    }, })

第二種 

我們在使用小程式wx.login API進行登錄的時候,直接使用wx.getUserInfo是不能獲取更多的信息的,如微信用戶的openid。 
官方提示,需要發送獲取到的code進行請求到微信的後端API,進行用戶解密之類的操作才可以獲取,

根據文檔,只需要進行一個get請求到如下地址即可:

 

1 2 3 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文件

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 varopenId = (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版本

源碼免費下載地址:http://www.jinhusns.com/Products/Download/

官方文檔:

https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html

微信官方提供了多種編程語言的示例代碼(點擊下載)。每種語言類型的介面名字均一致。調用方式可以參照示例。

下載之後在php文件中引入:

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 <?php   namespace App\Http\Controllers\Admin;   use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Models\User; use App\Models\Wechatuser; include_once  app_path('/Http/Controllers/Admin/PHP/wxBizDataCrypt.php');      // 獲取微信用戶信息   publicfunctiongetWxLogin(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 . "\n");       }else{         returnfalse;       }     }   }

官方文檔的登錄流程圖,整個登錄流程基本如下圖所示:

 

 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一,效果圖。 二,代碼。 ...
  • 本章目標 一、理解什麼是Intent組件 二、掌握在Intent中傳遞參數 三、掌握多個Activity組件進行交互通信 一、什麼是Intent? 1、同Activity一樣,也是Android應用組件 2、在Android中承擔著一種指令輸出的作用 Intent負責對應用中一次操作的動作及動作相關 ...
  • Android點擊事件 備註 全局實現View.OnClickListener 或許需要將 MainActivity 設置為 public 註冊事件 定義函數 代碼 ...
  • 主線程刷新UI 單例 ...
  • 這幾天又遇到要調節列表分割線位置,就想起很久以前剛做時的做法:把自帶的分割線隱藏,然後自己加一條UIView,哈哈,不過這一兩年不那麼幹了,把這個方法貼出來; 在 Tableview 的代理方法中,實現下麵的代理方法: UIEdgeInsetsMake(上,左,下,右)自己可以調節,UIEdgeIn ...
  • Xcode9之前 設置狀態欄顏色首先在info.plist文件中,加入UIViewControllerBasedStatusBarAppearance = false; 讓後在delegate didFinishLaunchingWithOptions 方法中加入下麵的代碼就可以了; Xcode9之 ...
  • 最近寫了個下拉控制項,和幾個下拉的頭部樣式,下拉控制項可以連續添加疊加幾個頭部視圖 下麵是沒有添加任何頭部尾部的視圖下拉效果 一步一步來介紹,先介紹這個下拉效果,在介紹自定義的頭部 首先在使用上,和普通的控制項沒有兩樣,拿recyclerview來做例子,因為recyclerview使用比較多,而且可以替 ...
  • <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>fixed解決方案</title> <script src="../jsDemo/jquery-1.8.2.min.js?3393"></script> <styl ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...