• 微信公众号实现扫码获取微信用户信息(网页授权)


    刚开始接触微信的时候一头雾水,领导想要一个扫码获取微信用户信息的功能,而且是扫的别人的二维码,我是一阵忙活啊。

    经过努力和尝试,终于功夫不负有心人啊,赶紧记录一下,我用的是thinkphp编写的。作者:悦~ 博客园地址:https://www.cnblogs.com/nuanai/

    第一步:就是二维码的生成  作者:悦~   网址:https://www.cnblogs.com/nuanai/

    1.首先要确定第一个二维码,因为既然是扫码,肯定是要第一个二维码的,也就是第一人才可以。我将第一个二维码的唯一值(id)设置成零,然后开始我的编写

    2.既然是二维码,我用了phpqrcode二维码生成插件,二维码的生成可以在本地编写,查看效果后再上传服务器。

    (1)从网上下载下phpqrcode插件包,将它放到thinkphp的文件里,路径如下:ThinkPHPLibraryVendor ,截图如下:

    (2)二维码的生成,在调用显示二维码的控制器的方法中调用这个插件包,然后设置下扫描后跳转的URL就好了,代码如下:

    $url ="http://www.baidu.com";
    $level=3;
    $size=4;
    Vendor('phpqrcode.phpqrcode');  //引入插件
    $errorCorrectionLevel = intval($level) ;//容错级别
    $matrixPointSize = intval($size);//生成图片大小
    //生成二维码图片
    $object = new QRcode();  
    $path = "Public/ER/1.png"; //本地文件存储路径
    $object->png($url, $path, $errorCorrectionLevel, $matrixPointSize, 2);
    

    这只是实现生成二维码并且可以进入二维码指定的网址,真正要实现的目的是扫带有参数的二维码,获取微信用户的信息

    下面就是怎么实现生成带有参数的二维码    作者:悦~   网址:https://www.cnblogs.com/nuanai/

    3.(1)要用到微信的网页授权,就要用到公众号的几个参数:1是AppID 2是AppSecret  这是公众号申请成功后分配下来的

    (2)利用这两个参数,然后再配合获取access_token的值就可以了

    代码如下(扫描后跳转到getUserInfo方法,并且把唯一键值传过去):

    $tid = 0;  //传值的参数
    $level=3;
    $size=4;
    Vendor('phpqrcode.phpqrcode');
    $errorCorrectionLevel = intval($level) ;//容错级别
    $matrixPointSize = intval($size);//生成图片大小
    //生成二维码图片
    $object = new QRcode();
    $path = "Public/ER/" . $tid . ".png"; //本地文件存储路径
    $object->png($url, $path, $errorCorrectionLevel, $matrixPointSize, 2);
    
    $appid='******';  //公众号唯一标识
    $redirect_uri = urlencode ( 'http://www.****.net/index.php/Admin/Sindex/getUserInfo?id='.$tid );  //这个是设置参数和授权后重定向的回调链接地址
    //snsapi_userinfo弹出授权页面,可通过openid拿到昵称、性别、所在地   snsapi_base ,不弹出授权页面,直接跳转,只能获取用户openid 
    $url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";  
    

    下面是写跳转后的操作    作者:悦~   网址:https://www.cnblogs.com/nuanai/

    (1)接收传过来的值

    (2)取得openid

    (3)根据全局access_token和openid查询用户信息  

    (4)将信息写入数据库

    获取openid或者其他的东西,用到下面的方法,可以快速截取到需要的东西

    function getJson($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
        return json_decode($output, true);
    }

     接下来就是将上面的步骤逐一实现,代码如下:

    public function getUserInfo()
    {
        $appid = "*****";  //公众号唯一标识
        $secret = "*****";  //应用秘钥
    		
        //$code是回调的时候地址上带的 只需要get方式接收就可以了
        $code = $_GET["code"];  
    
        //获取传过来的值
        $htjid = $_GET["id"];
    		
        //第一步:取得openid
        $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
        $oauth2 = $this->getJson($oauth2Url);
    		  
        //第二步:根据全局access_token和openid查询用户信息  
        $access_token = $oauth2["access_token"];  
        $openid = $oauth2['openid'];  
        $get_user_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
        $userinfo = $this->getJson($get_user_info_url);
    		
        //写入数据库微信用户
        M()->startTrans();//开启事务
        $n = M("zp_user"); //写入的表
    		
        $openid = $data['openid'] = $userinfo['openid'];  //微信用户openid
        $data['sex'] = $userinfo['sex'];  //性别 
        $data['headimgurl'] = $userinfo['headimgurl'];  //头像
        $data['province'] = $userinfo['province'];  //地区sheng
        $data['city'] = $userinfo['city'];  //地区shi
        $data['subscribe_time'] = time();  //时间
        $data['qr_scene'] = $htjid;  //传过的值
        $data['nickname'] = $userinfo['nickname'];  //昵称
        $z = $n->lock(true)->add($data);
        if(!$z)
        {
            M()->rollback();//回滚
            $this->error('添加错误!');
        }else{
            M()->commit();//事务提交
        }
    
    }    
    

     到此,就可以实现扫描二维码获取用户信息了,并且将用户信息写入数据库

    这是第一个二维码,生成后,就可以将id的参数值换成前面传过来的值,也就是扫码的值 $tid = 0; //传值的参数

    如果想要自己的二维码页面好看的话,比如想要把自己的微信昵称和二维码合成一张图片的话,也是可以实现的,这就要用到图片的合成了,下次再说吧。

     作者:悦~   网址:https://www.cnblogs.com/nuanai/

      

  • 相关阅读:
    How to Setup a Private Proxy Server on EC2 in Under 10 Minutes
    How to Create a Cron Job (Scheduled Task) for Your Website or Blog
    NPM, BOWER, GIT, AND BASH PROXY CONFIGURATIONS
    Android: 通过Runtime.getRuntime().exec调用底层Linux下的程序或脚本
    Proguard breaking audio file in assets or raw
    SOCKSify Ruby
    UNIX / Linux: 2 Ways to Add Swap Space Using dd, mkswap and swapon
    窗体之间传值的方法
    扩展方法,
    反射 type 的基本用法,动态加载插件
  • 原文地址:https://www.cnblogs.com/nuanai/p/10501946.html
Copyright © 2020-2023  润新知