導讀微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,由張小龍所帶領的騰訊廣州研發中心產品團隊打造 [2] 。微信支持跨通信運營商、跨操作系統平臺... 微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,由張小龍所帶領的騰訊廣州研發中心產品團隊打造 [2] 。微信支持跨通信運營商、跨操作系統平臺通過網絡快速發送免費(需消耗少量網絡流量)語音短信、視頻、圖片和文字,同時,也可以使用通過共享流媒體內容的資料和基于位置的社交插件“搖一搖”、“漂流瓶”、“朋友圈”、”公眾平臺“、”語音記事本“等服務插件。 現在的活動,很多都引導用戶關注公眾號,才能參與活動,如何判斷用戶是否已關注公眾號,其實很簡單,照著本文章,你就不會再犯愁了,本文的php代碼很詳細的解說了。一、微信公眾平臺配置1. 獲取appid, appsecret,添加白名單登錄微信公眾平臺,進入基本配置。開發中需要用到兩個參數,appId和appSecret(appSecret只展示一次,需保存下來,否則需要重置獲取)。 點擊查看
2. 添加網頁授權進入公眾號設置=》功能設置=》網頁授權域名 二、php后端實現1. 獲取全局token此token有效期為2小時,可以暫存起來,過期后需要重新獲取。 public static function getToken($appid, $appsecret){ $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret; return Curl::callWebServer($url); } 正確返回結果: { "access_token": "ACCESS_TOKEN", "expires_in": 7200 } 返回結果參數說明: 參數 說明 access_token 獲取到的全局token expires_in 憑證有效時間,單位:秒 錯誤返回結果: {"errcode": 40013, "errmsg": "invalid appid"} 返回結果參數說明: 返回碼 說明 -1 系統繁忙,此時請開發者稍候再試 0 請求成功 40001 AppSecret錯誤或者AppSecret不屬于這個公眾號,請開發者確認 AppSecret的正確性 40002 請確保grant_type字段值為client_credential 40164 調用接口的IP地址不在白名單中,請在接口IP白名單中進行設置。(小程序及小游戲調用不要求IP地址在白名單內。) 2. 獲取用戶關聯公眾號的openid分兩步,先要獲取到用戶對公眾號的授權碼,然后拿這個碼去獲取臨時access_token和openid。 獲取用戶授權碼 public static function getCode($appId, $redirect_uri, $state=1, $scope='snsapi_base', $response_type='code'){ $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appId.'&redirect_uri='.$redirect_uri.'&response_type='.$response_type.'&scope='.$scope.'&state='.$state.'#wechat_redirect'; header('Location: '.$url, true, 301); } 正確返回結果: 返回code碼,并且跳轉回調頁面$redirect_uri 錯誤返回結果: {"errcode": 10003, "errmsg": "redirect_uri域名與后臺配置不一致"} 返回結果參數說明: 返回碼 說明 10003 redirect_uri域名與后臺配置不一致 10004 此公眾號被封禁 10005 此公眾號并沒有這些scope的權限 10006 必須關注此測試號 10009 操作太頻繁了,請稍后重試 10010 scope不能為空 10011 redirect_uri不能為空 10012 appid不能為空 10013 state不能為空 10015 公眾號未授權第三方平臺,請檢查授權狀態 10016 不支持微信開放平臺的Appid,請使用公眾號Appid 通過getCode獲取到的code換取網頁授權的access_token和openid public static function getAccessToken($code, $appid, $appsecret, $grant_type='authorization_code'){ $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type='.$grant_type.''; return Curl::callWebServer($url); } 正確返回結果: { "access_token": "ACCESS_TOKEN", "expires_in": 7200, "refresh_token": "REFRESH_TOKEN", "openid": "OPENID", "scope": "SCOPE" } 返回參數說明 參數 描述 access_token 網頁授權接口調用憑證,注意:此access_token與基礎支持的access_token不同 expires_in access_token接口調用憑證超時時間,單位(秒) refresh_token 用戶刷新access_token openid 用戶唯一標識,請注意,在未關注公眾號時,用戶訪問公眾號的網頁,也會產生一個用戶和公眾號唯一的OpenID scope 用戶授權的作用域,使用逗號(,)分隔 錯誤返回結果: {"errcode":40029, "errmsg":"invalid code"} 3. 獲取用戶信息使用第2步中獲取的openId和第1步中獲取的token去獲取用戶信息 public static function getUserInfo($openId, $token){ $url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$token.'&openid='.$openId.'&lang=zh_CN'; return Curl::callWebServer($queryUrl, '', 'GET'); } 正確返回結果: { "subscribe": 1, "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", "nickname": "Band", "sex": 1, "language": "zh_CN", "city": "廣州", "province": "廣東", "country": "中國", "headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", "subscribe_time": 1382694957, "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" "remark": "", "groupid": 0, "tagid_list":[128,2], "subscribe_scene": "ADD_SCENE_QR_CODE", "qr_scene": 98765, "qr_scene_str": "" } 返回參數說明: 參數 說明 subscribe 用戶是否訂閱該公眾號標識,值為0時,代表此用戶沒有關注該公眾號,拉取不到其余信息。 openid 用戶的標識,對當前公眾號唯一 nickname 用戶的昵稱 sex 用戶的性別,值為1時是男性,值為2時是女性,值為0時是未知 city 用戶所在城市 country 用戶所在國家 province 用戶所在省份 language 用戶的語言,簡體中文為zh_CN headimgurl 用戶頭像,最后一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),用戶沒有頭像時該項為空。若用戶更換頭像,原有頭像URL將失效。 subscribe_time 用戶關注時間,為時間戳。如果用戶曾多次關注,則取最后關注時間 unionid 只有在用戶將公眾號綁定到微信開放平臺帳號后,才會出現該字段。 remark 公眾號運營者對粉絲的備注,公眾號運營者可在微信公眾平臺用戶管理界面對粉絲添加備注 groupid 用戶所在的分組ID(兼容舊的用戶分組接口) tagid_list 用戶被打上的標簽ID列表 subscribe_scene 返回用戶關注的渠道來源,ADD_SCENE_SEARCH 公眾號搜索,ADD_SCENE_ACCOUNT_MIGRATION 公眾號遷移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 掃描二維碼,ADD_SCENEPROFILE LINK 圖文頁內名稱點擊,ADD_SCENE_PROFILE_ITEM 圖文頁右上角菜單,ADD_SCENE_PAID 支付后關注,ADD_SCENE_OTHERS 其他 qr_scene 二維碼掃碼場景(開發者自定義) qr_scene_str 二維碼掃碼場景描述(開發者自定義) 錯誤結果: {"errcode":40013,"errmsg":"invalid appid"} 三、使用判斷是否關注過,此處為入口: public function isConcern($appId, $appSecret) { $param = ''; // 如果有參數 $this->getCode($appId, U('callback', 'param='.$param), 1 ,'snsapi_base'); } 授權后回調 public function callback(){ $isconcern = 0; $code = $this->_get('code'); $param = $this->_get('param'); $appId = C('appId'); // config中配置 $appSecret = C('appSecret'); $accessTokenInfo = $this->getAccessToken($code, $appId, $appSecret); $openId = $accessTokenInfo['openid']; $accessToken = $accessTokenInfo['access_token']; $token = $this->getToken($appId, $appSecret); $userInfo = $this->getUserInfo($openId, $token['access_token']); if($userInfo['subscribe'] == 1){ $this->assign('userInfo', $userInfo); $isconcern = 1; // 已關注 } else { $isconcern = 0; // 未關注 } $this->assign('openid', $openId); $this->display('page'); } 此時頁面上可以獲取到userInfo和isconcern,isconcern為1時表示已關注公眾號,否則未關注。 相關推薦: 以上就是還是代碼好用,幾步就能判斷用戶是否已關注公眾號的詳細內容,更多請關注php中文網其它相關文章! 微信提供公眾平臺、朋友圈、消息推送等功能,用戶可以通過“搖一搖”、“搜索號碼”、“附近的人”、掃二維碼方式添加好友和關注公眾平臺,同時微信將內容分享給好友以及將用戶看到的精彩內容分享到微信朋友圈。 |
溫馨提示:喜歡本站的話,請收藏一下本站!