Bläddra i källkod

'0709-2253-c01'

zory 3 veckor sedan
förälder
incheckning
216fd828cb
4 ändrade filer med 218 tillägg och 0 borttagningar
  1. 63 0
      app/controller/v2/Portal.php
  2. 40 0
      app/controller/v2/Uploads.php
  3. 96 0
      app/controller/v2/User.php
  4. 19 0
      app/extra/weMini/UserInfo.php

+ 63 - 0
app/controller/v2/Portal.php

@@ -0,0 +1,63 @@
+<?php
+
+namespace app\controller\v2;
+
+use app\extra\basic\Base;
+use app\extra\service\blue\TaskService;
+use app\middleware\WxMiddleware;
+use app\model\blue\BlueBanner;
+use app\model\blue\BlueCategory;
+use DI\Attribute\Inject;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Middleware;
+use LinFly\Annotation\Route\Route;
+use support\Request;
+use support\Response;
+
+
+#[Controller(prefix: "/wx_v2/portal"),Middleware(WxMiddleware::class)]
+class Portal extends Base
+{
+
+
+    protected array $noNeedLogin = ['getPortal'];
+
+    #[Inject]
+    protected TaskService $service;
+
+    /**
+     * 小程序首页信息
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "home",methods: "get")]
+    public function getPortal(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "category.default"  => 0,
+                "size.default"      => 10,
+                "page.default"      => 1,
+            ],$request->method());
+            $banner = (new BlueBanner)->where("status",1)->field("title,img,path")->select()->toArray();
+            $category = (new BlueCategory)->where("type",1)->field("name,icon,small_icon,sign")->append(['id'])->withAttr(['id' => function($data,$resp){
+                return $resp['sign'];
+            }])->select()->toArray();
+            if (empty($param['category']) || $param['category'] == 0) {
+                $param['category'] = $category[0]['id'];
+            }
+            $share = [
+                "image" => sConf("wechat.share"),
+                "title" => sConf("wechat.share_title")
+            ];
+            $rank = [];
+            $star = [];
+            $list = $this->service->getHomeList(['category' => $param['category'],'pageSize' => $param['size'],'page' => $param['page']]);
+            $task = pageFormat($list);
+            return success("ok",compact("banner","category",'task','share','rank','star'));
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+}

+ 40 - 0
app/controller/v2/Uploads.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace app\controller\v2;
+
+use app\extra\basic\Base;
+use app\extra\tools\UploadExtend;
+use app\middleware\WxMiddleware;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Middleware;
+use LinFly\Annotation\Route\Route;
+use support\Request;
+use support\Response;
+
+
+#[Controller(prefix: "/wx_v2/upload"),Middleware(WxMiddleware::class)]
+class Uploads extends Base
+{
+
+
+    /**
+     * 上传文件
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "data",methods: "post")]
+    public function uploadData(Request $request): Response
+    {
+        try {
+            $resp = UploadExtend::uploadFile();
+            if (!isset($resp[0]['url'])) return errorTrans("error.upload");
+            return successTrans("success.data",[
+                "fileName"  => $resp[0]['origin_name'],
+                "src"       => $resp[0]['url'],
+            ],200);
+        } catch (\Throwable $th) {
+            return error($th->getMessage());
+        }
+    }
+
+}

+ 96 - 0
app/controller/v2/User.php

@@ -0,0 +1,96 @@
+<?php
+
+namespace app\controller\v2;
+
+use app\extra\basic\Base;
+use app\extra\tools\CodeExtend;
+use app\extra\weMini\Crypt;
+use app\extra\weMini\UserInfo;
+use app\middleware\WxMiddleware;
+use app\model\blue\BlueUserOpen;
+use DI\Attribute\Inject;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Middleware;
+use LinFly\Annotation\Route\Route;
+use Shopwwi\WebmanAuth\Facade\Auth as AuthMode;
+use support\Request;
+use support\Response;
+
+
+#[Controller(prefix: "/wx_v2/user"),Middleware(WxMiddleware::class)]
+class User extends Base
+{
+
+    protected array $noNeedLogin = ["loginMobile","loginQuick"];
+
+
+    #[Inject]
+    protected BlueUserOpen $model;
+
+
+    #[Route(path: "quick",methods: "post")]
+    public function loginQuick(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "code.require"  => trans("empty.require"),
+                "pid.default"   => 0
+            ],$request->method());
+            if (!is_array($param)) return error($param);
+            $userinfo = (new Crypt([
+                "appid"     => sConf("wechat.mini_appid"),
+                "appsecret" => sConf("wechat.mini_secret")
+            ]))->session($param['code']);
+            if (!isset($userinfo['openid'])) return error("获取数据失败");
+            $map = ['openid' => $userinfo['openid']];
+            $userOpen = $this->model->where($map)->findOrEmpty();
+            if ($userOpen->isEmpty()) return error("new");
+            $userAuth = get_object_vars(AuthMode::guard("member")->login($userOpen->toArray()));
+            return success("ok",['token' => $userAuth]);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+    #[Route(path: "login",methods: "post")]
+    public function loginMobile(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "code.require"  => trans("empty.require"),
+                "login.require" => trans("empty.require"),
+                "pid.default"   => 0
+            ],$request->method());
+            if (!is_array($param)) return error($param);
+            $userinfo = (new Crypt([
+                "appid"     => sConf("wechat.mini_appid"),
+                "appsecret" => sConf("wechat.mini_secret")
+            ]))->session($param['login']);
+            if (!isset($userinfo['openid'])) return error("获取数据失败");
+            $mobile = (new UserInfo([
+                "appid"     => sConf("wechat.mini_appid"),
+                "appsecret" => sConf("wechat.mini_secret")
+            ]))->getPhoneNumber($param['code']);
+            if ($mobile['errcode'] <> 0) return error($mobile['errmsg']);
+            $map = ['openid' => $userinfo['openid'],'mobile' => $mobile['phone_info']['purePhoneNumber']];
+            $userOpen = $this->model->where($map)->findOrEmpty();
+            if ($userOpen->isEmpty()) {
+                $userOpen->insertGetId([
+                    'openid'    => $userinfo['openid'],
+                    'parent'    => $param['pid'],
+                    'uuid'      => CodeExtend::uniqidNumber(),
+                    'mobile'    => $mobile['phone_info']['purePhoneNumber'],
+                    "create_ip" => $request->getRealIp(),
+                    "nickname"  => "微信用户",
+                    "headimg"   => "https://blue-data.oss-cn-guangzhou.aliyuncs.com/logo.png"
+                ]);
+                $userOpen = $this->model->where($map)->findOrEmpty();
+            }
+            $userAuth = get_object_vars(AuthMode::guard("member")->login($userOpen->toArray()));
+            return success("ok",['token' => $userAuth]);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+}

+ 19 - 0
app/extra/weMini/UserInfo.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace app\extra\weMini;
+
+use yzh52521\EasyHttp\Http;
+
+class UserInfo extends BasicWeChat
+{
+
+    public function getPhoneNumber(string $code = "")
+    {
+        $url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=ACCESS_TOKEN";
+        $this->registerApi($url,"post");
+        return Http::asJson()->post($url,[
+            "code"  => $code
+        ])->array();
+    }
+
+}