Sender.php 7.2 KB

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