php獲取微信使用者(粉絲)的openid和基本資訊
阿新 • • 發佈:2018-12-13
微信公眾平臺獲取微信使用者(粉絲)的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使用的授權方式是靜態授權,不需要經過使用者許可的(使用者看不到授權的過程),而想要獲取使用者的頭像暱稱等資訊是另一種授權(使用者端會彈出授權視窗)。