editMessageText($res); } //三斤账单 $pattern = "/^topup@@sj_bill_\d+$/"; if (preg_match($pattern, $data)) { $page = preg_replace('/^topup@@sj_bill_/', '', $data); if (empty($page) || $page < 1) $page = 1; $page = intval($page); $res = SanJinRechargeService::bill($chatId, $firstName, $messageId, $page); $telegram->editMessageText($res); } // 支付通道 $pattern = '/^topup_channel@@(.+)$/'; if (preg_match($pattern, $data, $matches)) { $k = $matches[1]; // 验证 $k 是否有效 $channel = SanJinService::$CHANNEL; if (!isset($channel[$k])) { // 处理无效的通道 $text = "无效的支付通道!"; $res = [ 'chat_id' => $chatId, 'text' => $text ]; $telegram->sendMessage($res); return; } Cache::put($chatId.'_sj_payment_type', $k); Cache::put(get_step_key($chatId), StepStatus::INPUT_RECHARGE_SJ_MONEY); $paymentType = $k; $product = SanJinService::$PRODUCT; $max = 0; $min = 0; $rate = 0; $rechargeText = ''; foreach ($product as $k => $v) { if ($v['type'] == $paymentType) { if($v['type'] == 'zfbge'){ $rechargeText = "充值金额:".implode($v['fixed'])." \n"; }else{ if ($min == 0) { $min = $v['min']; } if ($max == 0) { $max = $v['max']; } if ($min > $v['min']) { $min = $v['min']; } if ($max < $v['max']) { $max = $v['max']; } } } } $text = "请输入充值的金额 \n"; // $text .= "充值方式:".$channel[$k]; if($rechargeText){ $text .= $rechargeText; }else{ $text .= "充值金额:{$min} - {$max} \n"; } $text .= "🔔 提示:请务必核对(充值最大金额和最小金额,账号信息一致),若不一致无法到账。"; $res = [ 'chat_id' => $chatId, 'text' => $text, 'message_id' => $messageId ]; $telegram->editMessageText($res); } // //选择银行卡号 // $pattern = "/^withdrawAddress@@choose_qb_\d+$/"; // if (preg_match($pattern, $data)) { // $id = preg_replace('/^withdrawAddress@@choose_qb_/', '', $data); // $res = SanJinRechargeService::chooseBank($chatId, $id); // $telegram->deleteMessage([ // 'chat_id' => $chatId, // 'message_id' => $messageId, // ]); // $telegram->sendMessage($res); // } // //银行卡管理 // if ($data === 'withdraw@@banks') { // $res = SanJinRechargeService::banks($chatId, $messageId); // $telegram->editMessageText($res); // } // //银行卡详情 // $pattern = "/^withdrawAddress@@bank_detail\d+$/"; // if (preg_match($pattern, $data)) { // $id = preg_replace('/^withdrawAddress@@bank_detail/', '', $data); // $res = static::bankDetails($chatId, $messageId, $id); // $telegram->editMessageText($res); // } // $pattern = "/^withdraw@@bank_del_\d+$/"; // if (preg_match($pattern, $data)) { // $id = preg_replace('/^withdraw@@bank_del_/', '', $data); // $res = static::bankDelete($chatId, $messageId, $id); // $telegram->editMessageText($res); // } // //添加银行卡 // if ($data === "withdrawAddress@@bank_add") { // $res = SanJinRechargeService::addBank($chatId, $messageId); // $telegram->editMessageText($res); // } // $pattern = "/^withdrawAddress@@bank_choose_channel_.*$/"; // if (preg_match($pattern, $data)) { // $channel = preg_replace('/^withdrawAddress@@bank_choose_channel_/', '', $data); // $res = static::chooseChannel($chatId, $messageId, $channel); // $telegram->editMessageText($res); // } } public static function onMessage($chatId, $text, $messageId, $stepStatus) { switch ($stepStatus) { case StepStatus::INPUT_RECHARGE_SJ_MONEY://输入提现金额 $res = SanJinRechargeService::inputSjAmount($chatId, $text, $messageId); return $res; break; } return null; } //三斤账单 private static function bill($chatId, $firstName, $messageId, $page = 1, $limit = 5) { $list = PaymentOrder::where('member_id', $chatId) ->where('type', 1) ->orderByDesc('created_at') ->forPage($page, $limit) ->get(); $count = PaymentOrder::where('member_id', $chatId) ->where('type', 1) ->count(); $text = "👤 {$firstName}({$chatId}) 三斤充值记录\n\n"; foreach ($list as $item) { $amount = floatval($item->amount); $amount = $item->type == 2 ? "➖ {$amount}" : "➕ $amount"; $text .= "-------------------------------------\n"; $text .= "{$amount} \n"; $text .= "订单号:{$item->order_no}\n"; $text .= "支付平台:{$item->bank_name}\n"; // $text .= "银行:{$item->bank_name}\n"; // $text .= "姓名:{$item->account}\n"; // $text .= "卡号:{$item->card_no}\n"; $status = ['待处理', '处理中', '成功', '失败']; $text .= "状态:{$status[$item->status]}\n"; if ($item->remark) { $text .= "说明:{$item->remark}\n"; } $text .= "日期:{$item->created_at}\n"; } if ($page > 1) { $keyboard[] = [ ['text' => "👆上一页", 'callback_data' => "topup@@sj_bill_" . ($page - 1)] ]; } $allPage = ceil($count / $limit); if ($allPage > $page) { if ($page > 1) { $keyboard[count($keyboard) - 1][] = ['text' => "👇下一页", 'callback_data' => "topup@@sj_bill_" . ($page + 1)]; } else { $keyboard[] = [ ['text' => "👇下一页", 'callback_data' => "topup@@sj_bill_" . ($page + 1)] ]; } } $keyboard[] = [ ['text' => "返回", 'callback_data' => "topUp@@home"] ]; return [ 'chat_id' => $chatId, 'text' => $text, 'message_id' => $messageId, 'reply_markup' => json_encode(['inline_keyboard' => $keyboard]) ]; } //1.三斤充值 private static function qbApply($chatId, $messageId) { $three_payment_switch = Config::where('field', 'three_payment_switch')->first()->val; if ($three_payment_switch != 1) { $res = WalletService::getBalance($chatId); $res['message_id'] = $messageId; return $res; } $text = "请选择支付的通道 \n"; $keyboard = []; $channel = SanJinService::$CHANNEL; foreach($channel as $k => $v){ $keyboard[] = [ ['text' => $v, 'callback_data' => "topup_channel@@" .$k] ]; } $keyboard[] = [ ['text' => "返回", 'callback_data' => "topUp@@home"] ]; // $wallet = Wallet::where('member_id', $chatId)->first(); // $temp = floatval($wallet->available_balance); // $text = "请发送提现金额\n"; // $text .= "💰 当前余额{$temp} RMB\n"; // Cache::put(get_step_key($chatId), StepStatus::INPUT_WITHDRAW_QB_MONEY); return [ 'chat_id' => $chatId, 'text' => $text, 'message_id' => $messageId, 'reply_markup' => json_encode(['inline_keyboard' => $keyboard]) ]; } //2.输入三斤提现金额 private static function inputSjAmount($chatId, $amount, $messageId) { // 支付通道 $paymentType = Cache::get($chatId.'_sj_payment_type'); if(empty($paymentType)){ // 处理无效的通道 $text = "无效的支付通道!"; $res = [ 'chat_id' => $chatId, 'text' => $text ]; return $res; } // 验证 $k 是否有效 $channel = SanJinService::$CHANNEL; if (!isset($channel[$paymentType])) { // 处理无效的通道 $text = "无效的支付通道!"; $res = [ 'chat_id' => $chatId, 'text' => $text ]; return $res; return; } if (!preg_match('/^\d+(\.\d{1,2})?$/', $amount)) { return [ 'chat_id' => $chatId, 'text' => "金额输入不正确,请发送预充值数字", 'reply_to_message_id' => $messageId ]; } Cache::forget(get_step_key($chatId)); $res = PaymentOrderService::createPay($chatId,$amount,$paymentType); return $res; } //3.选择银行卡号 private static function chooseBank($chatId, $id) { $amount = Cache::get("{$chatId}_WITHDRAW_QB_MONEY", ''); if (!$amount) return WalletService::getBalance($chatId); $bank = Bank::where('id', $id)->first(); $result = PaymentOrderService::createPayout($chatId, $amount, $bank->channel, $bank->bank_name, $bank->account, $bank->card_no); return $result; // $text = "提交成功\n"; // $text .= "结果将在稍后通知您,请留意通知!!!"; // return [ // 'chat_id' => $chatId, // 'text' => $text, // ]; } //银行卡管理 private static function banks($chatId, $messageId) { $text = "💳️ 银行卡管理\n"; $text .= "--------------------------\n"; $list = Bank::where('member_id', $chatId) ->get(); $keyboard = []; foreach ($list as $item) { $keyboard[] = [['text' => "{$item->bank_name}({$item->card_no})", 'callback_data' => "withdrawAddress@@bank_detail{$item->id}"]]; } if (count($list) < 5) { $keyboard[] = [['text' => "➕ 添加银行卡", 'callback_data' => "withdrawAddress@@bank_add"]]; } $keyboard[] = [['text' => "↩️返回", 'callback_data' => "topUp@@home"]]; return [ 'chat_id' => $chatId, 'text' => $text, 'message_id' => $messageId, 'reply_markup' => json_encode(['inline_keyboard' => $keyboard]) ]; } //银行卡详情 private static function bankDetails($chatId, $messageId, $id) { $text = "*银行卡管理*\n\n"; $bank = Bank::where('id', $id) ->where('member_id', $chatId)->first(); switch ($bank->channel) { case "DF001": $text .= "姓名:{$bank->account}\n"; $text .= "银行:{$bank->bank_name}\n"; $text .= "卡号:{$bank->card_no}\n"; break; case "DF002": $text .= "姓名:{$bank->account}\n"; $text .= "银行:{$bank->bank_name}\n"; $text .= "账号:{$bank->card_no}\n"; break; default: $text .= "姓名:{$bank->account}\n"; $text .= "银行:{$bank->bank_name}\n"; $text .= "卡号:{$bank->card_no}\n"; break; } $keyboard = [ [['text' => '❌删除该地址', 'callback_data' => "withdraw@@bank_del_{$id}"]], [['text' => '↩️返回列表', 'callback_data' => 'withdraw@@banks']] ]; return [ 'chat_id' => $chatId, 'parse_mode' => 'MarkdownV2', 'text' => $text, 'reply_markup' => json_encode(['inline_keyboard' => $keyboard]), 'message_id' => $messageId ]; } //删除银行卡 private static function bankDelete($chatId, $messageId, $id) { Bank::where('id', $id) ->where('member_id', $chatId)->delete(); return static::banks($chatId, $messageId); } //添加银行卡 private static function addBank($chatId, $messageId) { $text = "请选择 提现通道\n"; $keyboard = [ [ ['text' => '银行卡', 'callback_data' => "withdrawAddress@@bank_choose_channel_DF001"], ['text' => '支付宝', 'callback_data' => "withdrawAddress@@bank_choose_channel_DF002"] ], [ ['text' => '❌取消', 'callback_data' => "message@@close"] ] ]; return [ 'chat_id' => $chatId, 'text' => $text, 'message_id' => $messageId, 'reply_markup' => json_encode(['inline_keyboard' => $keyboard]) ]; } //选择通道 private static function chooseChannel($chatId, $messageId, $channel) { Cache::put("{$chatId}_QB_WITHDRAW_CHANNEL", $channel); switch ($channel) { case "DF002"://支付宝 Cache::put("{$chatId}_QB_WITHDRAW_BANK_NAME", '支付宝'); Cache::put(get_step_key($chatId), StepStatus::QB_INPUT_CARD_NO); return [ 'chat_id' => $chatId, 'text' => "请输入支付宝账号", 'message_id' => $messageId, ]; break; case "DF001"://银行卡 Cache::put(get_step_key($chatId), StepStatus::QB_INPUT_BANK_NAME); return [ 'chat_id' => $chatId, 'text' => "请输入银行名称", 'message_id' => $messageId, ]; break; default: return [ 'chat_id' => $chatId, 'text' => "选择通道错误", 'message_id' => $messageId, ]; break; } } //输入银行名称 private static function inputBankName($chatId, $bankName, $messageId) { Cache::put("{$chatId}_QB_WITHDRAW_BANK_NAME", $bankName); Cache::put(get_step_key($chatId), StepStatus::QB_INPUT_CARD_NO); return [ 'chat_id' => $chatId, 'text' => "请输入银行卡号", 'message_id' => $messageId, ]; } //输入卡号 private static function inputCardNo($chatId, $cardNo, $messageId) { $channel = Cache::get("{$chatId}_QB_WITHDRAW_CHANNEL"); if ($channel === 'DF001' && !preg_match('/^\d+$/', $cardNo)) { return [ 'chat_id' => $chatId, 'text' => "输入的银行卡号有误,请重新输入", 'reply_to_message_id' => $messageId, ]; } Cache::put("{$chatId}_QB_WITHDRAW_CARD_NO", $cardNo); Cache::put(get_step_key($chatId), StepStatus::QB_INPUT_ACCOUNT); return [ 'chat_id' => $chatId, 'text' => "请输入姓名", 'message_id' => $messageId, ]; } //输入姓名,并保存到数据库 private static function inputAccount($chatId, $account, $messageId) { $channel = Cache::get("{$chatId}_QB_WITHDRAW_CHANNEL"); $cardNo = Cache::get("{$chatId}_QB_WITHDRAW_CARD_NO"); $bankName = Cache::get("{$chatId}_QB_WITHDRAW_BANK_NAME"); Bank::create([ 'member_id' => $chatId, 'account' => $account, 'channel' => $channel, 'card_no' => $cardNo, 'bank_name' => $bankName ]); return static::banks($chatId, $messageId); } }