Ein Problem mit der URL-Umleitung in der WeChat-Entwicklung

WBOY
Freigeben: 2023-03-02 07:18:01
Original
1551 Leute haben es durchsucht

Posten Sie zuerst den Code:

<code>    public function getWxopneURL()
    {
        $code = I('get.code','','trim');
        if(empty($code)){
           $redirect_uri = urlencode(get_url());
            $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$this->appid.'&redirect_uri='.$redirect_uri.'&response_type=code&scope=snsapi_base&state=oauth&connect_redirect=1#wechat_redirect';
            file_put_contents('url.log', $url);
            return header("Location:".$url);
        }

        //获取access_token
        $access_token = file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->key."&code=".$code."&grant_type=authorization_code");
        $access_token = json_decode($access_token,true);
        return $access_token['openid'];
    }</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>/**
 * 获取当前页面完整URL地址
 */
function get_url($val='',$valb='',$var=array()) {
    $sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';

    if($valb == 'img'){
        if (strstr($val,'http:')) return $val;
        return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').$val;
    }elseif($valb == 'url'){
        $var['token'] = $GLOBALS['userinfo']['token'];
        if (strstr($val,'http:')) return $val;
        return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').U($val,$var);
    }
    if ($GLOBALS['userinfo']){
        $var = $_GET;
        if(count(explode('emp_car',$_SERVER['REQUEST_URI'])) == 1)
        {
            $var['token'] = $GLOBALS['userinfo']['token'];
        }
        $relate_url = U('',$var) ;
    }else{
        $php_self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
        $path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
        $relate_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $php_self.(isset($_SERVER['QUERY_STRING']) ? '?'.$_SERVER['QUERY_STRING'] : $path_info);
    }
    return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').$relate_url;
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

===================================
Das Problem ist wie folgt:
WeChat-Menü Sie müssen eine Verbindung öffnen in
Der Link sieht so aus:

http://rusice.tunnel.qydev.co...

Vor Ort verwende ich Ugrok für die Penetration auf der Win-Plattform. ist zugänglich.
Aber heute habe ich es auf den Server gestellt, in eine Linux-Umgebung. Etwas ist schief gelaufen.
Ein Problem mit der URL-Umleitung in der WeChat-Entwicklung

Die erfasste URL sieht so aus:

<code>https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxdd658ea6d4dbc597&redirect_uri=http%3A%2F%2Fwx.mytbu.cn%2Findex.php%3Fg%3DActivity%26m%3DDoVote&response_type=code&scope=snsapi_base&state=oauth&connect_redirect=1#wechat_redirect</code>
Nach dem Login kopieren
Nach dem Login kopieren

Später habe ich es versucht, ohne Parameter ist nur Domainname möglich.
Es ist auch möglich, einen Parameter mitzubringen, jedoch nicht zwei Parameter. Ich habe den ganzen Tag nach diesem Problem gesucht, ich hoffe, jemand kann mir helfen, danke!

Antwortinhalt:

Posten Sie zuerst den Code:

<code>    public function getWxopneURL()
    {
        $code = I('get.code','','trim');
        if(empty($code)){
           $redirect_uri = urlencode(get_url());
            $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$this->appid.'&redirect_uri='.$redirect_uri.'&response_type=code&scope=snsapi_base&state=oauth&connect_redirect=1#wechat_redirect';
            file_put_contents('url.log', $url);
            return header("Location:".$url);
        }

        //获取access_token
        $access_token = file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->key."&code=".$code."&grant_type=authorization_code");
        $access_token = json_decode($access_token,true);
        return $access_token['openid'];
    }</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>/**
 * 获取当前页面完整URL地址
 */
function get_url($val='',$valb='',$var=array()) {
    $sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';

    if($valb == 'img'){
        if (strstr($val,'http:')) return $val;
        return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').$val;
    }elseif($valb == 'url'){
        $var['token'] = $GLOBALS['userinfo']['token'];
        if (strstr($val,'http:')) return $val;
        return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').U($val,$var);
    }
    if ($GLOBALS['userinfo']){
        $var = $_GET;
        if(count(explode('emp_car',$_SERVER['REQUEST_URI'])) == 1)
        {
            $var['token'] = $GLOBALS['userinfo']['token'];
        }
        $relate_url = U('',$var) ;
    }else{
        $php_self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
        $path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
        $relate_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $php_self.(isset($_SERVER['QUERY_STRING']) ? '?'.$_SERVER['QUERY_STRING'] : $path_info);
    }
    return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').$relate_url;
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

===================================
Das Problem ist wie folgt:
WeChat-Menü Sie müssen eine Verbindung öffnen in
Der Link sieht so aus:

http://rusice.tunnel.qydev.co...

Vor Ort verwende ich Ugrok für die Penetration auf der Win-Plattform. ist zugänglich.
Aber heute habe ich es auf den Server gestellt, in eine Linux-Umgebung. Etwas ist schief gelaufen.
Ein Problem mit der URL-Umleitung in der WeChat-Entwicklung

Die erfasste URL sieht so aus:

<code>https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxdd658ea6d4dbc597&redirect_uri=http%3A%2F%2Fwx.mytbu.cn%2Findex.php%3Fg%3DActivity%26m%3DDoVote&response_type=code&scope=snsapi_base&state=oauth&connect_redirect=1#wechat_redirect</code>
Nach dem Login kopieren
Nach dem Login kopieren

Später habe ich es versucht, ohne Parameter ist nur Domainname möglich.
Es ist auch möglich, einen Parameter mitzubringen, jedoch nicht zwei Parameter. Ich habe den ganzen Tag nach diesem Problem gesucht, ich hoffe, jemand kann mir helfen, danke!

Haben Sie einen vertrauenswürdigen Domänennamen für die autorisierte Anmeldung konfiguriert?

Dies ist ein Problem mit URL-Parsing-Regeln, da &m= standardmäßig als Parameter der WeChat-Schnittstelle erkannt wird.
redirect_uri=http://wx.mytbu.cn/index.php?g=Activity&m=DoVote Der Parameter g nach ? gilt als Parameter Ihrer Seite index.php und das m nach & gilt als Parameter der vorherigen Autorisierungsseite der WeChat-Schnittstelle.

Das Problem, das 2 Tage gedauert hat, wurde endlich gelöst. Es stellte sich heraus, dass der Callback-Domainname konfiguriert werden musste. Es hat lange gedauert, bis ich unten einen geänderten Eintrag gefunden habe. . . Ist das eine Falle

Was noch ärgerlicher ist, ist der Fehler in der offiziellen Demo von WeChat

Verwandte Etiketten:
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!