<?php /** * 增加用户,对于程序设计,走的是修改逻辑 */ include "Common/JsonResponse.php"; include "Common/mysqlHelper.php"; include "Common/WechatHelper.php"; include "Common/Encrypter.php"; // 验证注册通道 isStopSign(); // 头像,姓名必填 if (!isset($_POST['realname']) || !isset($_POST['mediaId'])) { JsonResponse::error('姓名或照片不能为空'); } // 坐标不能为空 if (!isset($_POST['latitude']) || !isset($_POST['longitude'])) { JsonResponse::error('用户坐标不能为空'); } // 登录验证,验证cookie是否有openid,没有前端走微信openid获取流程 if (!isset($_COOKIE['openid'])) { JsonResponse::error('进入姿势不对?'); } // 年会签到地址 $config = include('Common/config.php'); $partyLat = $config['latitude']; $partyLng = $config['longitude']; $distance = getDistance($partyLng, $partyLat, $_POST['longitude'], $_POST['latitude']); // 签掉距离不能大于200m,配置文件设置 if ($distance > $config['distance']) { JsonResponse::error('不在签到范围内'); } // 姓名唯一 $realname = $_POST['realname']; $mysql = new mysqlHelper(); $data = $mysql->fetch("SELECT id FROM user WHERE realname = ?", [ $realname ]); if ($data) { JsonResponse::error("Hello {$_POST['realname']} ,你的姓名重复了"); } // 获取头像数据,从微信临时素材图片中。 $wechat = new WechatHelper(); $img = $wechat->getMedia($_POST['mediaId']); // 保存图片 $filename = time() . rand(1000,9999) . ".jpg"; $tarfilename = "/party/upload/" .$filename; $dir = str_replace('\\','/',realpath(dirname(__FILE__).'/')); $dir = rtrim($dir, '/party/phpapi/'); $fp = fopen($dir . $tarfilename, "w"); fwrite($fp, $img); fclose($fp); // 组装新增用户需要的数据 $params[] = $_POST['realname']; $params[] = 'http://' . $_SERVER['SERVER_NAME'] . $tarfilename; // 这里openid解密 $enctypt = new Encrypter(); $params[] = $enctypt->decrypt($_COOKIE['openid']); $time = time(); // pdo保存数据 $updateSql = "UPDATE user SET realname = ?, headimg = ?, `status` = 1, created = {$time} WHERE openid = ?;"; $rowCount = $mysql->update($updateSql, $params); if ($rowCount) { JsonResponse::result(['distance' => $distance]); } else { JsonResponse::error('报名失败'); } function rad($dis) { return round($dis * (3.1415926535898 / 180), 6); } // 计算距离 function getDistance($lat1, $lng1, $lat2, $lng2) { $lat1 = round($lat1, 6); $lng1 = round($lng1, 6); $lat2 = round($lat2, 6); $lng2 = round($lng2, 6); $radLat1 = rad($lat1); $radLat2 = rad($lat2); $a = $radLat1 - $radLat2; $b = rad($lng1) - rad($lng2); $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))); $s = round($s * 6378137, 0); return $s; } // 验证注册通道是否关闭 function isStopSign() { $mysql = new mysqlHelper(); $data = $mysql->fetch("SELECT `value` FROM `setting` WHERE `key` = 'isStopSign' AND `value` = 1"); if ($data) { JsonResponse::error("注册通道已经关闭,自己人联系颖慧"); } }