bourse stock
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

384 lines
16 KiB

<?php
namespace app\home\service;
use app\model\PaymentListModel;
use app\model\RechargeApplyModel;
use app\model\StockMarketModel;
use app\model\UserWithdrawalModel;
use app\model\WalletListModel;
use app\utility\RsaUtility;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use think\facade\Db;
use think\facade\Log;
/**
* 处理团队佣金业务
*/
class TrcPayService extends BaseHomeService
{
public $http_url;
public $app_id;
public $private_key;
public $public_key;
public function __construct()
{
$key=env('WALLET.NAME');
$config=$this->getPayConfig($key);
$this->http_url=env('WALLET.HTTP_URL');
$this->app_id=$config['app_id'];
$this->private_key=$config['private_key'];
$this->public_key=$config['public_key'];
}
public function WalletAddress()
{
$num=WalletListModel::where([
'user_id'=>0,
'wallet_type'=>'TRC-20'
])->count();
if($num>100){
return false;
}
$url=$this->http_url."/wallet/get_address";
$data['version']="V3";
$data['time']=time();
$data['chain_name']='TRON';
$encrypt_str=json_encode($data);
$str=RsaUtility::Encrypt($encrypt_str,$this->private_key);
$post_data['app_id']=$this->app_id;
$post_data['data']=$str;
$res=$this->http_post_res($url,$post_data);
$result=json_decode(RsaUtility::Decrypt($res['data'],$this->public_key),true);
if($result['code']==0 && $result['message']=='SUCCESS'){
WalletListModel::InsertUserWalletAddress([
'user_id'=>0,
'wallet_type'=>'TRC-20',
'wallet_address'=>$result['data']['address']
]);
return true;
}else{
Log::error('钱包服务器返回数据异常 '.json_encode($result));
return false;
}
}
public function TrcpayNotify($data)
{
$result=json_decode(RsaUtility::Decrypt($data,$this->public_key),true);
//var_dump($result);
//充值
if($result['type']==1){
$user_id=WalletListModel::getUidByWallet([
'wallet_address'=>$result['to_address']
]);
if($user_id){
$channel=PaymentListModel::getPaymentInfo([
'channel_type'=>'TRC-20'
]);
//var_dump($channel);
if($result['symbol']=='USDT(TRC20)'){
$account_type=1;//默认充值到现货账户
return $this->dealRechangePay($user_id,$account_type,$channel,$result['amount'],$result['tx_hash']);
}
}
}else{
}
return 'SUCCESS';
}
public function dealOrderConfirm($data)
{
$result=json_decode(RsaUtility::Decrypt($data,$this->public_key),true);
$result_data['check_sum']=0;
//$result_data['check_sum']=$result['check_sum'];
if(!empty($result)){
$info=UserWithdrawalModel::getUserDrawalInfo([
'order_no'=>$result['request_id']
]);
if(!empty($info) && $info['apply_num']==$result['amount']){
$result_data['check_sum']= $result['check_sum'];
}
}
$result_data['check_sum']= $result['check_sum'];
$encrypt_str=json_encode($result_data);
$str=RsaUtility::Encrypt($encrypt_str,$this->private_key);
return [
'data'=>$str
];
}
public function TrcAgnetPay($amount,$wallet_address,$order_no)
{
$url=$this->http_url."/wallet/transfer";
$data['version']="V3";
$data['time']=time();
$data['to_address']=$wallet_address;
$data['amount']=$amount;
$data['symbol']='USDT(TRC20)';
$data['request_id']=$order_no;
$encrypt_str=json_encode($data);
//echo $encrypt_str;
$str=RsaUtility::Encrypt($encrypt_str,$this->private_key);
$post_data['app_id']=$this->app_id;
$post_data['data']=$str;
$res=$this->http_post_res($url,$post_data);
$result=json_decode(RsaUtility::Decrypt($res['data'],$this->public_key),true);
if($result['code']==0){
return [
'code'=>200,
'msg'=>'ok',
'order_idx'=>$result['data']['order_no'],
'content'=>json_encode($result)
];
}else{
return [
'code'=>300,
'msg'=>$result['message'],
'order_idx'=>'',
'content'=>json_encode($result)
];
}
}
public function getTrcBalance(){
$url=$this->http_url."/wallet/balance";
$data['version']="V3";
$data['symbol']='USDT(TRC20)';
$data['time']=time();
$encrypt_str=json_encode($data);
//echo $encrypt_str;
$str=RsaUtility::Encrypt($encrypt_str,$this->private_key);
$post_data['app_id']=$this->app_id;
$post_data['data']=$str;
$res=$this->http_post_res($url,$post_data);
$result=json_decode(RsaUtility::Decrypt($res['data'],$this->public_key),true);
if($result['code']==0){
return [
'amount'=>$result['data']['amount']
];
}else{
return [
'amount'=>0
];
}
}
private function dealRechangePay($user_id,$account_type,$channel,$amount,$tx_hash)
{
$ex_res=RechargeApplyModel::getOrderInfo([
'order_idx'=>$tx_hash
]);
if($ex_res){
return 'SUCCESS';
}
if($channel['pay_type']==1){
$fee= $amount * $channel['service_rate'] ;
}else{
$fee= $channel['service_rate'];
}
$total_amount=$amount;
$market_amount=$amount-$fee;
//var_dump($market_amount);
if($market_amount>0){
$rechange_data['user_id']=$user_id;
$rechange_data['account_type']=$account_type;
$rechange_data['recharge_type']=1;
$rechange_data['recharge_channel']=0;
$rechange_data['order_no']=$this->generateOrderNumber();
$rechange_data['order_idx']=$tx_hash;
$rechange_data['deal_time']=date('Y-m-d H:i:s');
$rechange_data['recharge_num']=$market_amount;
$rechange_data['currency_rate']=1;
$rechange_data['status']=1;
$rechange_data['market_amount']=$market_amount;
$rechange_data['service_fee']=$fee;
$rechange_data['total_amount']=$total_amount;
$res=RechargeApplyModel::AddUserRecharge($rechange_data);
//var_dump($res);
if($res){
Db::startTrans();
try {
$wallet_obj=new WalletService();
//查询提现资金账户信息
$account_info=$wallet_obj->lockUserBalance($account_type,$user_id);
if(empty($account_info)){
Db::rollback();
return 'FAIL';
}
$acc_update['usable_num']=$account_info['usable_num']+$market_amount;
$res=$wallet_obj->updateUserBalance($account_type,$acc_update,$user_id);
if(empty($res)){
Db::rollback();
return 'FAIL';
}
$log_data['user_id']=$user_id;
$log_data['change_type']=1; //充值
$log_data['change_num']=$market_amount;
$log_data['before_num']=$account_info['usable_num'];
$log_data['order_id']=$rechange_data['order_no'];
$res=$wallet_obj->addUserBalanceLog($account_type,$log_data);
if(empty($res)) Db::rollback();
Db::commit();
return 'SUCCESS';
} catch (\Exception $exception) {
// 回滚事务
Db::rollback();
return 'FAIL';
}
}else{
return 'FAIL';
}
}else{
return 'SUCCESS';
}
}
private function http_post_res($url, $postData)
{
try {
$client = new Client();
$response = $client->request("POST", $url,[
'json' => $postData,
]);
$body = $response->getBody()->getContents();
$res = json_decode($body, true);
return $res;
}catch (\Exception $exception){
Log::error('给钱包服务器发送数据异常1 '.$exception->getMessage());
} catch (GuzzleException $e) {
Log::error('给钱包服务器发送数据异常2 '.$e->getMessage());
}
}
private function getPayConfig($key){
$config=[
'test'=>[
'app_id'=>'MQ6fGxVZX1SbnYFxk1qH',
'private_key'=>'-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDOc+ILpnKhurA+
Rz1etWSC8bzbsyUzNFC7lSkpACRr3LlCoWbBXeRpgpWMwSW7B80QzvTTbZSr/Kk8
sTJeotKCBCu1O0NpmSlsVe+BVfKoluSzdOmDQa7fViX0tNU+shLuef5oX5jTE3FA
wCsLMrCYAYKvwUrylrHC4EX6IznL1MD5anHLUNqrUHonNsHx4ZYX16Wpwlst4f2s
XgVnrnesX7iPoupIUgWhcLdKFhIQI0XAY/aoALKy+YGREimxlpm/FxQcCWC1tZBe
cPGWjLicHbGmyOcFUXxc/4D0XmdS+Xcr9pFWHyHV5iRtM6WFoWHKLPaz5+fPrIaW
6hXRSPeJAgMBAAECggEABmkcxMXXW2RDorttkWpKg7Jj7eKDLjLaquh3zbkeaGcD
Lal7WlfDBu+yGxvIQyV73aC/g20sp6aBzsulx8CAjt74SHldn4LNAXsto7N6hHej
BFuGALhiaLbxGMcgtACti9An8S++vBcndh5Bd+iMCTxKxZBX9m5teKKkKZ88ZTLY
uopvvtP51rc2Wo3h9dF0h4DIjJeguChDNKdxgT+PCukZ2DZsn8qL+1xAqPj7MKg9
dukXLAmaa3nfcyKmc62cuIW/pRdZ6ZwI6rJ1p4/UwLLx93M9BXAMIJ+e37D0XtV+
KJ+dAMRbwezK4isaQJjC0Z8hhtzbC0VN5Ih1SwBSAQKBgQDzA8n/xB5pXiMO1o0r
h7GnkSQSvwFCa8y2Okbm/SnJue3iaIhJGatVIJoWwRb6LFMNzRf+uKl9c3MJGS0G
CzT4Azswp1vuNcKq2FtKpAhq3X3CZ50sAmIH5dyht/yT0Zna0zJ9HB7XpEZlEZJQ
GwJNGt2gMDwEdzY3JoCeoSzqwQKBgQDZe/VzAFAsRuGN0DFCa0Rkp/+s6PiI3yUV
g57V3n8blZZZUjgWRgc0mnjHYOlvfbyUJEnRzUcMWoj+8iieg4bxmVTChEbrxkbd
IQVhQJOcjbokiR1UhsN67CkZcPzNXirGuek8j190DJHvCl26F9gkHCHHu9ryzYlp
P47ZgSwmyQKBgQDKG4efIJOOXE1Z5NRJtLPqwco3kQVSIWeC0prvNvPPIsQWPYvD
CAc3aELe073xWHXGj6D6JshHXoH4uih40089SSqr/zR0u99nyUK7pAqgHg+eZCAS
XvT6zpAdK3Bz26lSlb1y0bVQ8P3exqth1eSnDcXumM8Bg8fiPDJSO4eowQKBgGv5
T+W1fRhOZIL8nsgj60Ox6IzW6TVC2+1veDckDKUMQiW8XR4pzEAAhQAvjBWPLkW6
MnAX4zMt65/vZ90y3ZcrEdq0w2Ug/mOglkQvRFnQP18ON+KUOY7YmpsH7mqjWsdo
23P2lmROLVGpKtlOJz/eO6MnD8/F3XfEV06DBAGJAoGAQSC0XLlqqgwr7kYQwjQN
HNulo7QRhU36Y13MRMoGQ0FdOzjwbOxnt3Ozu0qjnraaUsBUaeyNam3kqamL63UF
4559oHwShlqNUEj/X769827MMpRpgO2ZuRZ0Vbi41aSRPC/bPnVKxk1+rOcJ1ofO
0Zmj0Gz7P2v5BLO7m1dlhhw=
-----END PRIVATE KEY-----',
'public_key'=>'-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2MdaHtMSUnIJzmyhtHkQ
oR2ddffyU8UCATVnoKgcgzst55TvKmY2zCbjcf6cfJVIkYIEf5Wny3yhZbSEVRNg
GeEpB2N2QVYd3qdMVEa0Wq+rcrXzdzNy8uq0FzJMw114LPzF+OGKO8gKcmPnYKFm
4dbFxfIYhWQ+DaRJxgSZ6OaK5hFBXBlvUDLagn98ckdHvENhwuWaQ3Z2MpOhvO6z
qQLLj0VQU/LEkfnAcKpyy31iIfJxbMRop6DAJH+GXbhn5eARH8GDJLz32WkkqC8+
vIkQhZyQI7fjpqtQoMXr7C31lME0QGLEQcWZtt8PfzFzMeW9MEcBWuxF41Ghf8jC
SwIDAQAB
-----END PUBLIC KEY-----'
],
'bourse'=>[
'app_id'=>'bVzIS6lChCNXk6w',
'private_key'=>'-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCabCMxKsktrZQn
NkVYcu+UOI75uF4Jq6HoABNuTEXf7ff5SGTkJkLzk2lsPQwJQymX201uQV3FJqKg
HMMZwcFvfmNn2dapBgmyoO3fnWHxULVV04m+wFF7ol77c7llbvKTXnWZU3CEm42v
Bu0rIZrYmsWOvQN97LLfQmpfFGgbFP+fV8cQ2OaGC8r+BrBU2nzTVexlstBkaxEg
j15hlc5OC1sQvzpwnjmbydrL1LKEgMlwAAFLeEYhudb+ulaXGWG0Hm9YUEW0GAmD
eMaC6zgCI0rppLhGVTFrYnDCo0G3zoj+lqxVTgx3+u7dGKU63BLPuMEkzIdDizYQ
OJJ8YygbAgMBAAECggEAZscgaSIEAh3sZGjPoL3mzS0TpAtcs20DdqlORXQIcbEu
AUF4vQzmNL3hRcQf1a5Y6ZRxpbdl1MkRJiXeiK8XssBZIw6uu5KkM7q+d72FKZrB
Bl2j6UyRLwtz0kJEm8lLNGCDPsh1NB1gIKUohzN3n0DrykPtJgu7RbMrnxqy64p2
qKYVh3hwbOkxTjde5E0AvPxH7iO4gRvOBZ9NmtKiDAVDkdyNI9lxYokya95Ag4cm
FJeDUoF1N8Wiw9lcjIVVEXeL+pI+rAX0zM/3jln0MWdE8FnaKp3o9YZkZsPpv3yu
EuJC0xf8iDJI28t+jEVmfw64XkvAOrN+8inEyfUy2QKBgQDHr1DzRVxLxqFBLRoj
O+wflwA9LcZain/DPCG+zTeChcf5NPB5l+yDIkAubx6MvFlBbnJ7nSu+i0KiJ/Bg
BZncadaivUA3oAsx5VG0th8Zv1jrBwIFPpzS90avpbEYy6ru+YMT+uYXpgpmYDSh
8HqcO2xcoUz7nO+LvtIlCHjcxwKBgQDF+QB7XQVDymA2p+POQ0nPE6gS8StFwvs1
X/4F4CLBebRtcXvsj/NKqUva9682zCE08A9JTOp3UsqCA3gJEXFs/OBfgZKD/yoh
LmP81ANiJsNpcriEanE1tVifSID6oBkHPRgdsF1V6/C5/I6X6CPJh3Grh0t1/dW0
uEeOj7p+DQKBgGeq9PPXRptwe7dCmxc/vM6Jrm4Una3TyZCqXzqXgAIbQj525YG7
BebumTOCLPITtqLpnDXg2x0JX4agBYNUZRSxPeUvK2+1fxpgW5LeGjdbx+X8tWfT
ocdE6UW3V8HvusZmc06kK2CLq0qLF8ga+QyzLQbKFxVp3FNItgDT7StxAoGAcg75
xhlbtSjdsd+ckfOWjKWoifFEmxaxIJlDgyMVIx75YqylVy/AXd2YBHn7Crkk0JkW
VYbo9wJOBgX1nFPeY4p1wtCmF0JlhWRy2vFTWbM3loMv56pjuyvV+T8OgFbI1LDQ
OhqoS555vM3TYZWvOKa+SLLUORCblVkucOZB7ekCgYArqqbE+tjNaVJ25KVtgmf1
OswFLizTSmbzsyDvTT4BawgLbK/rOJB9fERujTNd0ZtM/uJ/MTgIWOaXxlA7SjX3
yeScRql1I+9mvUZh/BvFCsir0ElfnMiGuZ/k6jqq0nl/h0a2nScISjvNwZwg0elF
Zwuv1gWW/tQFCSdfF8ewBQ==
-----END PRIVATE KEY-----',
'public_key'=>'-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvhOR8XKjt5TH8wNpel26
vDvWgC428q+QGyY0tQcYqAna7fTB1ta5DB1a8MyWIkV9kqwzBJbND/rSVZLyW//e
K7DliUvcNCCksC5RTvVW2A+cpUTemNz9Oc/lFcsszac3XQXlvieTWg20ii4s89N9
vwr0fWi72umEtkDkpDcU/aGJWv5yxBl3OMeIPUqPiM+9quiWr5ZUqo6zlvtzWz1H
57IPdOxgGoRgCccaINt2PJVDFJ0d3L+ZQsKEKJY4OkhLAjKbuEDxuj0BcLVwnPr1
x52/dTSyUZca3nJOeaSRBEzOx5oqbbRfyUbzQhFu2UD/ZeDS4dIRmxPeDcF+5aJF
IQIDAQAB
-----END PUBLIC KEY-----'
],
'stock'=>[
'app_id'=>'mCy0zbuRRRstYGq',
'private_key'=>'-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDTu2XAYZ+hQkrl
mUP0xpSwg1wMxmTfXKeOQmmwfSgi2k5g/NlTblwoK+pVDaav1UXIEI5cThZWu+HT
ljPxZHSQlldSy/N34yE33ioTl1Bq7W10Yq6iOjJMybjqmARbbbdbNB5ktnb3DmmQ
ZxexV2Pj7XUrVDtagngH7JF1lEaK6zkbP8koxBOo/sBmvIsd6ps+B+5nMOnpYMNd
0dn1N6YJmjWKVbkRbNDM5BasJwTQ8kbYQ/XN0YhCdjixcrhpADDypkqQJ/AA2Ys+
8uEtnB1yZV+hbCMbbUDpZlsOagLmF3C7FywHxzXlkuzdTP/Til7tjnky0B1E4fv1
e3Ff5eTZAgMBAAECggEBAMkMSqQQjtk6749wpzyIS6wIL6HZyPLnMhs9KMpzLWda
z838ighU5KEoggxdOAgChY5hWix/4WpeYSLen1f5wU2B1E1EaF1QiLxZ8q5DohLG
fIZlJdnZVOXhLftkec6vMcoihTGwqOoS/14k5jR4/NrzIa0RAIMDHCK6Ga0CLLG+
yxR/D1kh/mzJ3g+l/smrfwSJKcglSAJA79sqCOirY26cTv8xabM1MqECClhhS1p2
o2BICiy1AyOR0pXS8Z5IvC3IEMJBs4XmkYHc1118w8Y97o+2EyY2LNLe5z3GvPgS
n2vFN+Wr9z1C4fUKnoW8W60VXacP+FTN14ydj4jRBHkCgYEA85ZhjLID0V9j/eIH
2mvAOzK/HULNYExNuLb461tda4fIHbcU93gCFvmf+BTbxRwsOJsYQ+Cd1NZe7OH4
JrXFrEUNh5oGz+UANTbIkWHFEUeyihe0dcbS2n4/7siY9gUU897zgdKIt3H5T9rP
9fuXTt0F2u7nGMYdOJPPO5czI08CgYEA3oV1vSI1HdYWsBUbcTSUQsU1r8YpoagH
kmwYTvm8KiizdI9VOQLj6xMRZCDidsYqrduT9fcce756R/QE7QEb6wsHFzfoHiCp
ZYfjYp6YouyU8snQzwVmO7JkvOZcWQedcoZGJ/ZadKOoGNWlXQn8WqQuTSw/1kta
nkPkhM7Xi1cCgYBopH+/q3HMbkhMdt+cy5FHXSOQ9HO6HM1+vsvsf9GAMlKbwVz2
es2bBR3du0g2Q0YUAzzHXCUxm+4noWOzbX8/5GJNkLPAd8ZBFgnPusqoA78FZ+2U
cxd92aKpd++OMNyxb2P4r3MgK4xI691O9QgpTvYG+X65u9ItzgHGvcuwLQKBgBBe
dvPL0WZ5ej/HvbYNLR7gTPu6MxPOPYha5Urh+iKLze+0H4vLF6MSSwQ3mxErsLYL
Yg4E+JZtw6cJX1dj7n7S19mwZiXZNzzdyy9VBVtu1eIqUG76MbQQgnKW65ItCjsD
f6Ou7qaH53S0Oq7mbibozvMkXynPb0IXMndGk/qPAoGACYz1oExg/3zGNezrC2PY
fFkgZY69iGjr6y9G6giy15ocBHR+1lLVSKkzzrCuO9tw+sGQCXiFGxx2Ne3k/htu
mzqXoTsMRyGk5Pi7I/zRyvKXiIm/adz46m/Y8l6aDgexFuW9Y+23L3IwPWaZzR+z
VjXIC2JkJA2RpBAV0HIXEgQ=
-----END PRIVATE KEY-----',
'public_key'=>'-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyQtS6llJRABJkVE/cuVE
5lvur0kPYSN/tBgwwye/O2jHl5M0fZGFpx3KLeq8PQxqobGXFYe4CzxX5/RNP7OT
/AGR1UqkSK0ZGYGcz0kanIq+Oq1xCZQQyEAcZ9elZzUG3hBi1TR8Dn2MvIuRvKVz
EFVyyWoAjL+dBV5yn26cXXNkDVkrD4qtFUihUe76xXTxf5TWXCYzmIX4yeu1w47w
f/K2rWENe/Uo2fUaAfN41hsrIZMo8LZLGi94G4hVlXqfE9F/KSGJh0YNF5o0Lod7
cS/uZZvDSYc2CqBoT5OGsdz6l93kd9QBupAmwQL/u4CmeOePyuZ3rA1yHxQBpEzF
ZwIDAQAB
-----END PUBLIC KEY-----'
]
];
return isset($config[$key]) ? $config[$key]: $config['test'];
}
}