1. 程式人生 > >thinkphp5.0獲取微信小程式使用者資訊unionid

thinkphp5.0獲取微信小程式使用者資訊unionid

因公司業務需要,接觸了微信小程式,在做微信自動登入的時候遇到了問題,頭像暱稱未能獲取到,在網上找了一個伺服器端解密的方法,只能獲取到使用者openid和unionid,僅供參考,如果有大佬知道獲取暱稱頭像的方法,請指點一下。

先說獲取unionid,小程式端傳引數到伺服器端,伺服器端再呼叫微信官方介面,通過小程式傳的引數生成簽名,然後對比微信官方返回的簽名,如果一致,並且在微信開放平臺已經綁定了賬號,獲取unionid需要在微信開放平臺註冊認證,認證需要300塊人民幣,然後繫結微信公眾號或者小程式,才能返回unionid。

小程式端程式碼

//app.js
App({
  onLaunch: function () {
    // 展示本地儲存能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
   
    // 登入
    wx.login({
      success: res => {
        // 傳送 res.code 到後臺換取 openId, sessionKey, unionId
        var code = res.code;
        if (code) {
          console.log('code值'+res.code);


          // wx.getSetting({
          //   success:res=>{
          //     if(res.authSetting['scope.userInfo']){
                //已經授權,可以直接呼叫getuserinfo獲取頭像暱稱,不會彈框
                wx.getUserInfo({
                  success: function (res) {
                    wx.request({
                      url: '伺服器端介面地址',
                      data: {
                        code: code,
                        iv: res.iv,
                        rawData: res.rawData,
                        signature: res.signature,
                        encryteData: res.encryptedData
                      },
                      header: {
                        'content-type': 'application/x-www-form-urlencoded'
                      },
                      success: function (re) {
                        if (re.data.code == 1) {
                          var userInfo = re.data.userInfo;
                          console.log(userInfo);
                        } else {
                          console.log('解密失敗');
                        }
                      },
                      fail: function () {
                        console.log('系統錯誤');
                      }


                    })


                   
                    if(this.userInfoReadyCallback){
                      this.userInfoReadyCallback(res)
                    }


            }
          })


          
        } else {
          console.log('獲取使用者登入態失敗!' + res.errMsg)
        }
      }
    })


   
  },
  globalData: {
    userInfo: null
  }

})

PHP程式碼:

//微信自動登入解密介面                
    public function login(){
        
        
        //接收小程式傳過來引數
        $code = input("code", '', 'htmlspecialchars_decode');
        $rawData = input("rawData", '', 'htmlspecialchars_decode');
        $signature = input("signature", '', 'htmlspecialchars_decode');
        $encryptedData = input("encryptedData", '', 'htmlspecialchars_decode');
        $iv = input("iv", '', 'htmlspecialchars_decode');
       
       //請求微信介面
        $params = [
            'appid' => '你的小程式appid',
            'secret' => '你的小程式secret',
            'js_code' => $code,
            'grant_type' => 'authorization_code'
        ];
        $res = makeRequest('https://api.weixin.qq.com/sns/jscode2session?appid=wx3717d89b7ef16de2&secret=de0e7a893c40265a9155e9537601887e&js_code=' . $code . '&grant_type=authorization_code', $params);
        if ($res['code'] !== 200 || !isset($res['result']) || !isset($res['result'])) {
            return json(ret_message('requestTokenFailed'));
        }
        
        $reqData = json_decode($res['result'], true);
        if (!isset($reqData['session_key'])) {
            return json(ret_message('requestTokenFailed'));
        }
        $sessionKey = $reqData['session_key'];
        
        //對比簽名
        $signature2 = sha1($rawData . $sessionKey);
        if ($signature2 !== $signature) return ret_message("signNotMatch");
        
//使用返回的session_key解密encryptData,和rawData比較,解密資訊中也包含openid
        $pc = new WXBizDataCrypt('wx3717d89b7ef16de2', $sessionKey);
        $errCode = $pc->decryptData($encryptedData, $iv, $data );
        if ($errCode !== 0) {
            return json(ret_message("encryptDataNotMatch"));
        }
        /**
         * 生成第三方3rd_session,用於第三方伺服器和小程式之間做登入態校驗。為了保證安全性,3rd_session應該滿足:
         * a.長度足夠長。建議有2^128種組合,即長度為16B
         * b.避免使用srand(當前時間)然後rand()的方法,而是採用作業系統提供的真正隨機數機制,比如Linux下面讀取/dev/urandom裝置
         * c.設定一定有效時間,對於過期的3rd_session視為不合法
         *
         * 以 $session3rd 為key,sessionKey+openId為value,寫入memcached
         */
        
        $data = json_decode($data, true);
        $session3rd = randomFromDev(16);
//         $data['session3rd'] = $session3rd;
        cache($session3rd, $data['unionId'] . $sessionKey);
        
        //已經返回unionid,最後怎麼操作隨意
     
        
    }

相關推薦

thinkphp5.0獲取程式使用者資訊unionid

因公司業務需要,接觸了微信小程式,在做微信自動登入的時候遇到了問題,頭像暱稱未能獲取到,在網上找了一個伺服器端解密的方法,只能獲取到使用者openid和unionid,僅供參考,如果有大佬知道獲取暱稱頭像的方法,請指點一下。先說獲取unionid,小程式端傳引數到伺服器端,伺

.net服務端獲取程式使用者資訊

1 public void RequestWxUserInfo(string code, string iv, string encryptedData, string rawData, string signature) 2 { 3 string res

nodejs獲取程式使用者的unionID

一、unionID機制和獲取途徑 傳送門 二、整體流程 前端通過wx.login獲取使用者的code,再通過wx.getUserInfo獲取到使用者的一些加密資料(需要設定withCredentials:true才可以),然後統一把code和iv和encryptedDa

thinkphp後臺獲取程式使用者資訊

public function sendCode(){ $APPID = '################APPID'; $AppSecret = '#################'; $code = input('get.code'); $url = 'https://ap

獲取程式openid,unionid

1.小程式程式碼 // 登入     wx.login({       success: function (r) {         var code = r.code;//登入憑證  

反編譯獲取程式原始碼(筆記)

一、前言: 本人的該部落格僅供研究,切記用於非法途徑。如有任何非法行為,皆與本博主無關。 跟著流程走,100%獲取原始碼成功。 流程如下: (1)下載並安裝夜神模擬器。下載地址:https://download.csdn.net/download/qq_31362105/10732350

獲取程式原始碼----親測

  Node.js的的執行環境 如果沒有安裝的的NodeJS,請先安裝一下 下載地址:https://nodejs.org/en/ 反編譯的指令碼 這裡提供一個Github上上的qwerty472123大神寫的的n

例項-0基礎程式開發入門1.2-【第一個程式

【開啟征程】開啟微信web開發者工具,點選小程式專案:點選右下角的“+”號,將建立快速模板前面的勾去掉然後選擇體驗小程式,目錄隨意,點選確定,即可建立一個全空的小程式專案啦。【建立最基本的目錄結構和檔案】在開始建立之前,我們有必要了解一下最基本的東西:​JSON 是一種資料格

PHP 獲取程式介面B二維碼介面

微信小程式介面B二維碼介面呼叫 微信小程式二維碼介面A與C總共生成的碼數量限制為100,000,也就是說如果超出了這個現在二維碼呼叫就會失敗,我這邊的業務需要呼叫二維碼的頻率較多,以防萬一。 微信小程式獲取二維碼首先要獲得access_token

使用nodejs獲取程式帶引數二維碼

由於專案需求,需要獲取小程式頁面的帶有引數的二維碼。好,那就看文件搞吧。 之前都是寫前端,沒有寫過後臺的東西,這次難得有機會組長讓我試一試試用node來寫,那就寫吧。 1、首頁獲取token,傳送request請求,用get的方式,在url後面加上小程式的grant_typ

最簡單的java獲取程式openid的方法,不需要jar包

@RequestMapping("getUserOpenId") @ResponseBody public String getUserOpenId(String appid, String js_code, String secret) {//  System.out.println("appid"+app

基予thinkphp5後臺的程式生成二維碼原始碼

 public function getcode(){             //微信小程式楚傳遞的引數值            $user_id=$_REQUEST['user_id'];            $APPID=$_REQUEST['appId'];   

個人如何獲取程式的APPID

暫時性使用,僅供學習研究使用;請優先參考底下圖文介紹連結;假如遇到困難,請在綜合交流區內發帖諮詢;官方文件都是預設你已經有了微信小程式的APPID,但是如何能獲取到微信小程式確實是個技術活微信公眾平臺 1. 在微信公眾平臺註冊小程式點進連結,然後選擇小程式註冊,如下圖所示:

java解析程式使用者資訊demo

1、引入maven依賴 <dependency>     <groupId>org.bouncycastle</groupId>     <artifactId>bcprov-jdk16</artifactId>

程式個人資訊頁面

在微信小程式中我們要顯示個人資訊的頁面,在個人資訊頁面中我們還需要修改一系列的資訊,那麼就來看看個人資訊的頁面該怎麼搭建吧,以及獲取資訊內容。前臺頁面wxml的搭建<!--pages/personal/personal.wxml--> <view class

程式使用者資訊解密

文章不是很全面,只是截取了專案內容的一部分,不明白的地方可以私信。當初之所以要去解密使用者資料,只是為了拿到unionId,說來奇怪,其實微信的登入憑證校驗介面(https://api.weixin.qq.com/sns/jscode2session?appid=APPID&

Thinkphp5程式獲取使用者資訊介面呼叫筆記

首先在官網下載示例程式碼, 選php的, 這裡有個坑  官方的php檔案,編碼是UTF-8+的, 所以要把檔案改為UTF-8 然後在Thinkphp5 extend資料夾下建立Wxxcx名稱空間,把官方的幾個類檔案放進去(這裡要注意資料夾名, 名稱空間名, 類名的, 大小

程式登入&授權&獲取使用者資訊(thinkphp5後臺)

後臺用到的公共方法(寫入common.php檔案的) 1.傳送HTTP請求方法,用於獲取code。 /** * 傳送HTTP請求方法 * @param string $url 請求URL * @param array $params 請求引數 * @p

程式中資料的儲存和獲取

/儲存資料     try {       wx.setStorageSync('key',this.data.radioCheckVal2)  //key表示data中的引數

程式(看文件寫例項五)程式課堂寶APP實現獲取簽到列表

根據上篇博文,這篇主要實現獲取簽到列表邏輯。 獲得簽到列表主要有以下步驟: (1)查詢老師的ID (2)查詢老師的簽到記錄 (3)如果當前使用者是老師,直接顯示所有記錄,因為簽到記錄都是老師發起的,肯定每次都簽到 (4)如果當前使用者是學生,以老師的簽到列表作為長度,然後以ite