* * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace EasyWeChat\Work\ExternalContact; use EasyWeChat\Kernel\BaseClient; use EasyWeChat\Kernel\Exceptions\InvalidArgumentException; /** * Class MessageClient. * * @author milkmeowo */ class MessageClient extends BaseClient { /** * Required attributes. * * @var array */ protected $required = ['media_id', 'title', 'url', 'pic_media_id', 'appid', 'page']; protected $textMessage = [ 'content' => '', ]; protected $imageMessage = [ 'media_id' => '', ]; protected $linkMessage = [ 'title' => '', 'picurl' => '', 'desc' => '', 'url' => '', ]; protected $miniprogramMessage = [ 'title' => '', 'pic_media_id' => '', 'appid' => '', 'page' => '', ]; /** * 添加企业群发消息模板 * * @see https://work.weixin.qq.com/api/doc#90000/90135/91560 * * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \GuzzleHttp\Exception\GuzzleException */ public function submit(array $msg) { $params = $this->formatMessage($msg); return $this->httpPostJson('cgi-bin/externalcontact/add_msg_template', $params); } /** * 获取企业群发消息发送结果. * * @see https://work.weixin.qq.com/api/doc#90000/90135/91561 * * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \GuzzleHttp\Exception\GuzzleException */ public function get(string $msgId) { return $this->httpPostJson('cgi-bin/externalcontact/get_group_msg_result', [ 'msgid' => $msgId, ]); } /** * 发送新客户欢迎语. * * @see https://work.weixin.qq.com/api/doc#90000/90135/91688 * * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string * * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException * @throws \GuzzleHttp\Exception\GuzzleException */ public function sendWelcome(string $welcomeCode, array $msg) { $formattedMsg = $this->formatMessage($msg); $params = array_merge($formattedMsg, [ 'welcome_code' => $welcomeCode, ]); return $this->httpPostJson('cgi-bin/externalcontact/send_welcome_msg', $params); } /** * @return array * * @throws InvalidArgumentException */ protected function formatMessage(array $data = []) { $params = $data; if (!empty($params['text'])) { $params['text'] = $this->formatFields($params['text'], $this->textMessage); } if (!empty($params['image'])) { $params['image'] = $this->formatFields($params['image'], $this->imageMessage); } if (!empty($params['link'])) { $params['link'] = $this->formatFields($params['link'], $this->linkMessage); } if (!empty($params['miniprogram'])) { $params['miniprogram'] = $this->formatFields($params['miniprogram'], $this->miniprogramMessage); } return $params; } /** * @return array * * @throws InvalidArgumentException */ protected function formatFields(array $data = [], array $default = []) { $params = array_merge($default, $data); foreach ($params as $key => $value) { if (in_array($key, $this->required, true) && empty($value) && empty($default[$key])) { throw new InvalidArgumentException(sprintf('Attribute "%s" can not be empty!', $key)); } $params[$key] = empty($value) ? $default[$key] : $value; } return $params; } }