微信小程式授權獲取用戶詳細信息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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...