>백엔드 개발 >PHP 튜토리얼 >WeChat 웹페이지에 접속하여 유효한 코드를 얻을 수도 있지만, 공유한 후에는 코드를 얻을 수 없습니다. 이 문제를 어떻게 해결해야 합니까?

WeChat 웹페이지에 접속하여 유효한 코드를 얻을 수도 있지만, 공유한 후에는 코드를 얻을 수 없습니다. 이 문제를 어떻게 해결해야 합니까?

WBOY
WBOY원래의
2016-10-17 09:30:002013검색

위챗 웹페이지에 들어가도 유효한 코드를 받을 수 있는데, 공유한 후에는 코드를 받을 수 없습니다. 이 문제를 어떻게 해결해야 하나요?

답글 내용:

위챗 웹페이지에 들어가도 유효한 코드를 받을 수 있는데, 공유한 후에는 코드를 받을 수 없습니다. 이 문제를 어떻게 해결해야 하나요?

최근 위챗 개발을 접하게 되었습니다. 페이지의 URL은 컨트롤러의 메소드여야 하며 공유 URL도 이 메소드여야 합니다. 이 메소드의 첫 번째 작업은 WeChat에서 코드를 가져온 다음 실제로 필요한 페이지로 이동하는 것입니다. 액세스할 수 있습니다. 구현 방법은 URL 뒤에 다른 매개변수를 추가하여 액세스된 여러 페이지를 구별하는 것입니다.
laravel에서 작성한 코드는 내 비즈니스 로직 중 일부를 삭제했습니다. 개요를 볼 수 있습니다.

<code><?php
class WeiXinController extends BaseController {
    /**
     * @name OAuth2.0获取openid和用户信息跳转(外部专用,网页授权地址必须写当前代码地址)
     * 该方法的作用是进行微信用户授权,获取微信code,假设此方法的url为:http://mysite.com/oauthtwo
     * 则所有的页面访问均通过该url跳转,可以通过在该url上添加参数的形式来实现
     * 比如:在此url后添加type参数,通过判断type参数值跳转到不同的页面
     * 举例:http://mysite.com/oauthtwo?type=login
     * http://mysite.com/oauthtwo?type=signup
     * http://mysite.com/oauthtwo?type=play
     * http://mysite.com/oauthtwo?type=func1
     * @param string $url
     */
    public function oauthtwo(Request $request) {
        $redirectUrl = 'http://mysite.com/start';
        $redirectUrl = $redirectUrl . '?' . $_SERVER['QUERY_STRING'];// 取出参数并添加到跳转链接
        $redirectUrl = urlencode($redirectUrl);
        // 第一步:用户授权-跳转链接-获取到code
        $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->appid . '&redirect_uri=' . $redirectUrl . '&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';// 微信授权url
        
        return redirect($url);// 跳转到start方法
    }
    
    /**
     * 获取微信用户的openid和access_token,并判断type值跳转页面
     */
    public function start(Request $request) {
        // 第二步:通过code获取到openid和access_token(有效期两小时)
        $code = Input::get('code');
        $type = Input::get('type');
        $openid = Input::get('openid');
        $redirectUrl = 'http://mysite.com';// 设置一个默认跳转链接,后面专门写一个方法判断type值,获取需要跳转的链接
        $result = $this->getAccessToken($code);
        if ($result) {
            // 第三步:获取用户信息
            $result = $this->getUserInfo($result['openid'], $result['access_token']);
            // 第四步:跳转到访问页面链接,将用户openid写到url参数中
            $redirectUrl = $this->getRedirectUrl($type, $openid);//根据type值获取需要跳转的页面
        }
        
        return redirect($redirectUrl);
    }
    
    /**
     * 获取微信access_token
     * @return 成功返回结果,失败返回false
     */
    public function getAccessToken($code) {
        $getAccessTokenUrl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->appid . '&secret=' . $this->appsecret . '&code=' . $code . '&grant_type=authorization_code';
        $httpapi = new CommonHttpApi();
        $result = $httpapi->call($getAccessTokenUrl);
        
        return $result;
    }

    /**
     * 获取用户信息
     * @param unknown $openid
     * @param unknown $accessToken
     */
    public function getUserInfo($openid, $accessToken) {
        $getUserInfoUrl = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $accessToken . '&openid=' . $openid . '&lang=zh_CN';
        $httpapi = new CommonHttpApi();
        $result = $httpapi->call($getUserInfoUrl);
        
        return $result;
    }
}</code>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.