123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- <?php
- namespace addons\shopro\notification\traits;
- use app\admin\model\shopro\Config;
- /**
- * 消息通知,额外方法
- */
- trait Notification
- {
- public function __construct($data = [])
- {
- $this->data = $data;
- $this->initConfig();
- }
- /**
- * 组合发送参数
- *
- * @param \think\Model $notifiable
- * @param string $type
- * @param \Closure|null $callback
- * @return array
- */
- protected function getParams($notifiable, $type, \Closure $callback = null)
- {
- $params = [];
- $params['data'] = $this->getData($notifiable);
- if ($callback) {
- $params = $callback($params);
- }
- $params = $this->formatParams($params, $type);
- return $params;
- }
- /**
- * 数据库通知数据
- *
- * @param \think\Model $notifiable
- * @return array
- */
- public function toDatabase($notifiable)
- {
- $type = str_replace('to', '', __FUNCTION__);
- $params = $this->getParams($notifiable, $type);
- $params['message_type'] = 'notification';
- $params['class_name'] = static::class;
- $params['message_text'] = $this->strReplace($this->template['MessageDefaultContent'], $params['data']);
- $params['message_title'] = $this->returnField['name'];
- return $params;
- }
- /**
- * 短信通知数据
- *
- * @param \think\Model $notifiable
- * @return array
- */
- public function toSms($notifiable)
- {
- $type = str_replace('to', '', __FUNCTION__);
- $params = $this->getParams($notifiable, $type, function ($params) use ($notifiable) {
- $params['mobile'] = $notifiable['mobile'] ? $notifiable['mobile'] : '';
- $this->template['MessageDefaultContent'] = $this->strReplace($this->template['MessageDefaultContent'], $params['data']);
- return $params;
- });
- return $params;
- }
- /**
- * 邮件通知数据
- *
- * @param \think\Model $notifiable
- * @return array
- */
- public function toEmail($notifiable)
- {
- $type = str_replace('to', '', __FUNCTION__);
- $params = $this->getParams($notifiable, $type);
- return $params;
- }
- /**
- * socket 通知数据
- *
- * @param \think\Model $notifiable
- * @return array
- */
- public function toWebsocket($notifiable)
- {
- $type = str_replace('to', '', __FUNCTION__);
- $params = $this->getParams($notifiable, $type);
- $params['message_type'] = 'notification';
- $params['class_name'] = static::class;
- $params['message_text'] = $this->strReplace($this->template['MessageDefaultContent'], $params['data']);
- $params['message_title'] = $this->returnField['name'];
- return $params;
- }
- /**
- * 微信公众号通知数据
- *
- * @param \think\Model $notifiable
- * @return array
- */
- public function toWechatOfficialAccount($notifiable)
- {
- $type = str_replace('to', '', __FUNCTION__);
- $params = $this->getParams($notifiable, $type, function ($params) use ($notifiable) {
- if ($oauth = $this->getWxOauth($notifiable, 'WechatOfficialAccount')) {
- // 公众号跳转地址,订单详情
- $path = $params['data']['h5_url'] ?? ($params['data']['jump_url'] ?? '');
- // 获取 h5 域名
- $url = $this->getH5DomainUrl($path);
- $params['openid'] = $oauth->openid;
- $params['url'] = $url;
- }
- return $params;
- });
- return $params;
- }
- /**
- * 微信小程序通知数据
- *
- * @param \think\Model $notifiable
- * @return array
- */
- public function toWechatMiniProgram($notifiable)
- {
- $type = str_replace('to', '', __FUNCTION__);
- $params = $this->getParams($notifiable, $type, function ($params) use ($notifiable) {
- if ($oauth = $this->getWxOauth($notifiable, 'WechatMiniProgram')) {
- // 小程序跳转地址,订单详情
- $path = $params['data']['mini_url'] ?? ($params['data']['jump_url'] ?? '');
- // 获取小程序完整路径
- $page = $this->getMiniDomainPage($path);
- $params['openid'] = $oauth->openid;
- $params['page'] = $page;
- }
- return $params;
- });
- return $params;
- }
- /**
- * 替换字符串中的标识
- *
- * @param [type] $content
- * @param [type] $data
- * @return void
- */
- protected function strReplace($content, $data)
- {
- foreach ($data as $key => $value) {
- $content = str_replace('{' . $key . '}', (string)$value, $content);
- }
- return $content;
- }
- /**
- * 获取微信授权 oauth
- */
- protected function getWxOauth($notifiable, $platform)
- {
- if ($this->receiver_type == 'admin') { // 后台管理员绑定的都是公众号,但是在 thirdOauth 中存的是 admin
- $platform = 'admin';
- } else {
- $platform = lcfirst(str_replace('Wechat', '', $platform));
- }
-
- $oauth = \app\admin\model\shopro\ThirdOauth::where($this->receiver_type . '_id', $notifiable['id'])
- ->where('provider', 'Wechat')
- ->where('platform', $platform)->find();
- if ($oauth && $oauth->openid) {
- return $oauth;
- }
- return null;
- }
- /**
- * 获取拼接域名的地址
- */
- protected function getH5DomainUrl($path)
- {
- $url = $path;
- $domain = Config::getConfigField('shop.basic.domain');
- if ($domain) {
- $domain = rtrim($domain, '/');
- $url = $domain . "/?page=" . urlencode($path);
- }
- return $url;
- }
- /**
- * 获取拼接的小程序地址
- */
- protected function getMiniDomainPage($path)
- {
- return "pages/index/index?page=" . urlencode($path);
- }
- }
|