1. 程式人生 > 其它 >2021/01/16 在線上除錯時,開發工具獲取得到openid,真機除錯獲取不到openid

2021/01/16 在線上除錯時,開發工具獲取得到openid,真機除錯獲取不到openid

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;
}