首頁  >  文章  >  後端開發  >  一個微信開發URL轉跳的問題

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

WBOY
WBOY原創
2016-12-01 00:56:521552瀏覽

先貼程式碼:

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

===================================
出現問題如下:
微信選單中需要打開一個連接,
連結長這個樣子:

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

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

抓取到的url是這樣的:

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

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

回覆內容:

先貼程式碼:

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

===================================
出現問題如下:
微信選單中需要打開一個連接,
連結長這個樣子:

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

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

抓取到的url是這樣的:

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

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

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

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

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

更坑的是微信官方demo的bug

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn