laravel+guzzle微信网页授权登录

编程入门 行业动态 更新时间:2024-10-15 14:16:36

laravel+guzzle微信<a href=https://www.elefans.com/category/jswz/34/1771338.html style=网页授权登录"/>

laravel+guzzle微信网页授权登录

1 第一步:用户同意授权,获取code

2 第二步:通过code换取网页授权access_token

3 第三步:刷新access_token(如果需要)

4 第四步:拉取用户信息(需scope为 snsapi_userinfo)

1.因为没有直接操作公众号。所以在建立了视图login.为了调起用户授权,获取code


<html><head><title>login</title></head><body><div class="container"><input type="button" name="login" id="login" value="登录"></div><script src="{{asset('js/jquery-1.10.2.min.js')}}"></script><script>function getUrlParam(name) {var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");var r = window.location.search.substr(1).match(reg);if (r != null) return unescape(r[2]);return null;}$('#login').click(function (callback) {var appId = 'wxdecc14c9870858d6';var oauth_url = '';var url = "=" + appId + "&redirect_uri=" + oauth_url + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"

                // =wxdecc14c9870858d6&redirect_uri=;response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

                var code = getUrlParam("code");if (!code) {window.location = url;}else {console.log(code);$.ajax({type: 'POST',url: oauth_url,dataType: 'json',data: {code: code
                        },success: function (data) {if (data.code === 200) {callback(data.data)}},error: function (error) {throw new Error(error)}})}})</script></body>
</html>
2.安装guzzle依赖详细查看.html#installation;
3.获取access_token与openid;
private function Token($code){

        $appId = env('WECHAT_OFFICIAL_ACCOUNT_APPID');
        $secret = env('WECHAT_OFFICIAL_ACCOUNT_SECRET');

        $url = "=".$appId."&secret=".$secret."&code=".$code."&grant_type=authorization_code";

        $client = new GuzzleClient();

        $response = $client->get($url);

        $Tokendata =json_decode($response->getBody()->getContents());

        $token = $Tokendata->access_token;
        //echo token会报错
        echo "<p style='display: none;'>".$token."</p>";

        $openid = $Tokendata->openid;
        $comp = compact('token','openid');
        return $comp;

    }
//获取用户数据
 public function testindex(Request $request){
        $code = $request->code;
        //获取Token返回数据
        $comp =  $this->Token($code);

        $token = $comp['token'];
        $openid = $comp['openid'];

        $userinfo_url ="=".$token."&openid=".$openid."&lang=zh_CN";

        $client = new GuzzleClient();

        $response = $client->get($userinfo_url);
        $userinfo = json_decode($response->getBody()->getContents());
//        dd($userinfo);
        $unionid = $userinfo->unionid;
        $nickname = $userinfo->nickname;
        $sex = $userinfo->sex;
        $headimgurl = $userinfo->headimgurl;
//        echo "<p style='display: none;'>".$unionid.$sex.$nickname.$headimgurl."</p>";

        //判断数据是否存在用户
        $check_user = User::where('openId', $openid)->first();
        if (empty($check_user)){
            //不存在则存入用户数据
            $user = new User();
            $user->openId = $openid;
            $user->unionId = $unionid;
            $user->nickName = $nickname;
            $user->sex = $sex;
            $user->avatar = $headimgurl;
            $user->save();
            return response()->json([
                'status'=>1000,
                'msg'=>'success',
            ]);
        }else{
            return response()->json([
               'status'=>1001,
               'msg'=>'用户'.$nickname.'已存在',
            ]);
        }

    }
 

遇到的坑:

1.login的路由不能在微信开发工具调试,因为不能触发登录回调。需要把微信开发工具授权登录页的路由复制到微信客户端访问。

2.不知道是微信api的问题还是laravel dd()输出的原因。function Token()中

 $Tokendata =json_decode($response->getBody()->getContents());

这里有个bug:dd()输出的话,在苹果机中是可以打印出完整信息。但是在安卓机中一直显示code已经被使用。但是使用echo ,print_r()输出。无论在苹果机中还是安卓机中都是可以打印出完整的信息。所以在function Token()中需要加上以下语句。否则显示stdClass错误,原因不详。

echo "<p style='display: none;'>".$token."</p>";

 

 



更多推荐

laravel+guzzle微信网页授权登录

本文发布于:2024-03-07 20:28:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718843.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:网页   laravel   guzzle

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!