基於微信的考勤

基於微信考勤前提須要將用戶的微信號跟員工的工號綁定。git

考勤功能基於微信公共平臺的高級接口,有兩種方式實現考勤。json

A、基於生成帶參數二維碼接口:api

思路:建立臨時二維碼,設置有效期一分鐘。員工用微信掃描後,經過公共平臺將掃描的時間寫入考勤系統;微信

一、建立臨時ticket網絡

/**
     * 臨時Ticket
     */
    static public function getTmpTicket($expire_seconds,$scene_id){
        $access_token = WXUtil::getAccessToken();
        $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" . $access_token;
        $arr = array (
                'action_name' => 'QR_SCENE',
                'expire_seconds'=>$expire_seconds,//有效期
                'action_info' => array (
                        'scene' => array (
                                'scene_id' => $scene_id,
                        )
                )
        );
        $json = WXUtil::cPost($arr, $url);
        $arr = json_decode($json,true);
        if($arr['errcode']){
            file_put_contents('log', $arr['errcode'].$arr['errmsg']);
            return false;
        }
        return $arr['ticket'];
    }
二、獲得臨時二維碼
/**
     * 臨時Code
     */
    static public function getTmpCode($expire_seconds,$scene_id){
        if($ticket = self::getTmpTicket($expire_seconds,$scene_id)){
            $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$ticket;
            header("location:".$url);
        }else{
            echo 'fail';
        }
    }

三、用戶經過網絡獲得二維碼,用手機掃描,從而考勤。iphone

四、注意:要限制用戶在特定地點才能獲得二維碼。post

B、基於獲取用戶地理位置接口和百度地度接口url

思路:用戶打開公共號,微信會自動上傳用戶地理位置的經緯度,後臺再用戶的位置跟公司的位置對比,差距在有效範圍內,則打卡成功。spa

一、開啓獲取用戶地理位置接口code

image

二、後臺接收用戶的位置信息

$postObj = simplexml_load_string ( $postStr, 'SimpleXMLElement', LIBXML_NOCDATA );
$Event = $postObj->Event;
if ($Event == 'LOCATION'){
                /**/
      $Location_X = $postObj->Latitude;
      $Location_Y = $postObj->Longitude;
      $Label = $postObj->Precision;
      $p1 = array($Location_Y,$Location_X);                                                   
}
//取得公司的經緯度:$p2 = array();

三、計算員工位置與公司位置的距離

static public function getDistance($p1, $p2,$iphone = false) {//$p1:array:員工的經緯度,$p2:array:公司的經緯度
        $code_type = $iphone?'wgs84':'bd09ll';
        
        $p1 = implode ( $p1, ',' );
        $p2 = implode ( $p2, ',' );
        $p1 = trim ( $p1, ',' );
        $p2 = trim ( $p2, ',' );
        $url = "http://api.map.baidu.com/telematics/v3/distance?ak=E79adeedb7d81865f0671b92b0f0602b";//百度計算距離
        $url .= "&waypoints=" . $p1 . ";" . $p2;
        $url .= "&output=json";
        $url .= "&coord_type=".$code_type;
        $res = file_get_contents ( $url );
        $arr = json_decode ( $res,true );
        return $arr ['results'][0];
    }

四、若是兩點距離小於1千米,則打卡成功

相關文章
相關標籤/搜索