diff --git a/app/Controller/v3/MiniSubscribeMsgController.php b/app/Controller/v3/MiniSubscribeMsgController.php new file mode 100644 index 0000000..9fd4deb --- /dev/null +++ b/app/Controller/v3/MiniSubscribeMsgController.php @@ -0,0 +1,26 @@ +request->input('for_user_type'); + + $templates = $this->miniprogramService->getSubscribeMessageTempList($forUserType); + return $this->success(['templates' => $templates]); + } + +} \ No newline at end of file diff --git a/app/Model/v3/SubscribeMessageTemplate.php b/app/Model/v3/SubscribeMessageTemplate.php new file mode 100644 index 0000000..c83de8e --- /dev/null +++ b/app/Model/v3/SubscribeMessageTemplate.php @@ -0,0 +1,22 @@ +where([$this->getTable().'.is_active' => 1]); + }); + } + +} \ No newline at end of file diff --git a/app/Service/v3/Implementations/MiniprogramService.php b/app/Service/v3/Implementations/MiniprogramService.php index 4996a93..f9fd11f 100644 --- a/app/Service/v3/Implementations/MiniprogramService.php +++ b/app/Service/v3/Implementations/MiniprogramService.php @@ -6,6 +6,7 @@ use App\Model\v3\Order; use App\Model\v3\OrderGoods; use App\Model\v3\OrderMain; use App\Model\v3\Store; +use App\Model\v3\SubscribeMessageTemplate; use App\Model\v3\User; use App\Service\v3\Interfaces\MiniprogramServiceInterface; use EasyWeChat\Factory; @@ -209,4 +210,54 @@ class MiniprogramService implements MiniprogramServiceInterface $app->uniform_message->send($template); } + public function sendSubscribeMessage($openid, $template_id, $data, $page = '') + { + if (empty($openid) || empty($template_id) || empty($data)) { + return ; + } + + $app = Factory::miniProgram(config('wechat.applet')); + $app['guzzle_handler'] = CoroutineHandler::class; + + $msgData = [ + 'touser' => $openid, + 'template_id' => $template_id, + 'page' => $page, + 'miniprogram_state' => env('APP_ENV')=='prod' ? 'formal' : 'developer', + 'data' => $data + ]; + + return $app->subscribe_message->send($msgData); + } + + public function getSubscribeMessageTempList($forUserType) + { + + if ($forUserType == '') { + $app = Factory::miniProgram(config('wechat.applet')); + $app['guzzle_handler'] = CoroutineHandler::class; + $result = $app->subscribe_message->getTemplates()['data']; + + $res = []; + foreach ($result as $key => &$tmpl) { + $res[] = [ + 'template_id' => $tmpl['priTmplId'] ?? '', + 'title' => $tmpl['title'] ?? '', + ]; + } + + return $res; + + } else { + + $builder = SubscribeMessageTemplate::query()->select('pri_tmpl_id as template_id', 'title'); + if ($forUserType != 'all') { + $builder = $builder->where(['for_user_type' => $forUserType]); + } + return $builder->get()->toArray(); + + } + + } + } \ No newline at end of file diff --git a/app/Service/v3/Interfaces/MiniprogramServiceInterface.php b/app/Service/v3/Interfaces/MiniprogramServiceInterface.php index 9112b83..0ae8ef1 100644 --- a/app/Service/v3/Interfaces/MiniprogramServiceInterface.php +++ b/app/Service/v3/Interfaces/MiniprogramServiceInterface.php @@ -38,4 +38,22 @@ interface MiniprogramServiceInterface * @return mixed */ public function sendTempMsg($openid, $template_id, $data, $redirect_url = '', $applet_config = ['appid' => '', 'pagepath' => '']); + + /** + * 发送小程序订阅消息 + * @param $openid + * @param $template_id + * @param $data + * @param string $page + * @return mixed + */ + public function sendSubscribeMessage($openid, $template_id, $data, $page = ''); + + /** + * 获取订阅消息模板 + * 为空时,从微信服务器获取全部,否则从本地服务器获取 + * @param $forUserType + * @return mixed + */ + public function getSubscribeMessageTempList($forUserType); } \ No newline at end of file diff --git a/config/routes.php b/config/routes.php index fbb8832..205fa30 100644 --- a/config/routes.php +++ b/config/routes.php @@ -100,6 +100,7 @@ Router::addGroup('/v3/', function () { Router::post('home/market', 'App\Controller\v3\HomeController@marketInfo'); Router::post('location/addrSuggestion', 'App\Controller\v3\LocationController@addrSuggestion'); Router::post('userAddress/deliveryDistance', 'App\Controller\v3\UserAddressController@deliveryDistance'); + Router::post('subscribeMsg/getTemplates', 'App\Controller\v3\MiniSubscribeMsgController@getTemplates'); },['middleware' => [\App\Middleware\Auth\ApiMiddleware::class]]); // 需要登录的路由