> 백엔드 개발 > PHP 튜토리얼 > WeChat 개발 시 URL 리디렉션 문제

WeChat 개발 시 URL 리디렉션 문제

WBOY
풀어 주다: 2023-03-02 07:18:01
원래의
1613명이 탐색했습니다.

먼저 코드 게시:

<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를 사용합니다. 접근 가능합니다.
그런데 오늘은 서버, 리눅스 환경에 올려봤습니다. 문제가 발생했습니다.
WeChat 개발 시 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>
로그인 후 복사
로그인 후 복사

나중에 시도해 보니 매개 변수 없이 도메인 이름만 가능합니다.
하나의 매개변수를 가져올 수도 있지만 두 개의 매개변수는 가져올 수 없습니다. 나는 하루 종일 이 문제를 찾고 있었습니다. 누군가가 나를 도울 수 있기를 바랍니다. 감사합니다!

답글 내용:

먼저 코드 게시:

<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를 사용합니다. 접근 가능합니다.
그런데 오늘은 서버, 리눅스 환경에 올려봤습니다. 문제가 발생했습니다.
WeChat 개발 시 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>
로그인 후 복사
로그인 후 복사

나중에 시도해 보니 매개 변수 없이 도메인 이름만 가능합니다.
하나의 매개변수를 가져올 수도 있지만 두 개의 매개변수는 가져올 수 없습니다. 나는 하루 종일 이 문제를 찾고 있었습니다. 누군가가 나를 도울 수 있기를 바랍니다. 감사합니다!

인증된 로그인을 위해 신뢰할 수 있는 도메인 이름을 구성하셨나요?

이것은 URL 구문 분석 규칙에 문제가 있습니다. 왜냐하면 &m=이 WeChat 인터페이스의 매개변수로 기본적으로 인식되기 때문입니다.
redirect_uri=http://wx.mytbu.cn/index.php?g=Activity&m=DoVote ? 뒤의 g 매개변수는 페이지 index.php의 매개변수로 간주되며, & 뒤의 m은 이전 WeChat 인터페이스 인증 페이지의 매개변수로 간주됩니다.

이틀이 걸렸던 문제가 드디어 해결되었습니다. 콜백 도메인 이름을 구성해야 한다는 사실이 밝혀졌습니다. 아래 수정된 항목을 찾는 데 오랜 시간이 걸렸습니다. . . 이게 함정인가

더 짜증나는 것은 위챗 공식 데모의 버그입니다

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿