Sender.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. /**
  3. * MiPush消息发送类.
  4. * @author wangkuiwei
  5. * @name Sender
  6. * @desc MiPush消息发送
  7. *
  8. */
  9. class Sender extends HttpBase {
  10. public function __construct() {
  11. parent::__construct();
  12. }
  13. //指定regId单发消息
  14. public function send(Message $message, $regId, $retries = 1) {
  15. $fields = $message->getFields();
  16. $fields['registration_id'] = $regId;
  17. return $this->postResult(\PushRequestPath::V3_REGID_MESSAGE(), $fields, $retries);
  18. }
  19. //指定regId列表群发
  20. public function sendToIds(Message $message, $regIdList, $retries = 1) {
  21. $fields = $message->getFields();
  22. $jointRegIds = '';
  23. foreach ($regIdList as $regId) {
  24. if (isset($regId)) {
  25. $jointRegIds .= $regId . \Constants::$comma;
  26. }
  27. }
  28. $fields['registration_id'] = $jointRegIds;
  29. return $this->postResult(\PushRequestPath::V3_REGID_MESSAGE(), $fields, $retries);
  30. }
  31. //多条发送
  32. public function multiSend($targetMessages, $type, $retries = 1) {
  33. $requestPath = $this->multiSendRequestPath($type);
  34. $data = array();
  35. foreach ($targetMessages as $targetMsg) {
  36. array_push($data, $targetMsg->getFields());
  37. }
  38. $fields = array('messages' => json_encode($data));
  39. return $this->postResult($requestPath, $fields, $retries);
  40. }
  41. //多条发送
  42. public function multiSendAtTime($targetMessages, $type, $timeToSend, $retries = 1) {
  43. $requestPath = $this->multiSendRequestPath($type);
  44. $data = array();
  45. foreach ($targetMessages as $targetMsg) {
  46. array_push($data, $targetMsg->getFields());
  47. }
  48. $fields = array('messages' => json_encode($data), 'time_to_send' => $timeToSend);
  49. return $this->postResult($requestPath, $fields, $retries);
  50. }
  51. //指定别名单发
  52. public function sendToAlias(Message $message, $alias, $retries = 1) {
  53. $fields = $message->getFields();
  54. $fields['alias'] = $alias;
  55. return $this->postResult(\PushRequestPath::V3_ALIAS_MESSAGE(), $fields, $retries);
  56. }
  57. //指定别名列表群发
  58. public function sendToAliases(Message $message, $aliasList, $retries = 1) {
  59. $fields = $message->getFields();
  60. $jointAliases = '';
  61. foreach ($aliasList as $alias) {
  62. if (strlen($jointAliases) > 0) {
  63. $jointAliases = $jointAliases . \Constants::$comma;
  64. }
  65. $jointAliases = $jointAliases . $alias;
  66. }
  67. $fields['alias'] = $jointAliases;
  68. return $this->postResult(\PushRequestPath::V3_ALIAS_MESSAGE(), $fields, $retries);
  69. }
  70. //指定userAccount群发
  71. public function sendToUserAccount(Message $message, $userAccount, $retries = 1) {
  72. $fields = $message->getFields();
  73. $fields['user_account'] = $userAccount;
  74. return $this->postResult(\PushRequestPath::V2_USER_ACCOUNT_MESSAGE(), $fields, $retries);
  75. }
  76. //指定userAccount列表群发
  77. public function sendToUserAccounts(Message $message, $userAccountList, $retries = 1) {
  78. $fields = $message->getFields();
  79. $jointUserAccounts = '';
  80. foreach ($userAccountList as $userAccount) {
  81. if (strlen($jointUserAccounts) > 0) {
  82. $jointUserAccounts = $jointUserAccounts . Constants::$comma;
  83. }
  84. $jointUserAccounts = $jointUserAccounts . $userAccount;
  85. }
  86. $fields['user_account'] = $jointUserAccounts;
  87. return $this->postResult(\PushRequestPath::V2_USER_ACCOUNT_MESSAGE(), $fields, $retries);
  88. }
  89. //指定topic群发
  90. public function broadcast(Message $message, $topic, $retries = 1) {
  91. $fields = $message->getFields();
  92. $fields['topic'] = $topic;
  93. return $this->postResult(\PushRequestPath::V3_BROADCAST(), $fields, $retries);
  94. }
  95. //向所有设备发送消息
  96. public function broadcastAll(Message $message, $retries = 1) {
  97. $fields = $message->getFields();
  98. return $this->postResult(\PushRequestPath::V3_BROADCAST_TO_ALL(), $fields, $retries);
  99. }
  100. //广播消息,多个topic,支持topic间的交集、并集或差集
  101. public function multiTopicBroadcast(Message $message, $topicList, $topicOp, $retries = 1) {
  102. if (count($topicList) == 1) {
  103. return $this->broadcast($message, $topicList[0], $retries);
  104. }
  105. $fields = $message->getFields();
  106. $jointTopics = '';
  107. foreach ($topicList as $topic) {
  108. if (strlen($jointTopics) > 0) {
  109. $jointTopics = $jointTopics . \Constants::$multi_topic_split;
  110. }
  111. $jointTopics = $jointTopics . $topic;
  112. }
  113. $fields['topics'] = $jointTopics;
  114. $fields['topic_op'] = $topicOp;
  115. return $this->postResult(\PushRequestPath::V3_MILTI_TOPIC_BROADCAST(), $fields, $retries);
  116. }
  117. // 检测定时任务是否存在
  118. public function checkScheduleJobExist($msgId, $retries = 1) {
  119. $fields = array('job_id' => $msgId);
  120. return $this->postResult(\PushRequestPath::V2_CHECK_SCHEDULE_JOB_EXIST(), $fields, $retries);
  121. }
  122. // 删除定时任务
  123. public function deleteScheduleJob($msgId, $retries = 1) {
  124. $fields = array('job_id' => $msgId);
  125. return $this->postResult(\PushRequestPath::V2_DELETE_SCHEDULE_JOB(), $fields, $retries);
  126. }
  127. /**
  128. * @param $type
  129. * @return \PushRequestPath
  130. */
  131. private function multiSendRequestPath($type) {
  132. if ($type == \TargetedMessage::TARGET_TYPE_ALIAS) {
  133. $requestPath = \PushRequestPath::V2_SEND_MULTI_MESSAGE_WITH_ALIAS();
  134. return $requestPath;
  135. } else if ($type == \TargetedMessage::TARGET_TYPE_USER_ACCOUNT) {
  136. $requestPath = \PushRequestPath::V2_SEND_MULTI_MESSAGE_WITH_ACCOUNT();
  137. return $requestPath;
  138. } else {
  139. $requestPath = \PushRequestPath::V2_SEND_MULTI_MESSAGE_WITH_REGID();
  140. return $requestPath;
  141. }
  142. }
  143. }
  144. ?>