2021/01/16 在線上除錯時,開發工具獲取得到openid,真機除錯獲取不到openid
阿新 • • 發佈:2022-04-01
2021/01/16
程式碼如下:
if ($a == 'get_openid_card') { $input = file_get_contents("php://input"); $obj = json_decode($input, true); $code = checkInput($obj['code']); $appId = checkInput($obj['appId']); $secret = $serverConfig->getCardWxSecret(); $AccessTokenUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $appId. "&secret=" . $secret . "&js_code=" . $code . "&grant_type=authorization_code"; $result = json_decode(file_get_contents($AccessTokenUrl)); if ($result) { echo (JSON(array('data' => $result, 'status' => '06626492603032'))); exit(); } else { echo (JSON(array('data' => $result, 'status' => '15115415254862')));exit(); } }
我的情況:如題所述,引數正確,連結正確,問題出在獲取連結內容的方法上。
在真機,$result = json_decode(file_get_contents($AccessTokenUrl)) 獲取到的結果為空,也就是null;
改成$result = file_get_contents($AccessTokenUrl) 獲取到為false,說明file_get_contents讀取連結內容失敗,在網上搜索了資料,模糊覺得是沒有開啟openssl的緣故,需要一個叫php_openssl.dll的東西,
說是“只要是使用函式file_get_contents訪問 https 的網站都要開啟”,
我沒有去實踐,而是採用了curl方法獲取。
結果是喜人的。
完整程式碼如下:
if ($a == 'get_openid_card') { $input = file_get_contents("php://input"); $obj = json_decode($input, true); $code = checkInput($obj['code']); $appId = checkInput($obj['appId']); $secret = $serverConfig->getCardWxSecret(); $AccessTokenUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $appId . "&secret=" . $secret . "&js_code=" . $code . "&grant_type=authorization_code"; // $api = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code"; //獲取GET請求 function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } //傳送 $str = httpGet($AccessTokenUrl); echo $str; }