CommonController.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\FrontController;
  4. use App\Jobs\BarrageJob;
  5. use App\Models\AgencySet;
  6. use App\Models\Config;
  7. use App\Models\Region;
  8. use App\Servers\CommonServer;
  9. use App\Servers\ShopServer;
  10. use App\Servers\SmsServer;
  11. use App\Servers\TxMapServer;
  12. use App\Servers\WeixinServer;
  13. use Illuminate\Contracts\Routing\ResponseFactory;
  14. use Illuminate\Http\Request;
  15. use Illuminate\Support\Facades\Storage;
  16. class CommonController extends FrontController
  17. {
  18. public function __construct()
  19. {
  20. parent::__construct();
  21. }
  22. function index()
  23. {
  24. dd(565654541);
  25. }
  26. /**
  27. * 获取城市列表
  28. * @return \Illuminate\Http\JsonResponse
  29. */
  30. function city()
  31. {
  32. $p_id = request()->input('p_id', 0);
  33. $list = Region::where('p_id', $p_id)->select(['id', 'name'])->get();
  34. return $this->apiResponseSuccess('获取数据成功', $list);
  35. }
  36. /**
  37. * 发送短信
  38. * @return \Illuminate\Http\JsonResponse
  39. * @throws \End01here\EasySms\Exceptions\CodeErrorException
  40. * @throws \End01here\EasySms\Exceptions\GatewayErrorException
  41. * @throws \End01here\EasySms\Exceptions\MessageException
  42. */
  43. function sendSms()
  44. {
  45. $phone = request()->input('phone', '');
  46. $send_type = request()->input('send_type', 'default');
  47. if (empty($phone)) {
  48. return $this->apiResponseError('请输入手机号码');
  49. }
  50. $send_server = SmsServer::creatServer();
  51. $ret = $send_server->sendCode($phone, $send_type);
  52. if (!$ret) {
  53. return $this->apiResponseError($send_server->getErrorMsg() ?: '短信发送失败');
  54. } else {
  55. return $this->apiResponseSuccess('短信发送成功');
  56. }
  57. }
  58. /**
  59. * base64 图片上传
  60. * @param Request $request
  61. * @return \Illuminate\Http\JsonResponse
  62. */
  63. public function base64Image(Request $request)
  64. {
  65. $result = $this->base64ToImage($request->input('image', ""), 'attest');
  66. if ($result['code'] === false) {
  67. return $this->apiResponseError('图片上传失败');
  68. } else {
  69. if ($result) {
  70. return $this->apiResponseSuccess('图片上传成功', ['url' => $result['url']]);
  71. } else {
  72. return $this->apiResponseError('图片上传失败');
  73. }
  74. }
  75. }
  76. // base64图片保存
  77. protected function base64ToImage($base64ImageContent, $path)
  78. {
  79. $base64_image_content = $base64ImageContent;
  80. if (!empty($base64_image_content)) {
  81. $upload_path = "storage" . DIRECTORY_SEPARATOR . $path . DIRECTORY_SEPARATOR . date('Ymd', time()) . DIRECTORY_SEPARATOR;
  82. $img_url = md5(uniqid() . time()) . '.jpg';
  83. $upload_path1 = public_path($upload_path);
  84. if (!is_dir($upload_path1)) {
  85. mkdir($upload_path1, 0777, true);
  86. }
  87. try {
  88. $base64_image_content = str_replace('[removed]', '', $base64_image_content);
  89. preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result);
  90. // oss 上传
  91. $oss = Storage::disk('oss');
  92. $pathA = "{$upload_path}{$img_url}";
  93. if (empty($result[1])) {
  94. $update = $oss->put($pathA, base64_decode($base64_image_content));
  95. if (!$update) { // 如果失败上传本地
  96. file_put_contents($upload_path1 . $img_url, base64_decode($base64_image_content));
  97. }
  98. } else {
  99. $update = $oss->put($pathA, base64_decode(str_replace($result[1], '', $base64_image_content)));
  100. if (!$update) { // 如果失败上传本地
  101. file_put_contents($upload_path1 . $img_url, base64_decode(str_replace($result[1], '', $base64_image_content)));
  102. }
  103. }
  104. return [
  105. 'code' => true,
  106. 'url' => $update ? ($oss->url($pathA) . '?x-oss-process=image/auto-orient,1/quality,q_90') : asset($pathA),
  107. ];
  108. } catch (\Exception $e) {
  109. return [
  110. 'code' => false,
  111. 'msg' => "图片错误" . $e->getMessage() . " " . $e->getLine(),
  112. ];
  113. }
  114. } else {
  115. return [
  116. 'code' => false,
  117. 'msg' => "请上传图片",
  118. ];
  119. }
  120. }
  121. /**
  122. * @param Request $request
  123. * @param ResponseFactory $response
  124. * @return mixed
  125. * 单图上传
  126. */
  127. public function fileImage()
  128. {
  129. if (request()->isMethod('post')) {
  130. if (request()->hasFile('file_image')) {
  131. // 文件后缀判断
  132. $ext = request()->file("file_image")->extension();
  133. if (!in_array($ext, ["jpg", "jpeg", "gif", "png", "bmp", "webp"])) {
  134. return $this->apiResponseError('上传图片仅支持png、jpg、jpeg、gif、bmp、webp后缀');
  135. }
  136. // 文件大小是否满足 2M = 2*1024*1024 B
  137. if (request()->file("file_image")->getClientSize() > 20971552) {
  138. return $this->apiResponseError('上传图片大小超过5M');
  139. }
  140. // 上传过程是否出错
  141. if (!request()->file("file_image")->isValid()) {
  142. return $this->apiResponseError('上传文件出错,请重试');
  143. }
  144. // 文件保存 生成一个唯一的文件名称
  145. $fileName = time() . str_random(4) . mt_rand(1000, 9999) . ".{$ext}";
  146. $pathA = 'image/' . date('y-m', time()) . '/' . $fileName;
  147. // oss 上传图片
  148. $oss = Storage::disk('oss');
  149. $update = $oss->put($pathA, file_get_contents(request()->{'file_image'}->getRealPath()));
  150. if ($update) {
  151. return $this->apiResponseSuccess('图片上传成功', ['url' => $oss->url($pathA)]);
  152. } else {
  153. return $this->apiResponseError('图片上传保存失败,请重试');
  154. }
  155. } else {
  156. return $this->apiResponseError('请上传图片文件');
  157. }
  158. }
  159. }
  160. /**
  161. * 获取JS签名信息
  162. * @return \Illuminate\Http\JsonResponse
  163. */
  164. function getJsConfig()
  165. {
  166. $url = request()->input('url');
  167. $ret = WeixinServer::creatServer()->getJsConfig($url);
  168. return $this->apiResponseSuccess('获取信息成功', $ret);
  169. }
  170. /**
  171. * 获取系统简介
  172. * @return \Illuminate\Http\JsonResponse
  173. */
  174. function getSysMessage()
  175. {
  176. $type = request()->input('type', '1');
  177. $v = Config::where('key', 'about_us')->value('value');
  178. return $this->apiResponseSuccess('获取信息成功', $v);
  179. }
  180. /**
  181. * 获取定位信息
  182. */
  183. function getLocation()
  184. {
  185. $ip = CommonServer::creatServer()->getClientIp();
  186. $location = TxMapServer::creatServer()->getLocation($ip);
  187. if ($location['status'] === 0) {
  188. $data = $location['result']['location'];
  189. $address = TxMapServer::creatServer()->getLocationAddress($data['lat'], $data['lng']);
  190. if ($address['status'] != 0) {
  191. return $this->apiResponseError('定位失败');
  192. }
  193. $data['addr'] = $address['result']['address'];
  194. return $this->apiResponseSuccess('获取信息成功', $data);
  195. } else {
  196. return $this->apiResponseError('定位错误');
  197. }
  198. }
  199. /**
  200. * 根据经纬度获取地址信息
  201. * @return \Illuminate\Http\JsonResponse
  202. */
  203. function getLocationAddress()
  204. {
  205. $data['lat'] = request()->input('lat');
  206. $data['lng'] = request()->input('lng');
  207. if (empty($data['lat']) || empty($data['lng'])) {
  208. return $this->apiResponseError('缺少必要参数');
  209. }
  210. $address = TxMapServer::creatServer()->getLocationAddress($data['lat'], $data['lng']);
  211. if ($address['status'] != 0) {
  212. return $this->apiResponseError('定位失败');
  213. }
  214. $data['addr'] = $address['result']['address'];
  215. return $this->apiResponseSuccess('获取信息成功', $data);
  216. }
  217. /**
  218. * 获取阿里云临时权限
  219. * @return \Illuminate\Http\JsonResponse
  220. */
  221. function getAliSts()
  222. {
  223. $ret = CommonServer::creatServer()->getAliSts();
  224. if (empty($ret['code'])) {
  225. return $this->apiResponseError($ret['msg']);
  226. } else {
  227. return $this->apiResponseSuccess($ret['msg'], $ret['data']);
  228. }
  229. }
  230. /**
  231. * 获取隐私协议
  232. * @return \Illuminate\Http\JsonResponse
  233. */
  234. function getPrivacyInfo()
  235. {
  236. $info = Config::where('key', 'privacy_protocol')->value('value');
  237. return $this->apiResponseSuccess('获取成功', $info);
  238. }
  239. }