1. 程式人生 > >php獲取微信使用者(粉絲)的openid和基本資訊

php獲取微信使用者(粉絲)的openid和基本資訊

    微信公眾平臺獲取微信使用者(粉絲)的openid在公眾號的開發中有很多用途,包括給使用者傳送訊息,包括各種訊息、模版訊息等。在這裡向需要獲取openid的開發人員分享一下簡單的流程及部分程式碼,和一些問題的解決方式,給初次接觸微信openid的朋友們一個參考。目的只在於獲取openid,至於優化及應用上請自由發揮。

    openid是公眾號的普通使用者(粉絲)的一個唯一的標識,只針對當前的公眾號有效。

     下面以php語言為例介紹如何獲取微信使用者openid。

一、準備工作

    首先你要有一個公眾號,型別為服務號,還有一個外網可訪問的域名(如果要對映公網伺服器,需備案)。獲取openid需要的公眾號的 appid 和 secret(登入微信公眾平臺,在【開發】——>【基本配置】中的開發者ID(AppID)和 開發者密碼(AppSecret)就是)。其次是設定網頁授權域名(登陸微信公眾平臺,在【設定】——>【公眾號設定】——>【功能設定】——>網頁授權域名中按步驟操作並設定就好),這個域名就是你獲取openid的web專案釋出的域名,這裡注意伺服器請一定跑在80埠。

二、呼叫https://open.weixin.qq.com/connect/oauth2/authorize介面獲取到code

public function getcode(){
        //基本配置
        $appid=**************;//這裡填寫你的appid
        $redirect_uri=urlencode("http://*********/getuserinfo");//這裡用你的網頁授權回撥地址替換一下
        $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
        header("location:".$url);
}

當用戶用微信進入我們的網頁並呼叫到getcode方法之後,若引數無誤,設定的網頁授權域名正確,微信就會重定向頁面到我們提交的回撥地址,同時我們想要的code也會被傳過來。

三、得到code作為一個引數呼叫https://api.weixin.qq.com/sns/oauth2/access_token介面獲取到openid

//回撥函式
public function getuserinfo(){
        $appid  = "***********";//這裡新增你的微信公眾號appid
        $secret = "***********";//這裡新增你的微信公眾號secret
        //這裡獲取到了code
        $code   = $_GET['code'];
        //第一步:取得openid
        $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$secret."&code=".$code."&grant_type=authorization_code";
        $oauth2 = $this->http_curl($oauth2Url);
        //accestoken
        $access_token = $oauth2["access_token"];
        //openid
        $openid = $oauth2['openid'];
        
        //第二步:根據全域性access_token和openid查詢使用者資訊
        $get_user_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
        $userinfo = $this->http_curl($get_user_info_url);

        dump($userinfo);
}

function http_curl($url){
        //用curl傳參
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        //關閉ssl驗證
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch,CURLOPT_HEADER, 0);
        $output = curl_exec($ch);
        curl_close($ch);
        return json_decode($output, true);
}

四、注意事項

1.網頁授權域名設定如果與提交的回撥地址的域名不對應,微信是無法回撥到的。

2.單純的獲取openid使用的授權方式是靜態授權,不需要經過使用者許可的(使用者看不到授權的過程),而想要獲取使用者的頭像暱稱等資訊是另一種授權(使用者端會彈出授權視窗)。