时间:2021-07-01 10:21:17 帮助过:41人阅读
先贴代码:
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