<?php /* * This file is part of the overtrue/wechat. * * (c) overtrue <i@overtrue.me> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ /** * Broadcast.php. * * @author overtrue <i@overtrue.me> * @copyright 2015 overtrue <i@overtrue.me> * * @see https://github.com/overtrue * @see http://overtrue.me */ namespace EasyWeChat\Broadcast; use EasyWeChat\Core\AbstractAPI; use EasyWeChat\Core\Exceptions\HttpException; /** * Class Broadcast. */ class Broadcast extends AbstractAPI { const API_SEND_BY_GROUP = 'https://api.weixin.qq.com/cgi-bin/message/mass/sendall'; const API_SEND_BY_OPENID = 'https://api.weixin.qq.com/cgi-bin/message/mass/send'; const API_DELETE = 'https://api.weixin.qq.com/cgi-bin/message/mass/delete'; const API_PREVIEW = 'https://api.weixin.qq.com/cgi-bin/message/mass/preview'; const API_GET = 'https://api.weixin.qq.com/cgi-bin/message/mass/get'; const PREVIEW_BY_OPENID = 'touser'; const PREVIEW_BY_NAME = 'towxname'; const MSG_TYPE_TEXT = 'text'; // 文本 const MSG_TYPE_NEWS = 'news'; // 图文 const MSG_TYPE_VOICE = 'voice'; // 语音 const MSG_TYPE_IMAGE = 'image'; // 图片 const MSG_TYPE_VIDEO = 'video'; // 视频 const MSG_TYPE_CARD = 'card'; // 卡券 /** * Send a message. * * @param string $msgType message type * @param mixed $message message * @param mixed $to * * @return mixed */ public function send($msgType, $message, $to = null) { $message = (new MessageBuilder())->msgType($msgType)->message($message)->to($to)->build(); $api = is_array($to) ? self::API_SEND_BY_OPENID : self::API_SEND_BY_GROUP; return $this->post($api, $message); } /** * Send a text message. * * @param mixed $message message * @param mixed $to * * @return mixed */ public function sendText($message, $to = null) { return $this->send(self::MSG_TYPE_TEXT, $message, $to); } /** * Send a news message. * * @param mixed $message message * @param mixed $to * * @return mixed */ public function sendNews($message, $to = null) { return $this->send(self::MSG_TYPE_NEWS, $message, $to); } /** * Send a voice message. * * @param mixed $message message * @param mixed $to * * @return mixed */ public function sendVoice($message, $to = null) { return $this->send(self::MSG_TYPE_VOICE, $message, $to); } /** * Send a image message. * * @param mixed $message message * @param mixed $to * * @return mixed */ public function sendImage($message, $to = null) { return $this->send(self::MSG_TYPE_IMAGE, $message, $to); } /** * Send a video message. * * @param mixed $message message * @param mixed $to * * @return mixed */ public function sendVideo($message, $to = null) { return $this->send(self::MSG_TYPE_VIDEO, $message, $to); } /** * Send a card message. * * @param mixed $message message * @param mixed $to * * @return mixed */ public function sendCard($message, $to = null) { return $this->send(self::MSG_TYPE_CARD, $message, $to); } /** * Preview a message. * * @param string $msgType message type * @param mixed $message message * @param string $to * @param string $by * * @return mixed */ public function preview($msgType, $message, $to, $by = self::PREVIEW_BY_OPENID) { $message = (new MessageBuilder())->msgType($msgType)->message($message)->to($to)->buildPreview($by); return $this->post(self::API_PREVIEW, $message); } /** * Preview a text message. * * @param mixed $message message * @param string $to * @param string $by * * @return mixed */ public function previewText($message, $to, $by = self::PREVIEW_BY_OPENID) { return $this->preview(self::MSG_TYPE_TEXT, $message, $to, $by); } /** * Preview a news message. * * @param mixed $message message * @param string $to * @param string $by * * @return mixed */ public function previewNews($message, $to, $by = self::PREVIEW_BY_OPENID) { return $this->preview(self::MSG_TYPE_NEWS, $message, $to, $by); } /** * Preview a voice message. * * @param mixed $message message * @param string $to * @param string $by * * @return mixed */ public function previewVoice($message, $to, $by = self::PREVIEW_BY_OPENID) { return $this->preview(self::MSG_TYPE_VOICE, $message, $to, $by); } /** * Preview a image message. * * @param mixed $message message * @param string $to * @param string $by * * @return mixed */ public function previewImage($message, $to, $by = self::PREVIEW_BY_OPENID) { return $this->preview(self::MSG_TYPE_IMAGE, $message, $to, $by); } /** * Preview a video message. * * @param mixed $message message * @param string $to * @param string $by * * @return mixed */ public function previewVideo($message, $to, $by = self::PREVIEW_BY_OPENID) { return $this->preview(self::MSG_TYPE_VIDEO, $message, $to, $by); } /** * Preview a card message. * * @param mixed $message message * @param string $to * @param string $by * * @return mixed */ public function previewCard($message, $to, $by = self::PREVIEW_BY_OPENID) { return $this->preview(self::MSG_TYPE_CARD, $message, $to, $by); } /** * Preview a message by name. * * @param string $msgType message type * @param mixed $message message * @param $to * * @return mixed */ public function previewByName($msgType, $message, $to) { return $this->preview($msgType, $message, $to, self::PREVIEW_BY_NAME); } /** * Preview a text message by name. * * @param mixed $message message * @param $to * * @return mixed */ public function previewTextByName($message, $to) { return $this->preview(self::MSG_TYPE_TEXT, $message, $to, self::PREVIEW_BY_NAME); } /** * Preview a news message by name. * * @param mixed $message message * @param $to * * @return mixed */ public function previewNewsByName($message, $to) { return $this->preview(self::MSG_TYPE_NEWS, $message, $to, self::PREVIEW_BY_NAME); } /** * Preview a voice message by name. * * @param mixed $message message * @param $to * * @return mixed */ public function previewVoiceByName($message, $to) { return $this->preview(self::MSG_TYPE_VOICE, $message, $to, self::PREVIEW_BY_NAME); } /** * Preview a image message by name. * * @param mixed $message message * @param $to * * @return mixed */ public function previewImageByName($message, $to) { return $this->preview(self::MSG_TYPE_IMAGE, $message, $to, self::PREVIEW_BY_NAME); } /** * Preview a video message by name. * * @param mixed $message message * @param $to * * @return mixed */ public function previewVideoByName($message, $to) { return $this->preview(self::MSG_TYPE_VIDEO, $message, $to, self::PREVIEW_BY_NAME); } /** * Preview a card message by name. * * @param mixed $message message * @param $to * * @return mixed */ public function previewCardByName($message, $to) { return $this->preview(self::MSG_TYPE_CARD, $message, $to, self::PREVIEW_BY_NAME); } /** * Delete a broadcast. * * @param string $msgId * * @return \EasyWeChat\Support\Collection */ public function delete($msgId) { $options = [ 'msg_id' => $msgId, ]; return $this->post(self::API_DELETE, $options); } /** * Get a broadcast status. * * @param string $msgId * * @return \EasyWeChat\Support\Collection */ public function status($msgId) { $options = [ 'msg_id' => $msgId, ]; return $this->post(self::API_GET, $options); } /** * post request. * * @param string $url * @param array|string $options * * @return \EasyWeChat\Support\Collection * * @throws HttpException */ private function post($url, $options) { return $this->parseJSON('json', [$url, $options]); } }