Transformer.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <?php
  2. /*
  3. * This file is part of the overtrue/wechat.
  4. *
  5. * (c) overtrue <i@overtrue.me>
  6. *
  7. * This source file is subject to the MIT license that is bundled
  8. * with this source code in the file LICENSE.
  9. */
  10. /**
  11. * Transformer.php.
  12. *
  13. * @author overtrue <i@overtrue.me>
  14. * @copyright 2015 overtrue <i@overtrue.me>
  15. *
  16. * @see https://github.com/overtrue
  17. * @see http://overtrue.me
  18. */
  19. namespace EasyWeChat\Server;
  20. use EasyWeChat\Message\AbstractMessage;
  21. use EasyWeChat\Message\News;
  22. use EasyWeChat\Message\Text;
  23. /**
  24. * Class Transformer.
  25. */
  26. class Transformer
  27. {
  28. /**
  29. * transform message to XML.
  30. *
  31. * @param array|string|AbstractMessage $message
  32. *
  33. * @return array
  34. */
  35. public function transform($message)
  36. {
  37. if (is_array($message)) {
  38. $class = News::class;
  39. } else {
  40. if (is_string($message)) {
  41. $message = new Text(['content' => $message]);
  42. }
  43. $class = get_class($message);
  44. }
  45. $handle = 'transform'.substr($class, strlen('EasyWeChat\Message\\'));
  46. return method_exists($this, $handle) ? $this->$handle($message) : [];
  47. }
  48. /**
  49. * Transform text message.
  50. *
  51. * @return array
  52. */
  53. public function transformText(AbstractMessage $message)
  54. {
  55. return [
  56. 'Content' => $message->get('content'),
  57. ];
  58. }
  59. /**
  60. * Transform image message.
  61. *
  62. * @return array
  63. */
  64. public function transformImage(AbstractMessage $message)
  65. {
  66. return [
  67. 'Image' => [
  68. 'MediaId' => $message->get('media_id'),
  69. ],
  70. ];
  71. }
  72. /**
  73. * Transform video message.
  74. *
  75. * @return array
  76. */
  77. public function transformVideo(AbstractMessage $message)
  78. {
  79. $response = [
  80. 'Video' => [
  81. 'MediaId' => $message->get('media_id'),
  82. 'Title' => $message->get('title'),
  83. 'Description' => $message->get('description'),
  84. ],
  85. ];
  86. return $response;
  87. }
  88. /**
  89. * Transform music message.
  90. *
  91. * @return array
  92. */
  93. public function transformMusic(AbstractMessage $message)
  94. {
  95. $response = [
  96. 'Music' => [
  97. 'Title' => $message->get('title'),
  98. 'Description' => $message->get('description'),
  99. 'MusicUrl' => $message->get('url'),
  100. 'HQMusicUrl' => $message->get('hq_url'),
  101. 'ThumbMediaId' => $message->get('thumb_media_id'),
  102. ],
  103. ];
  104. return $response;
  105. }
  106. /**
  107. * Transform voice message.
  108. *
  109. * @return array
  110. */
  111. public function transformVoice(AbstractMessage $message)
  112. {
  113. return [
  114. 'Voice' => [
  115. 'MediaId' => $message->get('media_id'),
  116. ],
  117. ];
  118. }
  119. /**
  120. * Transform transfer message.
  121. *
  122. * @return array
  123. */
  124. public function transformTransfer(AbstractMessage $message)
  125. {
  126. $response = [];
  127. // 指定客服
  128. if ($message->get('account')) {
  129. $response['TransInfo'] = [
  130. 'KfAccount' => $message->get('account'),
  131. ];
  132. }
  133. return $response;
  134. }
  135. /**
  136. * Transform news message.
  137. *
  138. * @param array|\EasyWeChat\Message\News $news
  139. *
  140. * @return array
  141. */
  142. public function transformNews($news)
  143. {
  144. $articles = [];
  145. if (!is_array($news)) {
  146. $news = [$news];
  147. }
  148. foreach ($news as $item) {
  149. $articles[] = [
  150. 'Title' => $item->get('title'),
  151. 'Description' => $item->get('description'),
  152. 'Url' => $item->get('url'),
  153. 'PicUrl' => $item->get('pic_url'),
  154. ];
  155. }
  156. return [
  157. 'ArticleCount' => count($articles),
  158. 'Articles' => $articles,
  159. ];
  160. }
  161. public function transformDeviceText(AbstractMessage $message)
  162. {
  163. $response = [
  164. 'DeviceType' => $message->get('device_type'),
  165. 'DeviceID' => $message->get('device_id'),
  166. 'SessionID' => $message->get('session_id'),
  167. 'Content' => base64_encode($message->get('content')),
  168. ];
  169. return $response;
  170. }
  171. }