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>
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>
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>
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>
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 ...
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>
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>
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>
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>
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 ...
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>
}
/**
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>
}
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