自已建网站当前位置:首页 > 自已建网站

微信扫码关注公众号登录

现在微信应用的越来越广泛,好多网站都已经有微信扫码登录的功能,本公司经过半个月的时终于完成了微信扫码关注公众号登录的功能,这里做一些详细的介绍。如果看不懂的可以提供有供人工指导。

1.           设置微信开发基本配置(APPSECRETIP白名单)

1)  .APPSECRET

APPSECRET是所有调用微信接口需要用到到开发密码,至关重要生成/重置后要复制出来记在文档上,开发密码不能随便发

2)  IP白名单

IP白名单限制调用微信接口的IP,在白名单中才可以调用微信接口

3)  授权域名

在微信公众号首页->公众号设置->功能设置,打开后填写授权域名,不填写部分微信接口受限不能正常使用

至此配置完上面三步微信接口都能调用,但是需要微信服务器返回数据的接口不能返回数据或者说是返回的数据没有返回地址,

2.           在公众号配置服务器接收微信返回数据

1)  .在基本配置中找到服务器配置,点击修改配置,

1)  程序向微信发送消息

我们接收微信服务器发送过来的数据格式是xml,当我们想向微信服务器发送消息时数据格式也要是xml的格式

①.  在接收微信推送数据的方法responseMsg中先以字符串预编译一个xml数据格式

$textTpl = "<xml>

       <ToUserName><![CDATA[%s]]></ToUserName>

        <FromUserName><![CDATA[%s]]></FromUserName>

<CreateTime>%s</CreateTime>

<MsgType><![CDATA[%s]]></MsgType>

<Content><![CDATA[%s]]></Content>

<FuncFlag>0</FuncFlag>

</xml>";

②.    参数 $textTpl  xml数据模板,$fromUsername 来自哪个用户(openid),$toUsername(发送给谁),$time发送时间,$msgType 消息类型,$contentStr 消息内容

:$fromUsername$toUsername接收和发送是相反的,这两个属性大概意思就是告诉微信服务器某个用户发送一条信息给某个公众号,反过来就是某个公众号发送消息给某个用户

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr)  

//将数据编译进xml模板

echo $resultStr;//xml数据包发送给微信用户

2)     扫码关注登录实现思路

①.  根据AppIDAppSecret获取access_token

②.  请求”https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$this->accessToken;

参数为场景值(根据个人需求传参),二维码生效时间(最低一分钟)等获取一个二维码和换取二维码的ticket

③.  请求"https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$ticket;换取二维码图片路径

④.  将二维码图片路径放入<img src=二维码图片路径> 在此页面使用js定时函数setInterval("checkLogin()", 2000);循环调用checkLogin()函数,该函数内部为请求查询数据库是否有和页面二维码场景值想同的值即为成功返回true到此页面,返回前调用方法将查询到的场景值删除,场景值最好使用不会重复的值较好,

⑤.  当扫码二维码时公众号推送的数据消息类型为event,

未关注时,事件类型为subscribe,

将推送数据$fromUsername(谁触发事件就为谁的openid)根据openid请求https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->accessToken."&openid=".$openId."&lang=zh_CN"获取该openid在此公众号下所有的信息,将程序需要的信息和$eventKey一起存入数据库,

已关注时事件类型为SCAN,

将推送数据$fromUsername(谁触发事件就为谁的openid),将此openid作为条件查询数据库是否存在此数据,如果存在修改eventKey字段为新的$eventKey,如果不存在就推送重新关注公众号内容到该用户,

⑥这时数据库存放有扫码的场景值,二维码页面也存有二维码的场景值,在页面通过定时函数不断请求查询数据是否有相同的,如果有就将场景值修改为空并返回给页面true页面js判断是否成功,成功提示成功且跳转到用户信息页面,不成功则继续请求查询数据库


下面是部分核心代码:


首页二维码展示

<?php

         header("Content-type:text/html;charset=utf-8");

 

         require_once('WeChat.class.php');

         $WeChat = new WeChat();

         $scene_str = $WeChat->create_guid(); //"lrfun" . 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="js/jquery.min.js"></script>

<script type="text/javascript">

alert("进来了");

         setInterval("checkLogin()", 2000); //1秒发送一次请求

         function checkLogin(){     

                   $.post("checkLogin.php", {scene_str:"<?=$scene_str ?>"}, function(data){

                            alert("正在登录中"+data);

                            if(data){

                                     //做逻辑判断,登录跳转

                                     alert(data+"登录成功!");

                                     window.location.href="callBack.php";

                            }

                   },"Json");

         }

</script>

登录查询数据库

<?php

require_once('WeChat.class.php');

$WeChat = new WeChat();

$scene_str=$_POST['scene_str'];

         if(isset($scene_str)){

                   //根据scene_str查询数据库,是否有此记录

         $sql="select * from fa_ceshi where eventKey='$scene_str'";

         $req=mysqli_query($WeChat->conn(),$sql);

         if($row=mysqli_fetch_array($req)){

        $WeChat->updateEventKey($row['openid']);

                  

                   echo 'true';

         }else{

                   echo 'false';

         }

         }

         ?>

登录成功人员信息展示

<?php

         header("Content-type:text/html;charset=utf-8");

         require_once('WeChat.class.php');

         $WeChat = new WeChat();

        

                  

         echo "openid".$_COOKIE["openid"];

         echo "姓名:".$_COOKIE["nickname"];

         echo "<br/><img src='".$_COOKIE['headimgurl']."'>";

?>

微信服务器验证代码和接收推送数据

<?php

//将服务器配置url指向此文档,下载官方demo进行验证验证成功后删除

//define("TOKEN", "wxtoken");//验证时打开,接收推送数据时注释

         require_once('WeChat.class.php');

         $WeChat = new WeChat();

         $WeChat->responseMsg();//验证时注释,接收推送数据时打开

//$WeChat->valid();//验证时打开,接收推送数据时注释

 

咨询热线

13782190467

联系人:杜经理

手 机:13782190467

邮 箱:13782190467@139.com

企宣部:南阳中关村创新创业中心

运维部:新市政府市民服务中心众创空间

实践中心:南阳理工学院B区三融科技联盟

西峡、淅川、内乡、镇平、邓州、唐河、桐柏、社旗、方城、南召、唐河、油田、南阳、新野、网站制作、南阳网络推广、网站建设、南阳seo优化、南阳网站改版、 网页设计、网页制作 、南阳网站推广