shizhongqi 9 сар өмнө
parent
commit
82fea95f5d

+ 13 - 3
app-ghs/controllers/TestController.php

@@ -1369,9 +1369,19 @@ class TestController extends BaseController
 
     public function actionPush()
     {
-       $push = new \common\components\push('ghs');
-
-        $cids = ['2539a06dde18170d61f235dd40253d36', '3a424d2fcce148fbe38f2dea569e8228', '08fd2c3c72a5da46d2274aaa05c321e3', '9a5f7a63e290bf28f35d0691484e0721'];
+       $push = new \common\components\push('ghs', \common\components\push::MSG_TYPE_ORDER);
+
+        $cids = [
+            '5badab3ce8d531aa00f0ff5ddf6f37d8', // OPPO
+            '95a9f195f9ebdae801a8ac0a5693befc', // 小米 - 线上
+            '08fd2c3c72a5da46d2274aaa05c321e3', //
+            '9a5f7a63e290bf28f35d0691484e0721', // 华为
+            '2278477ef2fe50fed89bc27dd4b9bde2', // VIVO
+            'e980d01fb4699ed23d79a8c1136d4322', // VIVO 线上
+            '6012fd931b5aa8cc028bec036bca9bc2', // 荣耀
+            'd3ff7eed43d51bf6e0c54091eb9d48c0', // Apple XS - 我的(线下)
+            '4a8e4da3b0161f1a8ee352f293236254', // Apple XS Max - 测试机(线上)
+        ];
         $title = '新订单';
         $content = '您有新的订单,请查看 order_id: '. random_int(100000, 999999);
         $payload = [

+ 14 - 8
app-hd/controllers/AdminController.php

@@ -8,9 +8,7 @@ use bizHd\admin\classes\AdminClass;
 use bizHd\admin\classes\ShopAdminClass;
 use bizHd\admin\services\AdminService;
 use bizHd\staff\classes\StaffClass;
-use bizHd\staff\services\StaffService;
 use bizHd\wx\services\WxOpenService;
-use common\components\dict;
 use common\components\imgUtil;
 use common\components\noticeUtil;
 use common\components\util;
@@ -433,17 +431,25 @@ class AdminController extends BaseController
         util::success($data);
     }
 
-    //修改保存安卓clientId
+    //修改或保存 clientId
     public function actionReplaceClientId()
     {
         $get = Yii::$app->request->get();
-        $id = $get['id'] ?? '';
-        if (empty($id)) {
+        $clientId = $get['id'] ?? '';
+        if (empty($clientId)) {
             util::success(['returnStatus' => 'FAILURE']);
         }
-        $this->admin->clientId = $id;
-        $this->admin->save();
-        //noticeUtil::push("保存客户端ID:" . $id, '15280215347');
+        $device = [
+            'clientId' => $clientId,
+            'mainId' => $this->mainId,
+            'shopId' => $this->shopId,
+            'adminId' => $this->adminId,
+            'loginTime' => date('Y-m-d H:i:s'),
+            'status' => 1
+        ];
+        \bizHd\device\classes\HdDeviceClass::add($device);
+
+        noticeUtil::push("保存花店零售客户端ID:" . $clientId, '15280215347');
         util::complete();
     }
 

+ 9 - 0
biz-hd/device/classes/HdDeviceClass.php

@@ -0,0 +1,9 @@
+<?php
+namespace bizHd\device\classes;
+
+use \bizHd\base\classes\BaseClass;
+
+class HdDeviceClass extends BaseClass
+{
+    public static $baseFile = '\bizHd\device\models\HdDevice';
+}

+ 12 - 0
biz-hd/device/models/HdDevice.php

@@ -0,0 +1,12 @@
+<?php
+namespace bizHd\device\models;
+
+use bizHd\base\models\Base;
+
+class HdDevice extends Base
+{
+    public static function tableName()
+    {
+        return 'xhHdDevice';
+    }
+}

+ 112 - 18
common/components/push.php

@@ -3,35 +3,129 @@ namespace common\components;
 
 class push
 {
-    private $ghsUrl = 'https://fc-mp-42d1a66f-2aec-4fc5-9d92-4d176bf3d337.next.bspapp.com/ghs/push';
-    private $hdUrl = 'https://fc-mp-027cce01-d39a-4ed2-8b09-1f4ff43ec945.next.bspapp.com/hd/push';
+    // 消息类型
+    const MSG_TYPE_ORDER = 'order';         // 订单消息
+    const MSG_TYPE_LOGISTICS = 'logistics'; // 物流消息
+    const MSG_TYPE_ACCOUNT = 'account';     // 账户消息
+    const MSG_TYPE_WORK = 'work';           // 工作事项提醒
+    const MSG_TYPE_SUBSCRIPTION = 'subscription'; // 订阅消息
+
+    const SECRET = 'RIVATE_KEY_S^@VJDy7'; // 👈 与云函数中保持一致
+    const GHS_URL = 'https://fc-mp-42d1a66f-2aec-4fc5-9d92-4d176bf3d337.next.bspapp.com/ghs/push';
+    const HD_URL = 'https://fc-mp-027cce01-d39a-4ed2-8b09-1f4ff43ec945.next.bspapp.com/hd/push';
+
+    // 私有属性
     private $url = '';
-    private $secret = 'RIVATE_KEY_S^@VJDy7'; // 👈 与云函数中保持一致
+    private $msgType = '';
 
-    public function __construct($client) {
+    public function __construct($client, $msgType) {
         if ($client == 'ghs') {
-            $this->url = $this->ghsUrl;
+            $this->url = self::GHS_URL;
         } else if ($client == 'hd') {
-            $this->url = $this->hdUrl;
+            $this->url = self::HD_URL;
         } else {
             throw new \Exception('client not found');
         }
+        $this->msgType = $msgType;
+    }
+
+    /**
+     * 实现部分厂商特定功能,包括仅部分厂商支持、不常用或厂商临时新增的功能(不依赖 uni-push,厂商文档支持的参数可直接使用)。
+     * 例如:推送渠道 ID、消息分类(部分厂商未配置时可能被限量推送或静默推送,即静音且需下拉系统通知栏才可见通知内容)、通知栏富文本
+     */
+    public function initOptions() {
+        $optionsArr = [];
+        switch ($this->msgType) {
+            case self::MSG_TYPE_ORDER:
+                $optionsArr = [ "android" =>
+                    [
+                        "XM" => [
+                            "/extra.channel_id" => "142743" //小米后台申请的通知类别id -- https://admin.xmpush.xiaomi.com/zh_CN/channel/list?appId=2882303761520146676
+                        ],
+                        "HW" => [
+                            "/message/android/category" => "EXPRESS"
+                        ],
+                        "VV" => [
+                            "/category" => "ORDER"
+                        ],
+                    ]
+                ];
+                break;
+            case self::MSG_TYPE_LOGISTICS:
+                $optionsArr = [ "android" =>
+                    [
+                        "XM" => [
+                            "/extra.channel_id" => "142744"
+                        ],
+                        "HW" => [
+                            "/message/android/category" => "EXPRESS"
+                        ],
+                        "VV" => [
+                            "/category" => "ORDER"
+                        ],
+                    ]
+                ];
+                break;
+            case self::MSG_TYPE_ACCOUNT:
+                $optionsArr = [ "android" =>
+                    [
+                        "XM" => [
+                            "/extra.channel_id" => "142895"
+                        ],
+                        "HW" => [
+                            "/message/android/category" => "ACCOUNT"
+                        ],
+                        "VV" => [
+                            "/category" => "ACCOUNT"
+                        ],
+                    ]
+                ];
+                break;
+            case self::MSG_TYPE_WORK:
+                $optionsArr = [ "android" =>
+                    [
+                        "XM" => [
+                            "/extra.channel_id" => "142892"
+                        ],
+                        "HW" => [
+                            "/message/android/category" => "WORK"
+                        ],
+                        "VV" => [
+                            "/category" => "TODO"
+                        ],
+                    ]
+                ];
+                break;
+            case self::MSG_TYPE_SUBSCRIPTION:
+                $optionsArr = [ "android" =>
+                    [
+                        "XM" => [
+                            "/extra.channel_id" => "0" // TODO 暂无
+                        ],
+                        "HW" => [
+                            "/message/android/category" => "SUBSCRIPTION"
+                        ],
+                        "VV" => [
+                            "/category" => "SUBSCRIPTION"
+                        ],
+                    ]
+                ];
+                break;
+        }
+        return $optionsArr;
     }
 
     public function pushByCloud($cids, $title, $content, $payload = [])
     {
-        $sign = md5($title . $content . $this->secret);
-
-        $optionsArr = [ "android" =>
-            [
-    //            "XM" => [
-    //                "/extra.channel_id" => "" //小米后台申请的通知类别id
-    //            ],
-                "HW" => [
-                    "/message/android/category" => "EXPRESS"
-                ]
-            ]
-        ];
+        $sign = md5($title . $content . self::SECRET);
+
+        $optionsArr = $this->initOptions();
+        // 测试环境的特殊处理
+        if ( getenv('YII_ENV') == 'dev') {
+            $optionsArr["android"]["HW"]["/message/android/target_user_type"] = 1; //华为 -- 值为int 类型。1 表示华为测试消息,华为每个应用每日可发送该测试消息500条,此target_user_type 参数请勿发布至线上。
+            $optionsArr["android"]["VV"]["/pushMode"] =  1;                 //VIVO  --  值为int 类型。0 表示正式推送;1 表示测试推送,不填默认为0。线上请勿使用测试推送
+            $optionsArr["android"]["HO"]["/android/targetUserType"] = 1;    //荣耀  -- 值为int 类型。1 表示测试推送,不填默认为0。荣耀每个应用每日可发送该测试消息1000条。此测试参数请勿发布至线上。
+        }
 
         $data = [
             'cid' => is_array($cids) ? $cids : [$cids],