860 lines
43 KiB
PHP
Executable File
860 lines
43 KiB
PHP
Executable File
<?php
|
|
|
|
namespace app\controller\api;
|
|
|
|
use think\facade\Cache;
|
|
use laytp\controller\Api;
|
|
use think\facade\Log;
|
|
use think\facade\Db;
|
|
use app\service\Telegram as Telegrambot;
|
|
use think\facade\Request;
|
|
use app\service\Customer;
|
|
|
|
/**
|
|
* @ApiInternal ()
|
|
*/
|
|
class Telegram extends Api
|
|
{
|
|
|
|
public $noNeedLogin = ['callback', 'setwebhook', 'task','tijiao','billusdt', 'apicallback', 'admincallback'];
|
|
|
|
|
|
public function send()
|
|
{
|
|
$userlist = Db::name('push')->limit(5)->select();
|
|
foreach ($userlist as $value) {
|
|
|
|
$Telegram = new Telegrambot($value['botkey']);
|
|
$Telegram->sendMessage($value['userid'], $value['text']);
|
|
Db::name('push')->where('id', $value['id'])->delete();
|
|
}
|
|
}
|
|
public function tijiao(){
|
|
$Customer=new Customer();
|
|
// $reqx = $Customer->submitkt('384', '0772ce075192dca13187ad2823d87cab','8032909529',time(), 15, '@zf789', 0, 'https://premium.konline.top/');
|
|
|
|
//var_dump("222222",$reqx);
|
|
}
|
|
public function billusdt(){
|
|
//查询所有机器人的地址
|
|
$addinfo_all = Db::name("admin_bot")->cache(120)->whereNull('delete_time')->select();
|
|
$xiayige=Cache::get("sxiyigejuhu");
|
|
if($xiayige==null){
|
|
$xiayige=0;
|
|
}
|
|
if(empty($addinfo_all[$xiayige])){
|
|
$xiayige=-1;
|
|
}else{
|
|
$valuex=$addinfo_all[$xiayige];
|
|
}
|
|
Cache::set("sxiyigejuhu",$xiayige+1,200);
|
|
|
|
if(!empty($valuex)){
|
|
$ym= $this->getbill($valuex['trxadd']);
|
|
//var_dump($valuex['trxadd'],$ym);
|
|
|
|
foreach ($ym as $key => $value) {
|
|
// code...
|
|
$transaction_id=$value['transaction_id'];
|
|
$timestamp = $value['block_ts'] / 1000;
|
|
$tokenName= isset($value['trigger_info']['method'])?$value['trigger_info']['method']:null;
|
|
if($tokenName=="transfer(address _to,uint256 _value)"){
|
|
//var_dump($value,$timestamp);
|
|
if($timestamp+600>time()){
|
|
if (!Db::name("k_chuliok")->where("transaction_id", $transaction_id)->find()) {
|
|
$addinfo =$valuex;
|
|
$money = $value['quant'] / 1000000;
|
|
$address = $value['to_address'];
|
|
$amount = $value['quant'] / 1000000;
|
|
$formAmount = number_format($money, 5, '.', '');
|
|
$transaction_id = $value['transaction_id'];
|
|
$from = $value['from_address'];
|
|
$to = $value['to_address'];
|
|
$timestamp = $value['block_ts'] / 1000;
|
|
$Telegram = new Telegrambot($addinfo['botkey']);
|
|
$Customer=new Customer();
|
|
|
|
|
|
//防止二次处理 涉及到钱
|
|
Db::name("k_chuliok")->insert(['transaction_id' => $transaction_id, "from" => $from, "to" => $to, "money" => $amount]);
|
|
//查询没有处理的订单
|
|
$order = Db::name("order")->where('botid', $addinfo['botid'])->where([["end_time", ">=", time()], ["trxadd", "=", $address], ["paymoney", "=", $formAmount], ["start", "=", 0]])->find();
|
|
|
|
|
|
if (!empty($order["id"])) {
|
|
Cache::set($order["order_no"], $order["order_no"], 320);
|
|
Db::name("order")->where("id", $order["id"])->update(array("start" => 1));
|
|
$xianshi = "USDT-TRC20";
|
|
$typeoto = "转入";
|
|
$dhshi = date("Y-m-d H:i:s ", $timestamp);
|
|
$bbaoadd = $from;
|
|
$usr = "https://tronscan.org/#/transaction/" . $transaction_id;
|
|
$tancan = isset($order["tancan"]) ? $order["tancan"] : "无";
|
|
$pushu = "交易成功
|
|
商品标题:<strong>" . $order["name"] . "</strong>
|
|
开通时间:<strong>" . $tancan . "</strong>
|
|
订单:<strong>" . $order["order_no"] . "</strong>
|
|
代币:<strong>" . $xianshi . "</strong>
|
|
时间:<strong>" . $dhshi . "</strong>
|
|
金额:<strong>" . $formAmount . "</strong> " . $xianshi . "
|
|
类型:" . $typeoto . "
|
|
提醒地址:<code>" . $address . "</code>
|
|
" . $typeoto . "地址:<code>" . $bbaoadd . "</code>" . "\r\n" . "\r\n" . '<a href="' . $usr . '">查询详细信息</a>';
|
|
$Telegram->sendMessage($addinfo['botad'], $pushu);
|
|
$info = Db::name("order")->where("id", $order["id"])->find();
|
|
$tmuid = Db::name("conf")->where("key", 'tmuid')->value('value');
|
|
$tmkey = Db::name("conf")->where("key", 'tmkey')->value('value');
|
|
$cycleMap = ['3' => '0', '6' => '1', '12' => '2'];
|
|
$mappedValue = $cycleMap[$info['tancan']] ?? '3';
|
|
//区分是批量 还是单个
|
|
if ($order['moth'] == "pkaihuiy") { //批量开通
|
|
$dakai = json_decode($order['username'], true);
|
|
foreach ($dakai as $key => $value) {
|
|
|
|
$reqx = $Customer->submitkt($tmuid, $tmkey, $addinfo['botid'],$info["order_no"], $order['danprice'], "@" . $value, $mappedValue, $addinfo['apiurl']);
|
|
if ($reqx['code'] == 0) {
|
|
$Telegram->sendMessage($addinfo['botad'], $reqx['msg'] . "\r\n" . "单号:<code>" . $order["order_no"] . "</code>" . "\r\n" . "用户名:<code>" . $order['username'] . "</code>" . "\r\n" . "开通时间:<code>" . $order['tancan'] . "</code>" . "\r\n" . "消费金额:<code>" . $order['money'] . "</code>" . "\r\n" . "处理方法:充值余额后手动提交给机器人代替客户开通");
|
|
//return true;
|
|
$Telegram->sendMessage($order['userid'], "订单提交成功!请联系客服,尽快处理!单号:<code>" . $order["order_no"] . "</code>");
|
|
} else {
|
|
$Telegram->sendMessage($order['userid'], $reqx['msg']);
|
|
//return true;
|
|
}
|
|
}
|
|
}
|
|
if ($order['moth'] == "huiyuangoumaai") { //单个会员开通
|
|
|
|
$reqx = $Customer->submitkt($tmuid, $tmkey, $addinfo['botid'],$info["order_no"], $info['money'], $info['username'], $mappedValue, $addinfo['apiurl']);
|
|
var_dump($reqx);
|
|
if ($reqx['code'] == 0) {
|
|
$Telegram->sendMessage($addinfo['botad'], $reqx['msg'] . "\r\n" . "单号:<code>" . $info["order_no"] . "</code>" . "\r\n" . "用户名:<code>" . $info['username'] . "</code>" . "\r\n" . "开通时间:<code>" . $info['tancan'] . "</code>" . "\r\n" . "消费金额:<code>" . $info['money'] . "</code>" . "\r\n" . "处理方法:充值余额后手动提交给机器人代替客户开通");
|
|
//return true;
|
|
$Telegram->sendMessage($info['userid'], "订单提交成功!请联系客服,尽快处理!单号:<code>" . $order["order_no"] . "</code>");
|
|
} else {
|
|
$Telegram->sendMessage($info['userid'], $reqx['msg']);
|
|
//return true;
|
|
}
|
|
}
|
|
//余额充值
|
|
if($order['moth'] == "yuepay"){
|
|
$Customer-> ChangeMoney($info['userid'], 'member', "+", $amount, $addinfo['botid'], "u充值");
|
|
$Telegram->sendMessage($info['userid'], "充值成功了 【".$amount."】");
|
|
var_dump($info,"1111");exit();
|
|
}
|
|
|
|
if (!empty($info['smessage_id'])) {
|
|
$Telegram->deleteMessage($info['userid'], $info['smessage_id']);
|
|
}
|
|
if (!empty($info['message_id'])) {
|
|
$Telegram->deleteMessage($info['userid'], $info['message_id']);
|
|
}
|
|
return json(['code' => 'success']);
|
|
} else {
|
|
$xianshi = "USDT-TRC20";
|
|
$typeoto = "转入";
|
|
$dhshi = date("Y-m-d H:i:s ", $timestamp);
|
|
$bbaoadd = $from;
|
|
$usr = "https://tronscan.org/#/transaction/" . $transaction_id;
|
|
$pushu = "发现新的交易
|
|
<strong>没有匹配到订单</strong>
|
|
代币:<strong>" . $xianshi . "</strong>
|
|
时间:<strong>" . $dhshi . "</strong>
|
|
金额:<strong>" . $formAmount . "</strong> " . $xianshi . "
|
|
类型:" . $typeoto . "
|
|
提醒地址:<code>" . $address . "</code>
|
|
" . $typeoto . "地址:<code>" . $bbaoadd . "</code>" . "\r\n" . "\r\n" . '<a href="' . $usr . '">查询详细信息</a>';
|
|
|
|
if ($amount > 0.9) {
|
|
//var_dump($pushu,$addinfo,$amount);
|
|
$Telegram->sendMessage($addinfo['botad'], $pushu, null, null, 'HTML', true);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// return json(['code'=>'success']);
|
|
var_dump("处理ok success");
|
|
//return $this->success("处理ok success");
|
|
|
|
|
|
|
|
|
|
|
|
}else{
|
|
var_dump("处理了 跳出");
|
|
break;
|
|
}
|
|
}else{
|
|
var_dump("跳过 超时".$valuex['trxadd']);
|
|
break;
|
|
}
|
|
}
|
|
// var_dump($transaction_id);
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
public function getbill($trxadd){
|
|
if(strlen($trxadd)<20){
|
|
return [];
|
|
}
|
|
$url= "https://apilist.tronscanapi.com/api/filter/trc20/transfers?limit=20&start=0&sort=-timestamp&count=true&filterTokenValue=0&relatedAddress=".$trxadd;
|
|
$ym=json_decode(file_get_contents($url),true) ;
|
|
$retdata=isset($ym['token_transfers'])?$ym['token_transfers']:null;
|
|
return $retdata;
|
|
|
|
}
|
|
public function curl_get($url, $data = [])
|
|
{
|
|
// 处理get数据
|
|
if (!empty($data)) {
|
|
$url = $url . '?' . http_build_query($data);
|
|
}
|
|
$curl = curl_init();
|
|
curl_setopt($curl, CURLOPT_URL, $url);
|
|
curl_setopt($curl, CURLOPT_HEADER, false);
|
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
|
|
$result = curl_exec($curl);
|
|
curl_close($curl);
|
|
return $result;
|
|
}
|
|
public function admincallback()
|
|
{
|
|
var_dump('success');exit;
|
|
$data = $this->request->only(['to', 'from', 'money', 'hash', 'method', 'contract_address', 'paytype', 'timestamp']);
|
|
if ($data['contract_address'] == "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t") {
|
|
if ($data['method'] == "transfer(address _to,uint256 _value)") {
|
|
if ($data['paytype'] == "in") {
|
|
$money = $data['money'] / 1000000;
|
|
$address = $data['to'];
|
|
$amount = $data['money'] / 1000000;
|
|
$formAmount = number_format($money, 5, '.', '');
|
|
$transaction_id = $data['hash'];
|
|
$from = $data['from'];
|
|
$to = $data['to'];
|
|
$timestamp = $data['timestamp'] / 1000;
|
|
//通过地址获取到机器人的信息
|
|
$addinfo = Db::name("admin_bot")->where('trxadd', $address)->find();
|
|
|
|
$Telegram = new Telegrambot($addinfo['botkey']);
|
|
$Customer=new Customer();
|
|
if (!empty($addinfo['trxadd'])) {
|
|
|
|
if (!Db::name("k_chuliok")->where("transaction_id", $transaction_id)->find()) {
|
|
|
|
//防止二次处理 涉及到钱
|
|
Db::name("k_chuliok")->insert(['transaction_id' => $transaction_id, "from" => $from, "to" => $to, "money" => $amount]);
|
|
//查询没有处理的订单
|
|
$order = Db::name("order")->where('botid', $addinfo['botid'])->where([["end_time", ">=", time()], ["trxadd", "=", $address], ["paymoney", "=", $formAmount], ["start", "=", 0]])->find();
|
|
|
|
// var_dump($order,$formAmount);
|
|
if (!empty($order["id"])) {
|
|
Cache::set($order["order_no"], $order["order_no"], 320);
|
|
Db::name("order")->where("id", $order["id"])->update(array("start" => 1));
|
|
$xianshi = "USDT-TRC20";
|
|
$typeoto = "转入";
|
|
$dhshi = date("Y-m-d H:i:s ", $timestamp);
|
|
$bbaoadd = $data['from'];
|
|
$usr = "https://tronscan.org/#/transaction/" . $data['hash'];
|
|
$tancan = isset($order["tancan"]) ? $order["tancan"] : "无";
|
|
$pushu = "交易成功
|
|
商品标题:<strong>" . $order["name"] . "</strong>
|
|
开通时间:<strong>" . $tancan . "</strong>
|
|
订单:<strong>" . $order["order_no"] . "</strong>
|
|
代币:<strong>" . $xianshi . "</strong>
|
|
时间:<strong>" . $dhshi . "</strong>
|
|
金额:<strong>" . $formAmount . "</strong> " . $xianshi . "
|
|
类型:" . $typeoto . "
|
|
提醒地址:<code>" . $address . "</code>
|
|
" . $typeoto . "地址:<code>" . $bbaoadd . "</code>" . "\r\n" . "\r\n" . '<a href="' . $usr . '">查询详细信息</a>';
|
|
$Telegram->sendMessage($addinfo['botad'], $pushu);
|
|
$info = Db::name("order")->where("id", $order["id"])->find();
|
|
$tmuid = Db::name("conf")->where("key", 'tmuid')->value('value');
|
|
$tmkey = Db::name("conf")->where("key", 'tmkey')->value('value');
|
|
$cycleMap = ['3' => '0', '6' => '1', '12' => '2'];
|
|
$mappedValue = $cycleMap[$info['tancan']] ?? '3';
|
|
//区分是批量 还是单个
|
|
if ($order['moth'] == "pkaihuiy") { //批量开通
|
|
$dakai = json_decode($order['username'], true);
|
|
foreach ($dakai as $key => $value) {
|
|
|
|
$reqx = $Customer->submitkt($tmuid, $tmkey, $addinfo['botid'],$info["order_no"], $order['danprice'], "@" . $value, $mappedValue, $addinfo['apiurl']);
|
|
if ($reqx['code'] == 0) {
|
|
$Telegram->sendMessage($addinfo['botad'], $reqx['msg'] . "\r\n" . "单号:<code>" . $order["order_no"] . "</code>" . "\r\n" . "用户名:<code>" . $order['username'] . "</code>" . "\r\n" . "开通时间:<code>" . $order['tancan'] . "</code>" . "\r\n" . "消费金额:<code>" . $order['money'] . "</code>" . "\r\n" . "处理方法:充值余额后手动提交给机器人代替客户开通");
|
|
//return true;
|
|
$Telegram->sendMessage($order['userid'], "订单提交成功!请联系客服,尽快处理!单号:<code>" . $order["order_no"] . "</code>");
|
|
} else {
|
|
$Telegram->sendMessage($order['userid'], $reqx['msg']);
|
|
//return true;
|
|
}
|
|
}
|
|
}
|
|
if ($order['moth'] == "huiyuangoumaai") { //单个会员开通
|
|
|
|
$reqx = $Customer->submitkt($tmuid, $tmkey, $addinfo['botid'],$info["order_no"], $info['money'], $info['username'], $mappedValue, $addinfo['apiurl']);
|
|
//var_dump($reqx);
|
|
if ($reqx['code'] == 0) {
|
|
$Telegram->sendMessage($addinfo['botad'], $reqx['msg'] . "\r\n" . "单号:<code>" . $info["order_no"] . "</code>" . "\r\n" . "用户名:<code>" . $info['username'] . "</code>" . "\r\n" . "开通时间:<code>" . $info['tancan'] . "</code>" . "\r\n" . "消费金额:<code>" . $info['money'] . "</code>" . "\r\n" . "处理方法:充值余额后手动提交给机器人代替客户开通");
|
|
//return true;
|
|
$Telegram->sendMessage($info['userid'], "订单提交成功!请联系客服,尽快处理!单号:<code>" . $order["order_no"] . "</code>");
|
|
} else {
|
|
$Telegram->sendMessage($info['userid'], $reqx['msg']);
|
|
//return true;
|
|
}
|
|
}
|
|
|
|
//余额充值
|
|
if($order['moth'] == "yuepay"){
|
|
$Customer-> ChangeMoney($info['userid'], 'member', "+", $amount, $addinfo['botid'], "u充值");
|
|
$Telegram->sendMessage($info['userid'], "充值成功了 【".$amount."】");
|
|
var_dump($info,"1111");exit();
|
|
}
|
|
|
|
if (!empty($info['smessage_id'])) {
|
|
$Telegram->deleteMessage($info['userid'], $info['smessage_id']);
|
|
}
|
|
if (!empty($info['message_id'])) {
|
|
$Telegram->deleteMessage($info['userid'], $info['message_id']);
|
|
}
|
|
return json(['code' => 'success']);
|
|
} else {
|
|
$xianshi = "USDT-TRC20";
|
|
$typeoto = "转入";
|
|
$dhshi = date("Y-m-d H:i:s ", $timestamp);
|
|
$bbaoadd = $data['from'];
|
|
$usr = "https://tronscan.org/#/transaction/" . $data['hash'];
|
|
$pushu = "发现新的交易
|
|
<strong>没有匹配到订单</strong>
|
|
代币:<strong>" . $xianshi . "</strong>
|
|
时间:<strong>" . $dhshi . "</strong>
|
|
金额:<strong>" . $formAmount . "</strong> " . $xianshi . "
|
|
类型:" . $typeoto . "
|
|
提醒地址:<code>" . $address . "</code>
|
|
" . $typeoto . "地址:<code>" . $bbaoadd . "</code>" . "\r\n" . "\r\n" . '<a href="' . $usr . '">查询详细信息</a>';
|
|
|
|
if ($amount > 0.9) {
|
|
//var_dump($pushu,$addinfo,$amount);
|
|
$Telegram->sendMessage($addinfo['botad'], $pushu, null, null, 'HTML', true);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// return json(['code'=>'success']);
|
|
return $this->success("处理ok success");
|
|
}else{
|
|
return $this->success("已被处理 success");
|
|
}
|
|
} else {
|
|
return $this->success('ok success 地址没有绑定机器人');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//var_dump($data);
|
|
|
|
}
|
|
public function apicallback()
|
|
{
|
|
|
|
$data = $this->request->only(['uid', 'umoney', 'start', 'username', 'orderid']);
|
|
$tmuid = Db::name("conf")->where("key", 'tmuid')->value('value');
|
|
if ($tmuid != $data['uid']) {
|
|
return $this->error('uid 错误');
|
|
}
|
|
if ($data['start'] == 2) {
|
|
//验证单号
|
|
$odder = Db::name('ok_order')->where("order_no", $data['orderid'])->find();
|
|
if (empty($odder['order_no'])) {
|
|
return $this->error('订单不存在');
|
|
}
|
|
if ($odder['call'] == 1) {
|
|
return $this->error('订单已处理');
|
|
}
|
|
$odder = Db::name('order')->where("order_no", $odder['sn'])->find();
|
|
|
|
//更新订单状态 发送用户通知
|
|
$botid = $odder['botid'];
|
|
//查询机器人
|
|
$botinfo = Db::name("admin_bot")->cache(60)->where("botid", $botid)->whereNull('delete_time')->find();
|
|
$Telegram = new Telegrambot($botinfo['botkey']);
|
|
$msg = "会员开通成功了" . "\r\n" . "开通用户名:<strong>" . $data['username'] . "</strong>" . "\r\n" . "开通时间: <strong>" . $odder['tancan'] . "</strong>" . "\r\n" . "订单单号:<strong>" . $odder['order_no'] . "</strong>" . "\r\n" . "感谢您的支持!";
|
|
// var_dump($msg);exit();
|
|
$Telegram->sendMessage($odder['userid'], $msg);
|
|
//通知机器人管理员一份儿
|
|
if($odder['userid']!=$botinfo['botad']){
|
|
$Telegram->sendMessage($botinfo['botad'], "开通成功通知"."\r\n". "开通用户名:<strong>" . $data['username'] . "</strong>" . "\r\n" . "开通时间: <strong>" . $odder['tancan'] . "</strong>" . "\r\n" . "订单单号:<strong>" . $odder['order_no'] . "</strong>" );
|
|
}
|
|
|
|
|
|
Db::name('ok_order')->where("order_no", $data['orderid'])->update(['call' => 1]);
|
|
return $this->success('ok');
|
|
}
|
|
if ($data['start'] == 4) {
|
|
//退单
|
|
$odder = Db::name('ok_order')->where("order_no", $data['orderid'])->find();
|
|
if (empty($odder['order_no'])) {
|
|
return $this->error('订单不存在');
|
|
}
|
|
if ($odder['call'] == 1) {
|
|
return $this->error('订单已处理');
|
|
}
|
|
|
|
$botid = $odder['botid'];
|
|
$odder = Db::name('order')->where("order_no", $odder['sn'])->find();
|
|
//查询机器人
|
|
$botinfo = Db::name("admin_bot")->where("botid", $botid)->find();
|
|
$Telegram = new Telegrambot($botinfo['botkey']);
|
|
$msg = "会员开通失败了" . "\r\n" . "开通用户名:<strong>" . $data['username'] . "</strong>" . "\r\n" . "开通时间: <strong>" . $odder['tancan'] . "</strong>" . "\r\n" . "订单单号:<strong>" . $odder['order_no'] . "</strong>" . "\r\n" . "消费金额:" . $odder['paymoney'] . "[已退回余额]" . "\r\n" . "如需开通请联系客服手动开通";
|
|
$Customer=new Customer();
|
|
$Customer-> ChangeMoney($odder['userid'], 'member', "+", $odder['money'], $botid, "退款" . $data['username']);
|
|
|
|
$Telegram->sendMessage($odder['userid'], $msg);
|
|
Db::name('ok_order')->where("order_no", $data['orderid'])->update(['call' => 1]);
|
|
return $this->success('ok');
|
|
}
|
|
// var_dump($odder,$data,"222");
|
|
}
|
|
public function task()
|
|
{
|
|
$systemadd = Db::name("conf")->cache(600)->where("key", 'system')->value('value');
|
|
$conftask = cache::get("conftask");
|
|
if (empty($conftask)) {
|
|
if (!empty($systemadd)) {
|
|
if (preg_match('/^T(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]+$/', $systemadd)) {
|
|
//var_dump("4444","地址合规");
|
|
cache::set("conftask", $systemadd, 10);
|
|
$this->Queryamountchange($systemadd);
|
|
}
|
|
}
|
|
}
|
|
$this->send();
|
|
}
|
|
public function Queryamountchange($trxadd)
|
|
{
|
|
$curl = curl_init();
|
|
curl_setopt_array($curl, [
|
|
CURLOPT_URL => "https://api.trongrid.io/v1/accounts/" . $trxadd . "/transactions/trc20?only_to=true&limit=10&contract_address=TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_ENCODING => "",
|
|
CURLOPT_MAXREDIRS => 10,
|
|
CURLOPT_TIMEOUT => 30,
|
|
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
|
CURLOPT_CUSTOMREQUEST => "GET",
|
|
CURLOPT_HTTPHEADER => [
|
|
"Accept: application/json"
|
|
],
|
|
]);
|
|
$response = curl_exec($curl);
|
|
$err = curl_error($curl);
|
|
curl_close($curl);
|
|
if ($err) {
|
|
echo "cURL Error #:" . $err;
|
|
} else {
|
|
$hui = json_decode($response, true);
|
|
}
|
|
foreach ($hui["data"] as $key => $value) {
|
|
// var_dump($value);
|
|
$hash = $value['transaction_id'];
|
|
$timestamp = $value['block_timestamp'] / 1000 + 200;
|
|
|
|
if ($timestamp > time()) {
|
|
// 处理过的 写入缓存 过期即可 不处理
|
|
$chuliguo = Cache::get("chuliguodehaxi" . $hash);
|
|
if (!$chuliguo) {
|
|
$owner_address = $value['from'];
|
|
|
|
$to_address = $value['to'];
|
|
$amount = $value['value'] / 1000000;
|
|
|
|
if ($amount > 1) {
|
|
//查询 用户地址 对应的用户
|
|
$hot = Db::name("admin_bot")->where(['trxadd' => $owner_address])->find();
|
|
if ($value['type'] == "Transfer") {
|
|
if (isset($hot["id"])) {
|
|
$Customer=new Customer();
|
|
$Customer-> ChangeMoney($hot['botid'], 'admin', "+", $amount, "", "u充值");
|
|
Cache::set("chuliguodehaxi" . $hash, 1, 300);
|
|
$system = Db::name("conf")->where("key", 'botkey')->value('value');
|
|
$masterid = Db::name("conf")->where("key", 'masterid')->value('value');
|
|
if (!empty($system)) {
|
|
if (!empty($masterid)) {
|
|
$Telegram = new Telegrambot($system);
|
|
$msg = "充值成功" . "\r\n" . "来源:<code>" . $owner_address . "</code>" . "\r\n" . "金额:<code>" . $amount . "</code>" ."\r\n". "bot昵称:<code>" . $hot['name'] . "</code>" ."\r\n". "botbotuser:<code>" . $hot['botuser'] . "</code>" . "\r\n" . "请注意查看";
|
|
$Telegram->sendMessage($masterid, $msg);
|
|
}
|
|
}
|
|
} else {
|
|
//未找到用户 充值失败
|
|
$system = Db::name("conf")->where("key", 'botkey')->value('value');
|
|
$masterid = Db::name("conf")->where("key", 'masterid')->value('value');
|
|
if (!empty($system)) {
|
|
if (!empty($masterid)) {
|
|
$Telegram = new Telegrambot($system);
|
|
$msg = "充值订单为匹配" . "\r\n" . "来源:<code>" . $owner_address . "</code>" . "\r\n" . "金额:<code>" . $amount . "</code>" . "\r\n" . "请注意查看";
|
|
$Telegram->sendMessage($masterid, $msg);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// var_dump($owner_address,$to_address,$amount,$timestamp,$hash,$hot);
|
|
}
|
|
} else {
|
|
echo "已处理";
|
|
}
|
|
}
|
|
|
|
|
|
// code...
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
public function callback()
|
|
{
|
|
Log::record('测试日志信息');
|
|
$botid = Request::param("botid");
|
|
$parseMessage = $this->parseMessage();
|
|
//var_dump($parseMessage);
|
|
$className = 'app\service\plugins\Premium';
|
|
$botinfo = Db::name("admin_bot")->cache(120)->where("botid", $botid)->whereNull('delete_time')->find();
|
|
if(!empty($botinfo)){
|
|
$class = new $className($parseMessage['data'], $botid);
|
|
if (!empty($parseMessage["func"])) {
|
|
echo $parseMessage["func"];
|
|
call_user_func_array(array($class, "init"), $parseMessage["intparam"]);
|
|
if (method_exists($class, $parseMessage["func"])) {
|
|
|
|
call_user_func_array(array($class, $parseMessage["func"]), $parseMessage["param"]);
|
|
}
|
|
}
|
|
}else{
|
|
return $this->error('bot error');
|
|
}
|
|
|
|
|
|
// var_dump($parseMessage);
|
|
return $this->success('返回成功', ['action' => 'callback']);
|
|
}
|
|
public function setwebhook()
|
|
{
|
|
return $this->success('返回成功', ['action' => 'setwebhook']);
|
|
}
|
|
public function parseMessage()
|
|
{
|
|
$data = json_decode(file_get_contents("php://input"), true);
|
|
Log::record(Request::url() . file_get_contents("php://input") . "\n", FILE_APPEND);
|
|
if (isset($data['message'])) {
|
|
if (isset($data['message']['text'])) {
|
|
if (isset($data['message']['reply_to_message'])) {
|
|
$data['message']['chat']['reply_to_message'] = $data['message']['reply_to_message'];
|
|
}
|
|
|
|
|
|
/** 艾特处理 */
|
|
if (isset($data['message']['entities'])) {
|
|
foreach ($data['message']['entities'] as $entities) {
|
|
if ($entities['type'] == 'text_mention') {
|
|
$mentionUserId = $entities['user']['id'];
|
|
$mentionUserName = $entities['user']['first_name'];
|
|
}
|
|
if ($entities['type'] == 'mention') {
|
|
$tmp = mb_substr($data['message']['text'], $entities['offset'] + 1, $entities['length'], "utf-8");
|
|
$mentionUserId = $tmp;
|
|
$mentionUserName = $tmp;
|
|
}
|
|
$mentionUserId = isset($mentionUserId) ? $mentionUserId : "";
|
|
$mentionUserName = isset($mentionUserName) ? $mentionUserName : "";
|
|
$data['message']['at_array'][] = ['id' => $mentionUserId, 'name' => $mentionUserName];
|
|
$data['message']['at_ids'][] = $mentionUserId;
|
|
}
|
|
}
|
|
|
|
if ($data['message']['text'][0] == '/') {
|
|
$data['message']['text'] = str_replace("\n", " ", $data['message']['text']);
|
|
$messageExplode = explode(' ', $data['message']['text']);
|
|
$commandExplode = explode('@', $messageExplode[0]);
|
|
if (isset($commandExplode[1]) && $commandExplode[1] != BOTNAME)
|
|
exit();
|
|
|
|
$func = 'command';
|
|
$param = [
|
|
$commandExplode[0],
|
|
array(),
|
|
$data['message']['message_id'],
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
if (isset($messageExplode[1])) {
|
|
$param[1] = array_slice($messageExplode, 1);
|
|
}
|
|
} else {
|
|
if (isset($data['message']) && !isset($data['message']['reply_to_message'])) {
|
|
$func = 'message';
|
|
$param = [
|
|
$data['message']['text'],
|
|
$data['message']['message_id'],
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
} else {
|
|
$func = 'reply_message';
|
|
$param = [
|
|
$data['message']['text'],
|
|
$data['message']['message_id'],
|
|
$data['message']['reply_to_message']['text'],
|
|
$data['message']['reply_to_message']['message_id'],
|
|
$data['message']['reply_to_message']['date'],
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['reply_to_message']['from']['is_bot'],
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
}
|
|
}
|
|
} else if (isset($data['message']['new_chat_title'])) {
|
|
$func = 'new_chat_title';
|
|
$param = [
|
|
$data['message']['new_chat_title'],
|
|
$data['message']['message_id'],
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
} else if (isset($data['message']['new_chat_member'])) {
|
|
$func = 'new_member';
|
|
$param = [
|
|
$data['message']['new_chat_member'],
|
|
$data['message']['message_id'],
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
} else if (isset($data['message']['left_chat_member'])) {
|
|
$func = 'left_member';
|
|
$param = [
|
|
$data['message']['left_chat_member'],
|
|
$data['message']['message_id'],
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
} else if (isset($data['message']['sticker'])) {
|
|
$func = 'sticker';
|
|
$param = [
|
|
$data['message']['sticker'],
|
|
$data['message']['message_id'],
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
} else if (isset($data['message']['photo'])) {
|
|
$caption = '';
|
|
if (isset($data['message']['caption'])) {
|
|
$caption = $data['message']['caption'];
|
|
}
|
|
|
|
$func = 'photo';
|
|
$param = [
|
|
$data['message']['photo'],
|
|
$caption,
|
|
$data['message']['message_id'],
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
} else if (isset($data['message']['document'])) {
|
|
$caption = '';
|
|
if (isset($data['message']['caption'])) {
|
|
$caption = $data['message']['caption'];
|
|
}
|
|
|
|
$func = 'document';
|
|
$param = [
|
|
$data['message']['document'],
|
|
$caption,
|
|
$data['message']['message_id'],
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['message']['from'],
|
|
$data['message']['chat'],
|
|
$data['message']['date'],
|
|
];
|
|
}
|
|
} else if (isset($data['callback_query'])) {
|
|
if (isset($data['callback_query']['data'])) {
|
|
|
|
//['callback_query']['chat_instance']
|
|
|
|
$func = 'callback_query';
|
|
$param = [
|
|
$data['callback_query']['data'],
|
|
$data['callback_query']['id'],
|
|
$data['callback_query']['from'],
|
|
$data['callback_query']['message']['message_id'],
|
|
$data['callback_query']['message']['from'],
|
|
$data['callback_query']['message']['chat'],
|
|
$data['callback_query']['message']['date']
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['callback_query']['from'],
|
|
$data['callback_query']['message']['chat'],
|
|
$data['callback_query']['message']['date']
|
|
];
|
|
} else if (isset($data['callback_query']['game_short_name'])) {
|
|
$func = 'callback_game';
|
|
$param = [
|
|
$data['callback_query']['game_short_name'],
|
|
$data['callback_query']['id'],
|
|
$data['callback_query']['from']
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['callback_query']['from'],
|
|
$data['callback_query']['from'],
|
|
time()
|
|
];
|
|
}
|
|
} else if (isset($data['inline_query'])) {
|
|
$func = 'inline_query';
|
|
$param = [
|
|
$data['inline_query']['query'],
|
|
$data['inline_query']['offset'],
|
|
$data['inline_query']['id'],
|
|
$data['inline_query']['from']
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['inline_query']['from'],
|
|
$data['inline_query']['from'],
|
|
time()
|
|
];
|
|
} else if (isset($data['business_message'])) {
|
|
if (isset($data['business_message']['text'])) {
|
|
|
|
$data['business_message']['from']['business_connection_id'] = $data['business_message']['business_connection_id'];
|
|
|
|
if ($data['business_message']['text'][0] == '/') {
|
|
$data['business_message']['text'] = str_replace("\n", " ", $data['business_message']['text']);
|
|
$messageExplode = explode(' ', $data['business_message']['text']);
|
|
$commandExplode = explode('@', $messageExplode[0]);
|
|
if (isset($commandExplode[1]) && $commandExplode[1] != BOTNAME)
|
|
exit();
|
|
|
|
|
|
$func = 'qiye_command';
|
|
$param = [
|
|
$commandExplode[0],
|
|
array(),
|
|
$data['business_message']['message_id'],
|
|
$data['business_message']['from'],
|
|
$data['business_message']['chat'],
|
|
$data['business_message']['date'],
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['business_message']['from'],
|
|
$data['business_message']['chat'],
|
|
$data['business_message']['date'],
|
|
];
|
|
// var_dump($param,$initParam);
|
|
if (isset($messageExplode[1])) {
|
|
$param[1] = array_slice($messageExplode, 1);
|
|
}
|
|
} else {
|
|
|
|
if (isset($data['business_message']) && !isset($data['message']['reply_to_message'])) {
|
|
$func = 'business_message';
|
|
$param = [
|
|
$data['business_message']['text'],
|
|
$data['business_message']['message_id'],
|
|
$data['business_message']['from'],
|
|
$data['business_message']['chat'],
|
|
$data['business_message']['date'],
|
|
];
|
|
$initParam = [
|
|
$func,
|
|
$data['business_message']['from'],
|
|
$data['business_message']['chat'],
|
|
$data['business_message']['date'],
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (isset($func)) {
|
|
|
|
return array("func" => $func, "param" => $param, "intparam" => $initParam, "data" => $data);
|
|
} else {
|
|
return array("func" => null, "param" => null, "intparam" => null, "data" => null);
|
|
}
|
|
}
|
|
}
|