基于微信考勤前提须要将用户的微信号跟员工的工号绑定。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
二、后台接收用户的位置信息
$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千米,则打卡成功