一個微信開發URL轉跳的問題

來源:互聯網
上載者:User

先貼代碼:

    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'];    }
/** * 擷取當前頁面完整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;}

===================================
出現問題如下:
菜單中需要開啟一個串連,
連結長這個樣子:

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

在本地我是用ugrok做穿透,win平台。是可以訪問的。
但是今天放到伺服器上,linux環境。就出現了問題了。

抓取到的url是這樣的:

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

後來我試了一下,不帶參數,只有網域名稱 是可能的。
然後帶一個參數 也是可以的,帶2個參數就不行了。 這個問題找了一整天了,希望有人可以出手相助,謝謝!

回複內容:

先貼代碼:

    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'];    }
/** * 擷取當前頁面完整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;}

===================================
出現問題如下:
菜單中需要開啟一個串連,
連結長這個樣子:

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

在本地我是用ugrok做穿透,win平台。是可以訪問的。
但是今天放到伺服器上,linux環境。就出現了問題了。

抓取到的url是這樣的:

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

後來我試了一下,不帶參數,只有網域名稱 是可能的。
然後帶一個參數 也是可以的,帶2個參數就不行了。 這個問題找了一整天了,希望有人可以出手相助,謝謝!

配置了授權登入的可信網域名稱嗎

這是url解析規則問題啊,因為&m=預設認定為介面的參數。
redirect_uri=http://wx.mytbu.cn/index.php?g=Activity&m=DoVote ?後的參數g認為是你頁面index.php的參數,而&後的m認為是前面介面authorize頁面的參數。

弄了2天的問題終於解決了,原來是需要配置回調網域名稱。找了半天才在下面找到一個修改的入口。。。這算是一個坑嗎

更坑的是官方demo的bug

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.