Files
water-back/app/Api/WechatHandlers/EventMessageHandler.php
2023-01-11 11:00:43 +08:00

143 lines
5.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Api\WechatHandlers;
use Carbon\Carbon;
use EasyWeChat\Kernel\Contracts\EventHandlerInterface;
use EasyWeChat\Kernel\Messages\Text;
use Modules\User\Models\UserWechat;
use Modules\User\Models\UserWechatOfficial;
use Modules\User\Traits\WechatTrait;
class EventMessageHandler implements EventHandlerInterface
{
use WechatTrait;
private $payload;
public function handle($payload = null)
{
if (method_exists($this, $payload->Event)) {
$this->payload = $payload;
return call_user_func_array([$this, $payload->Event], []);
} else {
// return '暂不支持的消息类型';
}
}
/**
* Notes: 关注事件
*
* @Author: 玄尘
* @Date: 2022/7/27 9:41
*/
private function subscribe()
{
$app = app('wechat.official_account');
$user = $app->user->get($this->payload->FromUserName);
if ($user->unionid) {
$wechatUsers = UserWechat::query()
->where('unionid', $user->unionid)
->get();
if ($wechatUsers->isNotEmpty()) {
foreach ($wechatUsers as $wechatUser) {
if ($wechatUser->official) {
if ($wechatUser->official->subscribe != 1) {
$wechatUser->official->update([
'subscribe' => 1,
'subscribed_at' => Carbon::parse($user->subscribe_time)->toDateTimeString(),
]);
}
} else {
$wechatUser->official()->create([
'openid' => $this->payload->FromUserName,
'subscribe' => 1,
'subscribed_at' => Carbon::parse($user->subscribe_time)->toDateTimeString(),
]);
}
}
}
//插入关注数据
$this->setUserSubscribe($user->unionid, $this->payload->FromUserName, 1);
} else {
// 先查找用户是否存在,不存在再注册
$officialUsers = UserWechatOfficial::query()
->where('openid', $this->payload->FromUserName)
->get();
//设置总表uniond
if ($officialUsers->isNotEmpty()) {
foreach ($officialUsers as $officialUser) {
if (! $officialUser->userWechat->unionid && $user->unionid) {
$officialUser->userWechat->update([
'unionid' => $user->unionid
]);
}
if ($officialUser->subscribe != 1) {
$officialUser->update([
'subscribe' => 1,
'subscribed_at' => Carbon::parse($user->subscribe_time)->toDateTimeString(),
]);
}
}
}
}
return $this->firstSubscribeMessage();
}
/**
* Notes: 取消关注事件
*
* @Author: 玄尘
* @Date: 2022/7/27 9:41
*/
private function unsubscribe()
{
$officialUsers = UserWechatOfficial::where('openid', $this->payload->FromUserName)->get();
if ($officialUsers->isNotEmpty()) {
foreach ($officialUsers as $officialUser) {
$officialUser->update([
'subscribe' => 0,
'subscribed_at' => null,
]);
//设置取消关注
if ($officialUser->userWechat) {
$this->setUserSubscribe($officialUser->userWechat->unionid, $officialUser->openid, 0);
}
}
}
}
/**
* Notes: 关注返回的消息
*
* @Author: 玄尘
* @Date: 2022/8/2 11:37
* @return Text
*/
private function firstSubscribeMessage()
{
$officialUser = UserWechatOfficial::where('openid', $this->payload->FromUserName)->first();
$text = new Text('扎西德勒感谢关注锶源昆仑。锶源昆仑天然饮用水水源地位于海拔4300米的昆仑山水中富含镁离子、锶元素、钙元素等微量元素且氘含量低稀世罕见仅供30000人饮用。
参与打卡“锶享体验官”活动,请点击公众号菜单上的按钮“锶享体验官”进入活动,来申请喝水体验官吧!');
if ($officialUser && $officialUser->userWechat) {
$nickname = $officialUser->userWechat->nickname;
$text = new Text('扎西德勒!'.$nickname.'感谢关注锶源昆仑。锶源昆仑天然饮用水水源地位于海拔4300米的昆仑山水中富含镁离子、锶元素、钙元素等微量元素且氘含量低稀世罕见仅供30000人饮用。
参与打卡“锶享体验官”活动,请点击公众号菜单上的按钮“锶享体验官”进入活动,来申请喝水体验官吧!');
}
return $text;
}
}