网站首页> 文章专栏> 通过pc端二维码,扫码微信登录第三方网站(微信开放平台)
通过pc端二维码,扫码微信登录第三方网站(微信开放平台)
编辑时间:2018-07-09 09:20:16 作者:mogo 浏览:961 评论:0

html代码

<a id="wechatImg" style="width: 45px;" href="javascript:showWechat('show');">

    <img  src="wechat.png" class="weixinimg">

</a>

<script>

    //这边我自己处理的是使用layui的弹出层显示图片。我就不改了直接放上来吧

   function  showWechat(type){

                //判断是否是手机

                $.post('/wechat',{

                    '_token':'{{csrf_token()}}'

                } ,function (res) {


                    var url = res.url;


                    layer.open({

                        type: 2,

                        title: '微信登录',

                        shadeClose: true,

                        shade: 0.8,

                        area: ['380px', '55%'],

                        content: url //iframe的url

                    });

                });

        }

</script>


<?php


class WeChatController

{

    /**

     * 显示微信图片(先请求这里)

     * @param Request $request

     * @return array

     */

    public function wechat(Request $request)

    {

        $state = time();

        $request->session()->put('state', $state);//详细查看文档,文档有具体说明 使用laravel,框架不一样保存不一样

        $redirect_uri = urlencode('回调地址');

        //第一次请求:获取code

        $newurl = 'https://open.weixin.qq.com/connect/qrconnect?appid=' . OPEN_APPID(获取) . '&redirect_uri=' . $redirect_uri . '&response_type=code&scope=snsapi_login&state=' . $state . '#wechat_redirect';

        return ['url' => $newurl]; //根据实际要求来哦

    }


    /**

     * 微信网页授权回调处理

     */

    public function callBack(Request $request)

    {

        if ($request->get('state') !=  $request->session()->get('state')) {

            return redirect('/login');//根据要求跳转吧。提示错误或者其他

        }

        $code = $request->get('code') ;//写死也可以都是code。


        //第二次请求:通过code换取网页授权access_token

        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' .  OPEN_APPID(获取) . '&secret=' WECHAT_SECRET(获取) . '&code=' . $code . '&grant_type=authorization_code';

        $json = $this->curl($url);

        //得到access_token 与 openid

        $arr = json_decode($json, 1);

        if( isset($arr['errcode']) ){

            return redirect('/gechat/login');

        }

        //第三次请求:拉取用户信息

        $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $arr['access_token'] . '&openid=' . $arr['openid'] . '&lang=zh_CN';


        $json = $this->curl($url);

        //得到用户资料

        $arr = json_decode($json, 1);


        //如果用户不存在的情况下生成账号,存在就直接登录

//根据实际需要来。生成唯一的oppenid

        

    }




    /**

     * curl

     * @param $url

     * @return mixed

     */

    public function curl($url)

    {

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

        curl_setopt($ch, CURLOPT_URL, $url);

        $result = curl_exec($ch);

        curl_close($ch);

        return $result;

    }


}


来说两句吧
最新评论