먼저 코드 게시:
<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>
===================================
문제는 다음과 같습니다.
WeChat 메뉴
링크는 다음과 같습니다.
http://rusice.tunnel.qydev.co...
로컬에서는 win 플랫폼 침투를 위해 ugrog를 사용합니다. 접근 가능합니다.
그런데 오늘은 서버, 리눅스 환경에 올려봤습니다. 문제가 발생했습니다.
캡처된 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>
나중에 시도해 보니 매개 변수 없이 도메인 이름만 가능합니다.
하나의 매개변수를 가져올 수도 있지만 두 개의 매개변수는 가져올 수 없습니다. 나는 하루 종일 이 문제를 찾고 있었습니다. 누군가가 나를 도울 수 있기를 바랍니다. 감사합니다!
먼저 코드 게시:
<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>
===================================
문제는 다음과 같습니다.
WeChat 메뉴
링크는 다음과 같습니다.
http://rusice.tunnel.qydev.co...
로컬에서는 win 플랫폼 침투를 위해 ugrog를 사용합니다. 접근 가능합니다.
그런데 오늘은 서버, 리눅스 환경에 올려봤습니다. 문제가 발생했습니다.
캡처된 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>
나중에 시도해 보니 매개 변수 없이 도메인 이름만 가능합니다.
하나의 매개변수를 가져올 수도 있지만 두 개의 매개변수는 가져올 수 없습니다. 나는 하루 종일 이 문제를 찾고 있었습니다. 누군가가 나를 도울 수 있기를 바랍니다. 감사합니다!
인증된 로그인을 위해 신뢰할 수 있는 도메인 이름을 구성하셨나요?
이것은 URL 구문 분석 규칙에 문제가 있습니다. 왜냐하면 &m=이 WeChat 인터페이스의 매개변수로 기본적으로 인식되기 때문입니다. redirect_uri=http://wx.mytbu.cn/index.php?g=Activity&m=DoVote
?
뒤의 g 매개변수는 페이지 index.php의 매개변수로 간주되며, &
뒤의 m은 이전 WeChat 인터페이스 인증 페이지의 매개변수로 간주됩니다.
이틀이 걸렸던 문제가 드디어 해결되었습니다. 콜백 도메인 이름을 구성해야 한다는 사실이 밝혀졌습니다. 아래 수정된 항목을 찾는 데 오랜 시간이 걸렸습니다. . . 이게 함정인가
더 짜증나는 것은 위챗 공식 데모의 버그입니다