1.網頁授權:需要頁面調用授權的sdk,首先需要獲取到code參數
(A.網頁版的獲取code參考另一篇文章:https://blog.csdn.net/ettamei/article/details/148763361?spm=1011.2415.3001.5331
B.前端sdk提供:code只有5分鐘的有效期
)
2A.第一種的獲取access_token就是在獲取code之后獲取用戶信息:
只做獲取用戶信息,如果有之后需要js-sdk的操作這個access_token都是無效的,之后js-sdk使用的access_token也無法使用到獲取用戶信息中
function usrAccessToken(string $code){$appid = $this->wechatConfig['appid'];$secret = $this->wechatConfig['app_secret'];//獲取請求地址//獲取code后,請求以下鏈接獲取access_token$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$secret}&code={$code}&grant_type=authorization_code";$res_data = $this->curl_get($url);Tools::log_to_write_txt(['通過code換取網頁授權access_token$res_data'=>$res_data]);$data = json_decode($res_data['data'], true);if(isset($data['errcode']) && ($data['errcode'] == 40163 || $data['errcode'] == 40029)){throw new \Exception('code已失效,請重新授權');}cache($data['openid'].'wx_access_token', $data["access_token"],7000);//保存return $data;}
獲取到的信息例子:
{
"access_token":"94_S4F2QWpTjFMJhQ”,//訪問接口的令牌,用于調用受保護的資源(如用戶信息)。
"expires_in":7200,//有效時間,單位為秒。
"refresh_token":"94_2wXpmw7nRpZ9Vi-w27O”,//作用:刷新 access_token 的令牌。當access_token 過期后,可以用 refresh_token 獲取新的access_token。
"openid":"oC2wtxPWLc”,//用戶的唯一標識 ID,用于識別用戶身份。
"scope":"snsapi_userinfo”//表示當前授權的權限范圍。snsapi_userinfo 表示可以調用接口獲取用戶詳細信息(如昵稱、頭像等)。
}
2B.獲取js-sdk中使用的access_token:獲取這個access_token是需要在微信公眾號中設置ip白名單,如果使用的服務器ip地址不穩定需要設置靜態ip或者使用云服務器
function getAccessTokenNow(){try{//實時獲取$appid = $this->wechatConfig['appid'];$appsecret = $this->wechatConfig['app_secret'];//獲取請求地址$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);curl_close($ch);$jsoninfo = json_decode($output, true);Tools::log_to_write_txt(['網頁授權access_token$res_data'=>$jsoninfo]);cache('wx_access_token', $jsoninfo["access_token"],7000);//保存return $jsoninfo["access_token"];}catch (\Exception $e){Tools::log_to_write_txt(['error_title'=>'[錯誤]獲取票據出錯:'.$e->getMessage(),'error_info'=>$e->getTraceAsString()]);return false;}}