返回
快速导航关闭
当前搜索
网站分类
栏目推荐
实用工具
热门标签
子分类:
创奇学院 >微信 >公众号 >公众号引流 » 正文

公众号怎么开通,微信24小时人工申诉,PHP扫描二维码实现关注微信公众号并自动登录网站

公众号引流 更新时间: 发布时间: 公众号引流归档 最新发布 网站地图

场景:用户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录。

逻辑:

  1.首先,您需要登录微信公众平台,并设置好开发基本配置。在基本配置下,查看并记录下您的AppID和AppSecret。您还需要设置好回调URL和Token。注意,如果您使用的是测试账号,可能需要填写一个临时AppID。

  2.使用微信公众平台提供的接口,您可以生成一个带有自定义唯一参数的临时二维码。这个参数可以在后续的步骤中使用。

  3.用户使用微信扫描您生成的二维码,并关注您的公众号。此时,微信服务器会将一些数据(包括自定义参数和OpenID)返回给您的服务器。

  4.您的服务器使用OpenID向微信服务器请求用户信息。如果您的公众号绑定了微信开放平台,还可以获取到用户的UnionID(若绑定了微信开放平台,则有此参数)。将返回的用户信息存储到数据库中,用于登录。

5.当用户再次访问您的网站时,您的服务器会检查数据库中是否存在该用户的记录。如果存在,您可以使用存储的用户信息自动登录用户。

  准备工作:登录微信公众平台,在基本配置下,查看appid和设置appsecret、回调URL、token,小编这里使用的是测试账号,如下图:

开发者工具页面

测试号管理页面

  下面直接贴上小编写的一个类WeChat.class.php:

Class WeChat{     
    protected $appid;    protected $secret;    protected $accessToken;     
    function __construct(){        $this->appid       = "xxx";        $this->secret      = "xxx";        $this->accessToken = $this->getAccessToken();
    }     
    /***
     * 获取access_token
     * token的有效时间为2小时,这里可以做下处理,提高效率不用每次都去获取,
     * 将token存储到缓存中,每2小时更新一下,然后从缓存取即可
     * @return
     **/    private function getAccessToken(){
        url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->secret;
        $res = json_decode($this->httpRequest($url),true);        return $res['access_token'];
    }     
    /***
     * POST或GET请求
     * @url 请求url
     * @data POST数据
     * @return
     **/    private function httpRequest($url, $data = ""){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);        if(!empty($data)){  //判断是否为POST请求
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);        return $output;
    }     
    /***
     * 获取openID和unionId
     * @code 微信授权登录返回的code
     * @return
     **/    public function getOpenIdOrUnionId($code){
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->secret."&code=".$code."&grant_type=authorization_code";
        $data = $this->httpRequest($url);        return $data;
    }     
    /***
     * 通过openId获取用户信息
     * @openId
     * @return
     **/    public function getUserInfo($openId){
        $url  = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->accessToken."&openid=".$openId."&lang=zh_CN";
        $data = $this->httpRequest($url);        return $data;
    }     
    /***
     * 发送模板短信
     * @data 请求数据
     * @return
     **/    public function sendTemplateMessage($data = ""){
        $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$this->accessToken;
        $result = $this->httpRequest($url, $data);        return $result;
    }     
    /***
     * 生成带参数的二维码
     * @scene_id 自定义参数(整型)
     * @return
     **/    public function getQrcode($scene_id){
        $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$this->accessToken;
        $data = array(            "expire_seconds" => 3600, //二维码的有效时间(1小时)            "action_name" => "QR_SCENE",  //临时的整型参数值            "action_info" => array("scene" => array("scene_id" => $scene_id))
        );
        $result = $this->httpRequest($url, json_encode($data));        return $result;
    }     
    /***
     * 生成带参数的二维码
     * @scene_str 自定义参数(字符串)
     * @return
     **/    public function getQrcodeByStr($scene_str){
        $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$this->accessToken;
        $data = array(            "expire_seconds" => 3600, //二维码的有效时间(1小时)            "action_name" => "QR_STR_SCENE",  //临时的字符串参数值            "action_info" => array("scene" => array("scene_str" => $scene_str))
        );
        $result = $this->httpRequest($url, json_encode($data));        return $result;
    }     
    /**
     * 换取二维码
     * @ticket
     * @return
     */    public function generateQrcode($ticket){        return "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$ticket;
    }     
    /***
     * 回调函数
     **/    public function callback(){
        $callbackXml = file_get_contents('php://input'); //获取返回的xml        //下面是返回的xml        //<xml><ToUserName><![CDATA[gh_f40ce214c871]]></ToUserName> //微信公众号的微信号        //<FromUserName><![CDATA[oJxRO1Y6NgWJ9gMDyE3Lw6YUNdBs]]></FromUserName> //openid用于获取用户信息,做登录使用        //<CreateTime>1699336505</CreateTime> //回调时间        //<MsgType><![CDATA[event]]></MsgType>        //<Event><![CDATA[SCAN]]></Event>        //<EventKey><![CDATA[vipshare1699336505]]></EventKey> //上面自定义的参数(scene_str)        //<Ticket><![gQF68TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyR0Z6bFFRZy1lOEMxMDAwMGcwM2MAAgSvq0llAwQAAAAA]]></Ticket> //换取二维码的ticket        //</xml>
        $data = json_decode(json_encode(simplexml_load_string($callbackXml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); //将返回的xml转为数组        if(count($data)){
            $userInfo = $this->getUserInfo($data['FromUserName']); //获取用户信息            //这里把返回的数据写入数据库(注:务必将“EventKey”也存到数据表中,后面检测登录需用到此唯一值查询记录)            //用于前台做检测该用户扫码之后是否有关注公众号,关注了就自动登录网站            //原理:前台通过自定义的参数(最好设成值唯一)查询数据标是否有此记录,若有则登录。
        }
    }
}

  生成带参数的二维码index.php:

<?php
    header("Content-type:text/html;charset=utf-8");    require_once('WeChat.class.php');
    $WeChat = new WeChat();
    $scene_str = "vipshare1699336505"; //"vipshare" . time(); //这里建议设唯一值(如:随机字符串+时间戳)
    $result = json_decode($WeChat->getQrcodeByStr($scene_str), true);
    $qrcode = $WeChat->generateQrcode($result['ticket']); //生成二维码     
    echo "自定义参数:".$scene_str;    echo "<br/><img src="$qrcode">";
?>
<script type="text/javascript" src="http://www.vipshare8.com/statics/js/jquery.min.js"></script>
<script type="text/javascript">
    setInterval("checkLogin()", 2000); //每2秒发送一次请求    function checkLogin(){
        $.post("checkLogin.php", {scene_str:"<?=$scene_str?>"}, function(data){            if(data){                //做逻辑判断,登录跳转
            }
        },"Json");
    }
</script>

  回调函数 callback.php:

// 调取回调函数require_once('WeChat.class.php');
$WeChat = new WeChat();
$result = $WeChat->callback();

  检测是否登录 checkLogin.php:

if(isset($_POST['scene_str']) && $_POST['scene_str']){    //根据scene_str查询数据库,是否有此记录    echo "true";
}else{    echo "false";
}

  请注意,以上步骤仅提供了一个基本的实现思路。具体的实现细节可能因您的网站架构和技术选择而有所不同。此外,为了保护用户隐私和安全,您需要遵守相关法律法规和微信公众平台的开发规范。同时,为了确保功能的正常运行和用户体验,您还需要进行充分的测试和优化。

转载请注明:文章转载自 http://www.320g.com/
本文地址:http://www.320g.com/gzhyl/49252.html
考高分网交流群

扫一扫加入QQ交流群

和更多志同道合朋友一起交流,分享干货资料!
创奇学院客服

扫一扫加客服微信

有疑问请咨询创奇学院微信号,在线为您解答!
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 Copyright 320g.com Rights Reserved. Powered · 创奇学院

ICP备案号:陇ICP备2020003353号