• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

一个微信开发URL转跳的问题

php 搞代码 3年前 (2022-01-22) 12次浏览 已收录 0个评论
文章目录[隐藏]

<body>

先贴代码:

<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<b style="color:transparent">(、本文来源gao@!dai!ma.com搞$$代^@码网*</b><i>搞gaodaima代码</i>=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&#8230;

在本地我是用ugrok做穿透,win平台。是可以访问的。
但是今天放到服务器上,linux环境。就出现了问题了。

抓取到的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个参数就不行了。 这个问题找了一整天了,希望有人可以出手相助,谢谢!

回复内容:

<body>

先贴代码:

<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&#8230;

在本地我是用ugrok做穿透,win平台。是可以访问的。
但是今天放到服务器上,linux环境。就出现了问题了。

抓取到的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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:一个微信开发URL转跳的问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址