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']; } }