Heim  >  Artikel  >  Backend-Entwicklung  >  Ein Problem mit der URL-Umleitung in der WeChat-Entwicklung

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

WBOY
WBOYOriginal
2016-12-01 00:56:521552Durchsuche

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

===================================
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>

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

===================================
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>

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

Stellungnahme:
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