Transformer.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  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\Staff;
  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. 'msgtype' => 'text',
  57. 'text' => [
  58. 'content' => $message->get('content'),
  59. ],
  60. ];
  61. }
  62. /**
  63. * Transform image message.
  64. *
  65. * @return array
  66. */
  67. public function transformImage(AbstractMessage $message)
  68. {
  69. return [
  70. 'msgtype' => 'image',
  71. 'image' => [
  72. 'media_id' => $message->get('media_id'),
  73. ],
  74. ];
  75. }
  76. /**
  77. * Transform music message.
  78. *
  79. * @return array
  80. */
  81. public function transformMusic(AbstractMessage $message)
  82. {
  83. return [
  84. 'msgtype' => 'music',
  85. 'music' => [
  86. 'title' => $message->get('title'),
  87. 'description' => $message->get('description'),
  88. 'musicurl' => $message->get('url'),
  89. 'hqmusicurl' => $message->get('hq_url'),
  90. 'thumb_media_id' => $message->get('thumb_media_id'),
  91. ],
  92. ];
  93. }
  94. /**
  95. * Transform video message.
  96. *
  97. * @return array
  98. */
  99. public function transformVideo(AbstractMessage $message)
  100. {
  101. return [
  102. 'msgtype' => 'video',
  103. 'video' => [
  104. 'title' => $message->get('title'),
  105. 'media_id' => $message->get('media_id'),
  106. 'description' => $message->get('description'),
  107. 'thumb_media_id' => $message->get('thumb_media_id'),
  108. ],
  109. ];
  110. }
  111. /**
  112. * Transform voice message.
  113. *
  114. * @return array
  115. */
  116. public function transformVoice(AbstractMessage $message)
  117. {
  118. return [
  119. 'msgtype' => 'voice',
  120. 'voice' => [
  121. 'media_id' => $message->get('media_id'),
  122. ],
  123. ];
  124. }
  125. /**
  126. * Transform articles message.
  127. *
  128. * @return array
  129. */
  130. public function transformNews($news)
  131. {
  132. $articles = [];
  133. if (!is_array($news)) {
  134. $news = [$news];
  135. }
  136. foreach ($news as $item) {
  137. $articles[] = [
  138. 'title' => $item->get('title'),
  139. 'description' => $item->get('description'),
  140. 'url' => $item->get('url'),
  141. 'picurl' => $item->get('pic_url'),
  142. ];
  143. }
  144. return ['msgtype' => 'news', 'news' => ['articles' => $articles]];
  145. }
  146. /**
  147. * Transform material message.
  148. *
  149. * @return array
  150. */
  151. public function transformMaterial(AbstractMessage $message)
  152. {
  153. $type = $message->getType();
  154. return [
  155. 'msgtype' => $type,
  156. $type => [
  157. 'media_id' => $message->get('media_id'),
  158. ],
  159. ];
  160. }
  161. /**
  162. * Transform wxcard message.
  163. *
  164. * @return array
  165. */
  166. public function transformCard(AbstractMessage $message)
  167. {
  168. $type = $message->getType();
  169. return [
  170. 'msgtype' => $type,
  171. $type => [
  172. 'card_id' => $message->get('card_id'),
  173. ],
  174. ];
  175. }
  176. /**
  177. * Transform minprogrampage message.
  178. *
  179. * @return array
  180. */
  181. public function transformMiniProgramPage(AbstractMessage $message)
  182. {
  183. $type = $message->getType();
  184. return [
  185. 'msgtype' => $type,
  186. $type => [
  187. 'title' => $message->get('title'),
  188. 'appid' => $message->get('appid'),
  189. 'pagepath' => $message->get('pagepath'),
  190. 'thumb_media_id' => $message->get('thumb_media_id'),
  191. ],
  192. ];
  193. }
  194. }