利用百度地圖制作微信掃碼現(xiàn)場簽到功能

功能步驟闡述:
1.后臺管理人員在后臺添加簽到地點
2.根據(jù)簽到地點生成現(xiàn)場簽到二維碼
3.在微信頁面上調(diào)用微信掃一掃功能羔挡,掃描簽到二維碼
4.百度定位纵顾,通過判斷用戶與簽到地點的距離伍茄,驗證簽到是否成功

步驟詳解:
1.在后臺添加簽到地點,因為涉及到第四步的距離換算施逾,所以添加簽到距離時敷矫,需要添加上地點的經(jīng)緯度例获,這里我用的是百度地圖提供的功能來獲取地點的經(jīng)緯度

<!doctype html>
<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <style type="text/css">
            #allmap {
                width: 100%;
                height: 300px;
                overflow: hidden;
                margin: 0;
                font-family: "微軟雅黑";
            }
            
            .btn {
                margin-top: 10px;
                text-align: center;
            }
        </style>
        <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=Zuhusm8MFk70SDW772VB0XBZY0us3xcZ"></script>
        <title>簽到地址</title>
    </head>

    <body>
        <div id="allmap"></div>
        <div class="btn">
            <button id="addr">確認(rèn)地址</button>
        </div>
        <script type="text/javascript">
            
            // 百度地圖API功能,創(chuàng)建地圖實例
            var map = new BMap.Map("allmap");
            //初始化地圖,設(shè)置中心點坐標(biāo)和地圖級別曹仗,級別3-18
            var point = new BMap.Point(106.461248, 29.538835);
            map.centerAndZoom(point, 16);
            //允許地圖縮放
            map.enableScrollWheelZoom(true);
            //點擊事件榨汤,點擊地圖選址
            map.addEventListener("click", function(e) {
                point = e.point;
                if(point) {
                    //清除地圖上的遮擋物,這里主要清除上次點擊的地點
                    map.clearOverlays();
                    //地圖標(biāo)點
                    map.addOverlay(new BMap.Marker(point));
                } else {
                    alert("您選擇地址沒有解析到結(jié)果!");
                }
            });
            
            var btn = document.getElementById("addr");
            //通過點擊確認(rèn)按鈕獲取最后選擇的地址經(jīng)緯度
            btn.addEventListener("click", function() {
                alert('您選擇的位置為:' + point.lng + ',' + point.lat);
            });
        </script>
    </body>

</html>

2.生成二維碼
我用的是phpqrcode.php
官網(wǎng):http://phpqrcode.sourceforge.net/
下載地址:https://sourceforge.net/projects/phpqrcode/files/
這里貼出生成帶logo的二維碼代碼

<?php
include 'phpqrcode.php'; //請到官網(wǎng)下載
$value = ''; //二維碼內(nèi)容整葡,URL地址需要用微信網(wǎng)頁授權(quán)的地址件余,為后面獲取openid做準(zhǔn)備 
$errorCorrectionLevel = 'L';//容錯級別 L M Q H
$matrixPointSize = 6;//生成圖片大小 1-10
//生成二維碼圖片 
QRcode::png($value, './temp/qrcode.png', $errorCorrectionLevel, $matrixPointSize, 2); 
$logo = './temp/logo.png';//準(zhǔn)備好的logo圖片 
$QR = './temp/qrcode.png';//已經(jīng)生成的原始二維碼圖 
  
if ($logo !== FALSE) { 
 $QR = imagecreatefromstring(file_get_contents($QR)); 
 $logo = imagecreatefromstring(file_get_contents($logo)); 
 $QR_width = imagesx($QR);//二維碼圖片寬度 
 $QR_height = imagesy($QR);//二維碼圖片高度 
 $logo_width = imagesx($logo);//logo圖片寬度 
 $logo_height = imagesy($logo);//logo圖片高度 
 $logo_qr_width = $QR_width / 5; 
 $scale = $logo_width/$logo_qr_width; 
 $logo_qr_height = $logo_height/$scale; 
 $from_width = ($QR_width - $logo_qr_width) / 2; 
 //重新組合圖片并調(diào)整大小 
 imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, 
 $logo_qr_height, $logo_width, $logo_height); 
} 
//輸出圖片 
imagepng($QR, 'helloweba.png'); 
echo '![](helloweba.png)'; 
?>

3.微信頁面調(diào)用微信掃一掃
詳情查看微信的官方文檔:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

<?php
require_once "jssdk.php";//這個類上面的文檔連接里有下載
$jssdk = new JSSDK("yourAppID", "yourAppSecret");
$signPackage = $jssdk->GetSignPackage();
?>
    <!DOCTYPE html>
    <html lang="en">

    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>

    <body>

    </body>
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    <script>
        wx.config({
            debug: true, //開啟時,會彈出調(diào)試信息遭居,正式上線時啼器,關(guān)閉就好了,默認(rèn)為關(guān)閉的
            appId: '<?php echo $signPackage["appId"];?>',
            timestamp: <?php echo $signPackage["timestamp"];?>,
            nonceStr: '<?php echo $signPackage["nonceStr"];?>',
            signature: '<?php echo $signPackage["signature"];?>',
            jsApiList: [
                // 所有要調(diào)用的 API 都要加到這個列表中
                'scanQRCode'
            ]
        });
        wx.ready(function() {
            // 在這里調(diào)用 API
            wx.scanQRCode({
                needResult: 0, // 默認(rèn)為0俱萍,掃描結(jié)果由微信處理端壳,1則直接返回掃描結(jié)果,
                scanType: ["qrCode", "barCode"], // 可以指定掃二維碼還是一維碼枪蘑,默認(rèn)二者都有
                success: function(res) {
                    var result = res.resultStr; // 當(dāng)needResult 為 1 時损谦,掃碼返回的結(jié)果
                    //alert(result);

                }
            });
        });
    </script>

    </html>

4.百度地圖定位,判斷距離簽到是否成功

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=Zuhusm8MFk70SDW772VB0XBZY0us3xcZ"></script>
        <title>自愿者簽到</title>
    </head>

    <body>
        <div id="allmap"></div>
    </body>
    <script src="__PUBLIC__/cqlibWechat/js/jquery-3.2.1.min.js" ></script>
    <script src="__PUBLIC__/cqlibWechat/libs/layer/layer.js"></script>
</html>
<script type="text/javascript">
    // 百度地圖API功能
    var map = new BMap.Map("allmap");
    //map.centerAndZoom("成都市", 12); //初始化地圖,設(shè)置城市和地圖級別岳颇。
    var pointA = new BMap.Point(104.066867,30.555257);//云華路333號照捡,簽到地址
        
    var openid = "{$openid}";//獲取openid,確定簽到的人
    var geolocation = new BMap.Geolocation();
    
        //瀏覽器定位,用手機(jī)查看網(wǎng)頁更準(zhǔn)確點→_→
    geolocation.getCurrentPosition(function(r) {
        if(this.getStatus() == BMAP_STATUS_SUCCESS) {
            var pointB = new BMap.Point(r.point.lng, r.point.lat);
            //alert('您的位置:' + r.point.lng + ',' + r.point.lat);
            //換算兩點間的距離
            var jl = (map.getDistance(pointA, pointB)).toFixed(2);
            if(jl>1000){
                layer.msg(openid+"距離簽到地點過大");
            }else{
                layer.msg(openid+"簽到成功");
            }
            //var polyline = new BMap.Polyline([pointA, pointB], {
            //  strokeColor: "blue",
            //  strokeWeight: 6,
            //  strokeOpacity: 0.5
            //}); //定義折線
            //map.addOverlay(polyline); //添加折線到地圖上
        } else {
            alert('failed' + this.getStatus());
        }
    }, {
        enableHighAccuracy: true
    })
    //關(guān)于狀態(tài)碼
    //BMAP_STATUS_SUCCESS   檢索成功话侧。對應(yīng)數(shù)值“0”栗精。
    //BMAP_STATUS_CITY_LIST 城市列表。對應(yīng)數(shù)值“1”瞻鹏。
    //BMAP_STATUS_UNKNOWN_LOCATION  位置結(jié)果未知悲立。對應(yīng)數(shù)值“2”。
    //BMAP_STATUS_UNKNOWN_ROUTE 導(dǎo)航結(jié)果未知新博。對應(yīng)數(shù)值“3”薪夕。
    //BMAP_STATUS_INVALID_KEY   非法密鑰。對應(yīng)數(shù)值“4”赫悄。
    //BMAP_STATUS_INVALID_REQUEST   非法請求原献。對應(yīng)數(shù)值“5”。
    //BMAP_STATUS_PERMISSION_DENIED 沒有權(quán)限埂淮。對應(yīng)數(shù)值“6”嚼贡。(自 1.1 新增)
    //BMAP_STATUS_SERVICE_UNAVAILABLE   服務(wù)不可用。對應(yīng)數(shù)值“7”同诫。(自 1.1 新增)
    //BMAP_STATUS_TIMEOUT   超時粤策。對應(yīng)數(shù)值“8”。(自 1.1 新增)
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末误窖,一起剝皮案震驚了整個濱河市叮盘,隨后出現(xiàn)的幾起案子秩贰,更是在濱河造成了極大的恐慌,老刑警劉巖柔吼,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毒费,死亡現(xiàn)場離奇詭異,居然都是意外死亡愈魏,警方通過查閱死者的電腦和手機(jī)觅玻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來培漏,“玉大人溪厘,你說我怎么就攤上這事∨票” “怎么了畸悬?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長珊佣。 經(jīng)常有香客問我蹋宦,道長,這世上最難降的妖魔是什么咒锻? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任冷冗,我火速辦了婚禮,結(jié)果婚禮上惑艇,老公的妹妹穿的比我還像新娘蒿辙。我一直安慰自己,他們只是感情好敦捧,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碰镜,像睡著了一般兢卵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绪颖,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天秽荤,我揣著相機(jī)與錄音,去河邊找鬼柠横。 笑死窃款,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牍氛。 我是一名探鬼主播晨继,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搬俊!你這毒婦竟也來了紊扬?” 一聲冷哼從身側(cè)響起蜒茄,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎餐屎,沒想到半個月后檀葛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡腹缩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年屿聋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片藏鹊。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡润讥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伙判,到底是詐尸還是另有隱情象对,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布宴抚,位于F島的核電站勒魔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏菇曲。R本人自食惡果不足惜冠绢,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望常潮。 院中可真熱鬧弟胀,春花似錦、人聲如沸喊式。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岔留。三九已至夏哭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間献联,已是汗流浹背竖配。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留里逆,地道東北人进胯。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像原押,于是被迫代替她去往敵國和親胁镐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,322評論 25 707
  • 很多人喜歡看書,但是閱覽速度卻是不一希停。對于想要一目十行快速瀏覽文字的人來說烁巫,下面這個方法可以參考一下。 舒爾特表 ...
    文森古堡閱讀 364評論 0 1
  • 原來她愛的只是自己而已宠能,我只不過是揮之即來呼之即去的人 自己還傻乎乎地以為她需要我 她只是需要一個陪在她身邊的人而...
    牛肉丸閱讀 152評論 0 1
  • 我叫張小明违崇,是一名資深的游戲玩家阿弃。今天是5月20號,在這個愉快的節(jié)日里羞延,我要遇見女神渣淳,表白女神,迎娶女神伴箩,從此幸福...
    sincillin閱讀 393評論 1 0