Heim > Backend-Entwicklung > PHP-Tutorial > Warum die WeChat-Webseiten-Autorisierungsschnittstelle den Code nicht abrufen kann (gelöst)

Warum die WeChat-Webseiten-Autorisierungsschnittstelle den Code nicht abrufen kann (gelöst)

WBOY
Freigeben: 2023-03-02 10:56:01
Original
3566 Leute haben es durchsucht

1. Methoden zum Aufrufen von Schnittstellen von Drittanbietern

<code>function https_request($url,$type='get',$res='json',$data = ''){
        //1.初始化curl
        $curl = curl_init();
        //2.设置curl的参数
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,2);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        if ($type == "post"){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        //3.采集
        $output = curl_exec($curl);
        //4.关闭
        curl_close($curl);
        if ($res == 'json') {
            return json_decode($output,true);
        }
    }    </code>
Nach dem Login kopieren
Nach dem Login kopieren

2. Holen Sie sich die OpenID des Benutzers

<code>    function getBaseInfo(){
        $appid = "我的ID";
        $redirect_uri = urlencode("http://www.XXXXXXX.com/XXXXX/XXXXXX.php/Index/getUserOpenId");
        $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_base&state=614#wechat_redirect";
        header('location:'.$url);
    }</code>
Nach dem Login kopieren
Nach dem Login kopieren

3. Besorgen Sie sich das access_token des Benutzers

<code>    function getUserOpenId(){
        $appid = "我的ID";
        $appsecret = "我的secret";
        $code=$_GET['code'];
        //2.获取到网页授权的access_token
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_cod";
        //3.拉取用户的opendi
        $res = $this->https_request($url);
        var_dump($code);
        var_dump("<hr >");
        var_dump($url);
        var_dump("<hr >");
        dump($res);
    }</code>
Nach dem Login kopieren
Nach dem Login kopieren

Der Code der Web-Autorisierungsschnittstelle kann nicht abgerufen werden und die drei gedruckten Werte lauten wie folgt:

<code>NULL string(5) "

" string(149) "https://api.weixin.qq.com/sns/oauth2/access_token?appid=我的ID &secret=我的secret&code=&grant_type=authorization_cod" string(5) "

" array(2) { ["errcode"]=> int(41008) ["errmsg"]=> string(47) "missing code, hints: [ req_id: 3MmDtA0251s113 ]" }
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Das Problem wurde gefunden. Ich glaube, viele Leute wie ich haben das Problem nicht gefunden. Wie unten gezeigt, sollte es sich um Code handeln. Ich habe den Link von der offiziellen Website kopiert, aber ein Buchstabe fehlt ... Allerdings gibt es hier keinen Assembly-Parameter, daher habe ich ihn nie gefunden ...
Warum die WeChat-Webseiten-Autorisierungsschnittstelle den Code nicht abrufen kann (gelöst)

Antwortinhalt:

1. Methoden zum Aufrufen von Schnittstellen von Drittanbietern

<code>function https_request($url,$type='get',$res='json',$data = ''){
        //1.初始化curl
        $curl = curl_init();
        //2.设置curl的参数
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,2);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        if ($type == "post"){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        //3.采集
        $output = curl_exec($curl);
        //4.关闭
        curl_close($curl);
        if ($res == 'json') {
            return json_decode($output,true);
        }
    }    </code>
Nach dem Login kopieren
Nach dem Login kopieren

2. Holen Sie sich die OpenID des Benutzers

<code>    function getBaseInfo(){
        $appid = "我的ID";
        $redirect_uri = urlencode("http://www.XXXXXXX.com/XXXXX/XXXXXX.php/Index/getUserOpenId");
        $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_base&state=614#wechat_redirect";
        header('location:'.$url);
    }</code>
Nach dem Login kopieren
Nach dem Login kopieren

3. Besorgen Sie sich das access_token des Benutzers

<code>    function getUserOpenId(){
        $appid = "我的ID";
        $appsecret = "我的secret";
        $code=$_GET['code'];
        //2.获取到网页授权的access_token
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_cod";
        //3.拉取用户的opendi
        $res = $this->https_request($url);
        var_dump($code);
        var_dump("<hr >");
        var_dump($url);
        var_dump("<hr >");
        dump($res);
    }</code>
Nach dem Login kopieren
Nach dem Login kopieren

Der Code der Web-Autorisierungsschnittstelle kann nicht abgerufen werden und die drei gedruckten Werte lauten wie folgt:

<code>NULL string(5) "

" string(149) "https://api.weixin.qq.com/sns/oauth2/access_token?appid=我的ID &secret=我的secret&code=&grant_type=authorization_cod" string(5) "

" array(2) { ["errcode"]=> int(41008) ["errmsg"]=> string(47) "missing code, hints: [ req_id: 3MmDtA0251s113 ]" }
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Das Problem wurde gefunden. Ich glaube, viele Leute wie ich haben das Problem nicht gefunden. Wie unten gezeigt, sollte es Code sein. Der Link wurde von der offiziellen Website kopiert, ich weiß nicht wie, ein Buchstabe fehlt ... Allerdings gibt es hier keinen Assembly-Parameter, daher habe ich ihn nie gefunden ...
Warum die WeChat-Webseiten-Autorisierungsschnittstelle den Code nicht abrufen kann (gelöst)

Was für ein Zufall, ein Freund hat mir gestern Abend diese Frage auf QQ gestellt. Genau das gleiche Problem.

Haben Sie einen vertrauenswürdigen Domänennamen eingerichtet?

Sie müssen aufschreiben, wie Sie den Code erhalten haben. . .

In diesem Fall schreiben Sie absichtlich die falsche App-ID, um zu sehen, ob ein Fehler gemeldet wird, und verwenden dann die Schnittstelle, die zum ersten Mal springt, und schreiben absichtlich die falsche App-ID

In den Demos, die ich zuvor gesehen habe, und dem Code, den ich geschrieben habe, wurde die Methode, die ich gerade für Sie geschrieben habe, in zwei Methoden aufgeteilt. Könnte es an diesem Problem liegen? Code, Sie können versuchen, ihn zusammen zu schreiben.

Zum Beispiel

öffentlicher Funktionsindex(){

<code>if($_GET['code']){
        //第二步
        //第三部
}else{

    //第一步跳转
    //回调地址也是回调到这个方法,获取回调地址,用我下面这个地址来取得当前的地址作为回调,getCurUrl()

}</code>
Nach dem Login kopieren

}

/**

  • php ruft die vollständige URL-Adresse des aktuellen Besuchs ab
    */

Funktion getCurUrl() {

<code>$url = 'http://';
if (isset($_SERVER ['HTTPS']) && $_SERVER ['HTTPS'] == 'on') {
    $url = 'https://';
}
if ($_SERVER ['SERVER_PORT'] != '80') {
    $url .= $_SERVER ['HTTP_HOST'] . ':' . $_SERVER ['SERVER_PORT'] . $_SERVER ['REQUEST_URI'];
} else {
    $url .= $_SERVER ['HTTP_HOST'] . $_SERVER ['REQUEST_URI'];
}
// 兼容后面的参数组装
if (stripos($url, '?') === false) {
    $url .= '?t=' . time();
}
return $url;</code>
Nach dem Login kopieren

}

Zu location.href = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx2d6844d53934185f&secret=551ffeb8a5bbd50766bd340141c0963f&code=&grant_type=authorization_cod"

Es basiert auf oAuth2.0, siehe Prozess: wapbaike.baidu.com/item/OAuth2.0/6788617?adapt=1&fr=aladdin

Tut mir leid...
Es sind 2 Tage vergangen und immer noch keine Ergebnisse, können Sie mir helfen

Warum wird im dritten Schritt der von access_token erhaltene Code verwendet, bevor die Fehlermeldung lautet, dass der Code-Parameter fehlt? Überprüfen Sie die vorherigen Schritte, um den Code zu erhalten

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage