* * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace EasyWeChat\OfficialAccount\Broadcasting; use EasyWeChat\Kernel\BaseClient; use EasyWeChat\Kernel\Contracts\MessageInterface; use EasyWeChat\Kernel\Exceptions\RuntimeException; use EasyWeChat\Kernel\Messages\Card; use EasyWeChat\Kernel\Messages\Image; use EasyWeChat\Kernel\Messages\Media; use EasyWeChat\Kernel\Messages\Text; use EasyWeChat\Kernel\Support\Arr; /** * Class Client. * * @method \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string previewTextByName($text, $name); * @method \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string previewNewsByName($mediaId, $name); * @method \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string previewVoiceByName($mediaId, $name); * @method \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string previewImageByName($mediaId, $name); * @method \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string previewVideoByName($message, $name); * @method \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string previewCardByName($cardId, $name); * * @author overtrue */ class Client extends BaseClient { public const PREVIEW_BY_OPENID = 'touser'; public const PREVIEW_BY_NAME = 'towxname'; /** * Send a message. * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException * @throws \GuzzleHttp\Exception\GuzzleException */ public function send(array $message) { if (empty($message['filter']) && empty($message['touser'])) { throw new RuntimeException('The message reception object is not specified'); } $api = Arr::get($message, 'touser') ? 'cgi-bin/message/mass/send' : 'cgi-bin/message/mass/sendall'; return $this->httpPostJson($api, $message); } /** * Preview a message. * * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \GuzzleHttp\Exception\GuzzleException */ public function preview(array $message) { return $this->httpPostJson('cgi-bin/message/mass/preview', $message); } /** * Delete a broadcast. * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \GuzzleHttp\Exception\GuzzleException */ public function delete(string $msgId, int $index = 0) { $options = [ 'msg_id' => $msgId, 'article_idx' => $index, ]; return $this->httpPostJson('cgi-bin/message/mass/delete', $options); } /** * Get a broadcast status. * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \GuzzleHttp\Exception\GuzzleException */ public function status(string $msgId) { $options = [ 'msg_id' => $msgId, ]; return $this->httpPostJson('cgi-bin/message/mass/get', $options); } /** * Send a text message. * * @param mixed $reception * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException */ public function sendText(string $message, $reception = null, array $attributes = []) { return $this->sendMessage(new Text($message), $reception, $attributes); } /** * Send a news message. * * @param mixed $reception * * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException */ public function sendNews(string $mediaId, $reception = null, array $attributes = []) { return $this->sendMessage(new Media($mediaId, 'mpnews'), $reception, $attributes); } /** * Send a voice message. * * @param mixed $reception * * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException */ public function sendVoice(string $mediaId, $reception = null, array $attributes = []) { return $this->sendMessage(new Media($mediaId, 'voice'), $reception, $attributes); } /** * Send a image message. * * @param mixed $reception * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException */ public function sendImage(string $mediaId, $reception = null, array $attributes = []) { return $this->sendMessage(new Image($mediaId), $reception, $attributes); } /** * Send a video message. * * @param mixed $reception * * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException */ public function sendVideo(string $mediaId, $reception = null, array $attributes = []) { return $this->sendMessage(new Media($mediaId, 'mpvideo'), $reception, $attributes); } /** * Send a card message. * * @param mixed $reception * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException */ public function sendCard(string $cardId, $reception = null, array $attributes = []) { return $this->sendMessage(new Card($cardId), $reception, $attributes); } /** * Preview a text message. * * @param string $message message * @param string $reception * @param string $method * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException */ public function previewText(string $message, $reception, $method = self::PREVIEW_BY_OPENID) { return $this->previewMessage(new Text($message), $reception, $method); } /** * Preview a news message. * * @param string $mediaId message * @param string $reception * @param string $method * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException */ public function previewNews(string $mediaId, $reception, $method = self::PREVIEW_BY_OPENID) { return $this->previewMessage(new Media($mediaId, 'mpnews'), $reception, $method); } /** * Preview a voice message. * * @param string $mediaId message * @param string $reception * @param string $method * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException */ public function previewVoice(string $mediaId, $reception, $method = self::PREVIEW_BY_OPENID) { return $this->previewMessage(new Media($mediaId, 'voice'), $reception, $method); } /** * Preview a image message. * * @param string $mediaId message * @param string $reception * @param string $method * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException */ public function previewImage(string $mediaId, $reception, $method = self::PREVIEW_BY_OPENID) { return $this->previewMessage(new Image($mediaId), $reception, $method); } /** * Preview a video message. * * @param string $mediaId message * @param string $reception * @param string $method * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException */ public function previewVideo(string $mediaId, $reception, $method = self::PREVIEW_BY_OPENID) { return $this->previewMessage(new Media($mediaId, 'mpvideo'), $reception, $method); } /** * Preview a card message. * * @param string $cardId message * @param string $reception * @param string $method * * @return \Psr\Http\Message\ResponseInterface|\EasyWeChat\Kernel\Support\Collection|array|object|string * * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException */ public function previewCard(string $cardId, $reception, $method = self::PREVIEW_BY_OPENID) { return $this->previewMessage(new Card($cardId), $reception, $method); } /** * @param string $method * * @return mixed * * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException */ public function previewMessage(MessageInterface $message, string $reception, $method = self::PREVIEW_BY_OPENID) { $message = (new MessageBuilder())->message($message)->buildForPreview($method, $reception); return $this->preview($message); } /** * @param mixed $reception * @param array $attributes * * @return mixed * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException */ public function sendMessage(MessageInterface $message, $reception = null, $attributes = []) { $message = (new MessageBuilder())->message($message)->with($attributes)->toAll(); if (\is_int($reception)) { $message->toTag($reception); } elseif (\is_array($reception)) { $message->toUsers($reception); } return $this->send($message->build()); } /** * @codeCoverageIgnore * * @param string $method * @param array $args * * @return mixed */ public function __call($method, $args) { if (strpos($method, 'ByName') > 0) { $method = strstr($method, 'ByName', true); if (method_exists($this, $method)) { array_push($args, self::PREVIEW_BY_NAME); return $this->$method(...$args); } } throw new \BadMethodCallException(sprintf('Method %s not exists.', $method)); } }