PHP(TP5)獲取微信小程序unionId

  最近作一個項目,微信小程序、Android、IOS同步進行開發,小程序從微信內部直接登陸,Android、IOS也須要用微信登錄,爲了肯定同一用戶的身份,須要使用到微信的unionId。php

  將小程序、APP都綁定到同一微信公衆平臺後,Android、IOS能直接獲取到unionId,但在小程序上獲取unionId須要用到後端解密。html

  網上有一些獲取unionId的方法試過一些,有點複雜,因此我總結出一個比較簡單的。前端

  網上下載微信官方提供的PHP的demo,會有3個文件:數據庫

  其實在demo裏已經有用法了,代碼很簡單明瞭:寫入appid、sessionKey、encryptedData、iv四個參數便可。除了appid是固定的外,其餘都由前端傳過來。小程序

  這個demo只是返回解密unionId成功,即code爲0或是其餘錯誤code,真正的unionId值,是wxBizDataCrypt.php裏的$data的值,能夠改成返回該值後端

  TP5實現代碼:微信小程序

    //獲取微信小程序unionId
    public function getUnionId()
    {
        $sessionKey = Request::instance()->param("sessionKey", '', 'htmlspecialchars');
        $encryptedData = Request::instance()->param("encryptedData", '', 'htmlspecialchars');
        $iv = Request::instance()->param("iv", '', 'htmlspecialchars');
        $appid = 'wxxxxxxxxxxxxxx';
        //引入文件
        vendor('wxunionid.wxBizDataCrypt');
        $pc = new \WXBizDataCrypt($appid, $sessionKey);
        $unionId = $pc->decryptData($encryptedData, $iv, $data);
        return $unionId;
    }

  因爲小程序上一個用戶對一個小程序的openid是相同的,unionId也相同,咱們每次解析unionId後能夠將openid和unionId保存在數據庫,用unionId做爲用戶惟一表示,小程序登錄的時候先使用openid查找數據庫是否有openid對應的unionId值,有則直接返回用戶數據進行登錄(目前openid能夠直接獲取,可是unionId須要用戶手動受權,這樣用戶只需一次受權之後便可「無痕登錄」)微信

相關文章
相關標籤/搜索