獲取微信二維碼返回亂碼

Gan_1314發表於2020-12-27

獲取微信二維碼返回亂碼,遇到的44002,41001,還有圖片沒法正常顯示
首先獲取微信token然後再獲取二維碼這個沒什麼好說的 直接上程式碼

public function getQRcode()
{
    $appid = '';
    $secret = '';
    $access_token = json_decode(file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret),true)['access_token'];
    $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=$access_token";
    $ch = curl_init();
    $data = json_encode(['scene' => '&id='.$this->user_id]);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_HEADER, 'image/gif');
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data)
    ));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //如果需要將結果直接返回到變數裡,那加上這句。
    $res = curl_exec($ch);
   }

雖然已經獲取到了小程式二維碼 但是此時列印$res就會出現亂碼的問題 仔細看文件的同學可能就知道 這是因為微信會返回圖片二進位制內容

$data = 'data:image/png;base64,'.base64_encode($res);//補全base64加密字串頭
$html = "<!DOCTYPE html>
        <html lang='en'>
        <head>
            <meta charset='UTF-8'>
            <title>二維碼</title>
        </head>
        <body>
        <img src='$data'>
        </body>
        </html>";
echo $html;
exit;

在程式碼上加上這一句 可以轉換 直接輸出圖片
原文連結

相關文章