// +---------------------------------------------------------------------- declare (strict_types = 1); namespace addon\wxchat\controller\api; use addon\wxchat\model\WxchatGift; use addon\wxchat\model\WxchatGiftRecord; use think\facade\Db; use think\facade\Request; use ywxapp\controller\FrontendBase; use ywxapp\service\WalletService; /** * Gift 类 * * @author ywxapp */ class Gift extends FrontendBase { protected $noNeedLogin = []; protected $noNeedVerify = ['*']; protected function initialize() { if ($this->auth->isLogin) { $this->uid = $this->auth->model->uid; } } private $uid = 0; /** * 礼物商城列表 */ public function index() { $list = WxchatGift::where('status', 1) ->order('sort', 'asc') ->field('id,name,icon,price') ->select(); $this->success($list); } /** * 赠送礼物(扣金币 + 记录) */ public function send() { $uid = $this->uid; $giftId = (int) Request::post('gift_id', 0); $toUid = (int) Request::post('to_uid', 0); $count = max(1, (int) Request::post('count', 1)); $msg = (string) Request::post('message', ''); if (! $toUid || $toUid == $uid) { $this->error('接收者无效'); } $gift = WxchatGift::where('id', $giftId)->where('status', 1)->find(); if (! $gift) { $this->error('礼物不存在'); } $receiver = Db::name('member')->where('uid', $toUid)->value('uid'); if (! $receiver) { $this->error('接收用户不存在'); } $total = (int) $gift->price * $count; try { WalletService::decCoins($uid, $total, "赠送礼物:{$gift->name}x{$count}"); } catch (\Throwable $e) { $this->error($e->getMessage()); } $record = new WxchatGiftRecord(); $record->sender_uid = $uid; $record->receiver_uid = $toUid; $record->gift_id = $gift->id; $record->gift_name = $gift->name; $record->price = $gift->price; $record->count = $count; $record->total_price = $total; $record->message = $msg; $record->save(); $this->success([ 'gift' => $gift->name, 'count' => $count, 'cost' => $total, 'coins_left'=> WalletService::getCoins($uid), ], '赠送成功'); } /** * 我收到的礼物 */ public function received() { $uid = $this->uid; $list = WxchatGiftRecord::where('receiver_uid', $uid) ->order('create_at', 'desc') ->limit(50) ->select(); $this->success($list); } }