|
@@ -3,35 +3,129 @@ namespace common\components;
|
|
|
|
|
|
|
|
class push
|
|
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 $url = '';
|
|
|
- private $secret = 'RIVATE_KEY_S^@VJDy7'; // 👈 与云函数中保持一致
|
|
|
|
|
|
|
+ private $msgType = '';
|
|
|
|
|
|
|
|
- public function __construct($client) {
|
|
|
|
|
|
|
+ public function __construct($client, $msgType) {
|
|
|
if ($client == 'ghs') {
|
|
if ($client == 'ghs') {
|
|
|
- $this->url = $this->ghsUrl;
|
|
|
|
|
|
|
+ $this->url = self::GHS_URL;
|
|
|
} else if ($client == 'hd') {
|
|
} else if ($client == 'hd') {
|
|
|
- $this->url = $this->hdUrl;
|
|
|
|
|
|
|
+ $this->url = self::HD_URL;
|
|
|
} else {
|
|
} else {
|
|
|
throw new \Exception('client not found');
|
|
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 = [])
|
|
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 = [
|
|
$data = [
|
|
|
'cid' => is_array($cids) ? $cids : [$cids],
|
|
'cid' => is_array($cids) ? $cids : [$cids],
|