基于微信的考勤

基于微信考勤前提需要将用户的微信号跟员工的工号绑定。

考勤功能基于微信公共平台的高级接口,有两种方式实现考勤。

A、基于生成带参数二维码接口:

思路:创建临时二维码,设置有效期一分钟。员工用微信扫描后,通过公共平台将扫描的时间写入考勤系统;

1、创建临时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'];
    }
2、得到临时二维码
/**
     * 临时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';
        }
    }

3、用户通过网络得到二维码,用手机扫描,从而考勤。

4、注意:要限制用户在特定地点才能得到二维码。

B、基于获取用户地理位置接口和百度地度接口

思路:用户打开公共号,微信会自动上传用户地理位置的经纬度,后台再用户的位置跟公司的位置对比,差距在有效范围内,则打卡成功。

1、开启获取用户地理位置接口

image

2、后台接收用户的位置信息

$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();

3、计算员工位置与公司位置的距离

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];
    }

4、如果两点距离小于1公里,则打卡成功

转载于:https://www.cnblogs.com/zhrea/p/3521745.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值