zoukankan      html  css  js  c++  java
  • 基于微信的考勤

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

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

    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公里,则打卡成功

  • 相关阅读:
    软件工程2019实践第一次作业
    Maven环境的搭建
    TomCat控制台中文乱码及IDEA设置为UTF-8
    将win10永久激活为专业工作站版(图文详细教程)
    [软件技巧]manjaro gnome中修改屏幕缩放比例
    第一次个人编程作业
    百度的TTS API
    第一次软件工程实践作业
    MySQL触发器的操作
    Anaconda使用conda activate激活环境报错Your shell has not been properly configured to use 'conda activate'.
  • 原文地址:https://www.cnblogs.com/zhrea/p/3521745.html
Copyright © 2011-2022 走看看