自已建網站當前位置:首頁 > 自已建網站

龙8体育

現在微信應用的越來越廣泛,好多網站都已經有微信掃碼登錄的功能,本公司經過半個月的時終于完成了龙8体育:微信扫码关注公衆号登錄的功能,這裡做一些詳細的介紹。如果看不懂的可以提供有供人工指導。

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優化、南陽網站改版、 網頁設計、網頁制作 、南陽網站推廣