先貼代碼:
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