usdt充值btc网络(非节点钱包地址)

1.此充值具有一定的交易风险(请一定做好判断)
步骤:用户绑定其他交易所的地址,往平台充值(只能使用用户绑定的钱包地址充值,否则无法确认充值成功),用户先填写充值金额->生成充值订单->通过平台设置的收币钱包地址充值->填写充值产生的hash值->根据hash值查询转账是否确认成功
【usdt充值btc网络(非节点钱包地址)】下边是数据表设计:

CREATE TABLE `yy_recharge` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) DEFAULT NULL COMMENT '用户id', `order_num` varchar(255) DEFAULT NULL COMMENT '充值单号', `usdt_order_num` varchar(255) DEFAULT NULL COMMENT 'USDT交易单号', `money` decimal(18,8) NOT NULL DEFAULT '0.00000000' COMMENT '充值金额', `sender` varchar(255) DEFAULT NULL COMMENT '充值地址', `recipient` varchar(255) DEFAULT NULL COMMENT '接受地址', `status` tinyint(4) DEFAULT '1' COMMENT '状态:1=确认中,2=确认成功,3=确认失败', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `qr_time` datetime DEFAULT NULL COMMENT '确认时间', `block_time` datetime DEFAULT NULL COMMENT '区块交易时间', `block_t_time` varchar(255) DEFAULT '' COMMENT '区块交易时间戳', `remarks` varchar(255) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`id`), UNIQUE KEY `ordernum` (`order_num`) ) ENGINE=InnoDB AUTO_INCREMENT=145 DEFAULT CHARSET=utf8;

omni_gettransaction omni_gettransaction调用获取指定Omni交易的详细信息。
txid:交易哈希,字符串,必需
/** * 获取交易详情 * @return mixed */ function gettransaction($txid){ return $this->usdt->omni_gettransaction($txid); }

usdt充值btc网络(非节点钱包地址)
文章图片

["txid"] => string(64) "c41525d0de0b5d5668f44995570184e6a4c52931a0ebb7e10205676f6bb9a40f"//16进制编码的交易哈希 ["fee"] => string(10) "0.00015975"//手续费 ["sendingaddress"] => string(34) "3KeC2JqGHqW6kuUBJKjAHmmfUThj2RiR1F"//发送方 ["referenceaddress"] => string(34) "18An5WWLHR59NpHdKzPoDjKLKULsMpP1ci"//接受方 ["ismine"] => bool(true)//交易是否与钱包内某个地址相关 ["version"] => int(0) ["type_int"] => int(0) ["type"] => string(11) "Simple Send" ["propertyid"] => int(31) ["divisible"] => bool(true) ["amount"] => string(10) "0.10000000"//转账金额 ["valid"] => bool(true)//交易是否有效 ["blockhash"] => string(64) "0000000000000000000158c6c5f5f58f912a03c9b4d6af383e9f727203ab4e1e" ["blocktime"] => int(1560766900)//区块时间戳 ["positioninblock"] => int(931) ["block"] => int(581098) ["confirmations"] => int(36)//区块确认书


最后就是做个定时器,定时扫描钱包地址,出现新的交易然后存入数据库。
如果不会写定时器,请参考我前段时间写的定时器:https://blog.csdn.net/jmkweb/article/details/89684225
下边附上定时扫描钱包,确认充值成功
setName('recharge') ->setDescription('usdt充值'); }protected function execute(Input $input, Output $output) { //每隔1000ms触发一次 $id = \swoole_timer_tick(5000, function ($timer_id) { try{ //file_put_contents('recharge.log',date('Y-m-d H:i:s').'进入定时'.PHP_EOL,FILE_APPEND); $recharge=Db::name('recharge')->where(['status'=>1,'usdt_order_num'=>['<>','']])->select(); foreach ($recharge as $v){ file_put_contents('recharge.log',date('Y-m-d H:i:s').'进入充值--'.$v['user_id'].'--ID--'.$v['id'].PHP_EOL,FILE_APPEND); //$post['query']=$v['usdt_order_num']; $usdt=(new Coins())->getCoins(); $rc=$usdt->omni_gettransaction($v['usdt_order_num']); if (!is_array($rc)){ $message='交易hash错误'; goto STOP; continue; } file_put_contents('recharge.log',date('Y-m-d H:i:s').json_encode($rc).PHP_EOL,FILE_APPEND); $message=''; if (!empty($rc)){ if ($rc['amount']!=$v['money']){ $message='充值金额错误'; goto STOP; continue; } #判断充值时间是否大于创建时间 $create_time=strtotime($v['create_time']); if ($rc['blocktime']<$create_time){ $message='充值时间异常'; goto STOP; continue; } if (!$rc['valid']){ $message='区块确认异常'; goto STOP; continue; } //if ($rc['sendingaddress']!=$v['sender']){ //$message='充值地址异常'; //goto STOP; //continue; //} if ($rc['referenceaddress']!=$v['recipient']){ $message='接受地址异常'; goto STOP; continue; } #判断交易是否有效 //if (!$rc->valid){ //continue; //} if ($rc['valid']){ file_put_contents('recharge.log',date('Y-m-d H:i:s').'充值成功--'.$v['user_id'].'--ID--'.$v['id'].PHP_EOL,FILE_APPEND); #交易成功 Db::name('recharge')->where(['id'=>$v['id']])->update(['status'=>2,'qr_time'=>date('YmdHis'),'block_t_time'=>$rc['blocktime'],'block_time'=>date('Y-m-d H:i:s',$rc['blocktime'])]); Db::name('users_asset')->where(['user_id'=>$v['user_id']])->setInc('usdt',$v['money']); $log=[ 'user_id'=>$v['user_id'], 'money'=>$v['money'], 'type'=>1, 'message'=>'充值', 'status'=>2, 'class'=>2, 'create_time'=>date('YmdHis') ]; Db::name('users_account_log')->insert($log); }else{ STOP: file_put_contents('recharge.log',date('Y-m-d H:i:s').'--'.$message.'--充值失败--'.$v['user_id'].'--ID--'.$v['id'].PHP_EOL,FILE_APPEND); Db::name('recharge')->where(['id'=>$v['id']])->update(['status'=>3,'remarks'=>$message]); } } } //file_put_contents('recharge.log',date('Y-m-d H:i:s').'退出定时'.PHP_EOL,FILE_APPEND); }catch (Exception $exception){ file_put_contents('recharge.log',date('Y-m-d H:i:s').$exception->getMessage().PHP_EOL,FILE_APPEND); } }); } }


    推荐阅读