Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
token
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wallet
token
Commits
accc1a5c
Commit
accc1a5c
authored
Sep 17, 2019
by
shajiaiming
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into feature/issue_coin
parents
cf53079d
894eb0ac
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
1069 additions
and
777 deletions
+1069
-777
CoinController.php
api/controllers/CoinController.php
+5
-1
CoinDogController.php
api/controllers/CoinDogController.php
+82
-0
CrossChainController.php
api/controllers/CrossChainController.php
+65
-4
GameBetController.php
api/controllers/GameBetController.php
+2
-2
ServiceController.php
api/controllers/ServiceController.php
+41
-36
CoinController.php
backend/controllers/CoinController.php
+2
-2
Curl.php
common/helpers/Curl.php
+653
-608
CoinCrossChain.php
common/models/psources/CoinCrossChain.php
+5
-2
Chain33Service.php
common/service/chain33/Chain33Service.php
+62
-41
CrossChainController.php
console/controllers/CrossChainController.php
+90
-44
GameBetController.php
console/controllers/GameBetController.php
+62
-28
AutoTransfer.sh
shell/AutoTransfer.sh
+0
-3
GameBet.sh
shell/GameBet.sh
+0
-3
QueryTransaction.sh
shell/QueryTransaction.sh
+0
-3
No files found.
api/controllers/CoinController.php
View file @
accc1a5c
...
@@ -131,7 +131,7 @@ class CoinController extends BaseController
...
@@ -131,7 +131,7 @@ class CoinController extends BaseController
if
(
$recommend
)
{
if
(
$recommend
)
{
$condition
[
'recommend'
]
=
$recommend
;
$condition
[
'recommend'
]
=
$recommend
;
}
}
$select
=
[
'id'
,
'sid'
,
'icon'
,
'name'
,
'optional_name'
,
'nickname'
,
'platform'
,
'chain'
,
'treaty'
];
$select
=
[
'id'
,
'sid'
,
'icon'
,
'name'
,
'
introduce'
,
'
optional_name'
,
'nickname'
,
'platform'
,
'chain'
,
'treaty'
];
$order_by
=
[
'sort'
=>
SORT_ASC
];
$order_by
=
[
'sort'
=>
SORT_ASC
];
$datas
=
CoinRecommend
::
getList
(
$page
,
$limit
,
$condition
,
$order_by
,
$select
);
$datas
=
CoinRecommend
::
getList
(
$page
,
$limit
,
$condition
,
$order_by
,
$select
);
//获取详细信息
//获取详细信息
...
@@ -143,6 +143,8 @@ class CoinController extends BaseController
...
@@ -143,6 +143,8 @@ class CoinController extends BaseController
foreach
(
$coin_infos
as
$key
=>
&
$val
)
{
foreach
(
$coin_infos
as
$key
=>
&
$val
)
{
$nickname
=
json_decode
(
$val
[
'nickname'
],
true
);
$nickname
=
json_decode
(
$val
[
'nickname'
],
true
);
$val
[
'nickname'
]
=
$nickname
[
$this
->
lang
];
$val
[
'nickname'
]
=
$nickname
[
$this
->
lang
];
$introduce
=
json_decode
(
$val
[
'introduce'
],
true
);
$val
[
'introduce'
]
=
$introduce
[
$this
->
lang
];
}
}
//获取行情信息
//获取行情信息
$coin_names
=
array_column
(
$coin_infos
,
'name'
);
$coin_names
=
array_column
(
$coin_infos
,
'name'
);
...
@@ -243,7 +245,9 @@ class CoinController extends BaseController
...
@@ -243,7 +245,9 @@ class CoinController extends BaseController
}
}
foreach
(
$result
[
'data'
]
as
$key
=>
&
$value
)
{
foreach
(
$result
[
'data'
]
as
$key
=>
&
$value
)
{
$nickname
=
json_decode
(
$value
[
'nickname'
],
true
);
$nickname
=
json_decode
(
$value
[
'nickname'
],
true
);
$introduce
=
json_decode
(
$value
[
'introduce'
],
true
);
$value
[
'nickname'
]
=
$nickname
[
$this
->
lang
];
$value
[
'nickname'
]
=
$nickname
[
$this
->
lang
];
$value
[
'introduce'
]
=
$introduce
[
$this
->
lang
];
$value
[
'chain_quotation'
]
=
$chain_quotation
[
$value
[
'chain'
]]
?:
null
;
$value
[
'chain_quotation'
]
=
$chain_quotation
[
$value
[
'chain'
]]
?:
null
;
$value
[
'chain_rmb'
]
=
isset
(
$value
[
'chain_quotation'
][
'rmb'
])
?
$value
[
'chain_quotation'
][
'rmb'
]
:
0
;
$value
[
'chain_rmb'
]
=
isset
(
$value
[
'chain_quotation'
][
'rmb'
])
?
$value
[
'chain_quotation'
][
'rmb'
]
:
0
;
$value
[
'chain_usd'
]
=
isset
(
$value
[
'chain_quotation'
][
'usd'
])
?
$value
[
'chain_quotation'
][
'usd'
]
:
0
;
$value
[
'chain_usd'
]
=
isset
(
$value
[
'chain_quotation'
][
'usd'
])
?
$value
[
'chain_quotation'
][
'usd'
]
:
0
;
...
...
api/controllers/CoinDogController.php
0 → 100644
View file @
accc1a5c
<?php
namespace
api\controllers
;
use
linslin\yii2\curl\Curl
;
use
Yii
;
use
api\base\BaseController
;
class
CoinDogController
extends
BaseController
{
public
function
actionArticle
()
{
$coindog
=
Yii
::
$app
->
params
[
'coindog'
];
$accessKey
=
$coindog
[
'accessKey'
];
$secretKey
=
$coindog
[
'secretKey'
];
$httpParams
=
array
(
'access_key'
=>
$accessKey
,
'date'
=>
time
()
);
$signParams
=
array_merge
(
$httpParams
,
array
(
'secret_key'
=>
$secretKey
));
ksort
(
$signParams
);
$signString
=
http_build_query
(
$signParams
);
$httpParams
[
'sign'
]
=
strtolower
(
md5
(
$signString
));
$url
=
$coindog
[
'article'
]
.
'?'
.
http_build_query
(
$httpParams
);
$curl
=
new
Curl
();
$resp
=
$curl
->
get
(
$url
,
false
);
return
[
'code'
=>
200
,
'data'
=>
$resp
,
'msg'
=>
'ok'
];
}
public
function
actionLive
()
{
$limit
=
Yii
::
$app
->
request
->
get
(
'limit'
,
20
);
$id
=
Yii
::
$app
->
request
->
get
(
'id'
,
0
);
$flag
=
Yii
::
$app
->
request
->
get
(
'flag'
,
'down'
);
$coindog
=
Yii
::
$app
->
params
[
'coindog'
];
$accessKey
=
$coindog
[
'accessKey'
];
$secretKey
=
$coindog
[
'secretKey'
];
$httpParams
=
array
(
'access_key'
=>
$accessKey
,
'date'
=>
time
()
);
$signParams
=
array_merge
(
$httpParams
,
array
(
'secret_key'
=>
$secretKey
));
ksort
(
$signParams
);
$signString
=
http_build_query
(
$signParams
);
$httpParams
=
[
'sign'
=>
strtolower
(
md5
(
$signString
)),
'limit'
=>
$limit
,
'id'
=>
$id
,
'flag'
=>
$flag
];
$url
=
$coindog
[
'live'
]
.
'?'
.
http_build_query
(
$httpParams
);
$curl
=
new
Curl
();
$resp
=
$curl
->
get
(
$url
,
false
);
if
(
!
isset
(
$resp
[
'list'
]))
{
$msg
=
'数据不存在'
;
$code
=
-
1
;
$data
=
null
;
goto
doEnd
;
}
$list
=
$resp
[
'list'
][
0
][
'lives'
];
foreach
(
$list
as
&
$item
)
{
preg_match_all
(
"/\【(.+?)\】/"
,
$item
[
'content'
],
$match
);
$item
[
'title'
]
=
$match
[
1
][
0
];
}
$code
=
0
;
$msg
=
'success'
;
doEnd
:
return
[
'code'
=>
$code
,
'data'
=>
$list
,
'msg'
=>
$msg
];
}
}
\ No newline at end of file
api/controllers/CrossChainController.php
View file @
accc1a5c
...
@@ -51,6 +51,8 @@ class CrossChainController extends BaseController
...
@@ -51,6 +51,8 @@ class CrossChainController extends BaseController
$model
=
new
CoinCrossChain
();
$model
=
new
CoinCrossChain
();
$data
[
'txhex'
]
=
$val
[
'tx'
];
$data
[
'txhex'
]
=
$val
[
'tx'
];
$data
[
'transfer_url'
]
=
$val
[
'url'
];
$data
[
'transfer_url'
]
=
$val
[
'url'
];
$data
[
'step'
]
=
$val
[
'step'
];
$data
[
'amount'
]
=
isset
(
$val
[
'amount'
])
?
$val
[
'amount'
]
:
0
;
$model
->
load
(
$data
,
''
);
$model
->
load
(
$data
,
''
);
$model
->
save
();
$model
->
save
();
}
}
...
@@ -61,12 +63,68 @@ class CrossChainController extends BaseController
...
@@ -61,12 +63,68 @@ class CrossChainController extends BaseController
return
[
'code'
=>
$code
,
'msg'
=>
$msg
];
return
[
'code'
=>
$code
,
'msg'
=>
$msg
];
}
}
public
function
actionFixTransfer
()
{
$code
=
-
1
;
$request
=
Yii
::
$app
->
request
;
if
(
!
$request
->
isPost
)
{
$msg
=
'请求错误!'
;
goto
doEnd
;
}
$post
=
$request
->
post
();
$data
[
'is_with_draw'
]
=
(
false
==
$post
[
'isWithdraw'
])
?
0
:
1
;
$data
[
'address'
]
=
$post
[
'address'
];
foreach
(
$post
[
'txs'
]
as
$key
=>
$val
)
{
$model
=
CoinCrossChain
::
find
()
->
where
([
'is_with_draw'
=>
$data
[
'is_with_draw'
]])
->
andWhere
([
'address'
=>
$data
[
'address'
]])
->
andWhere
([
'step'
=>
$val
[
'step'
]])
->
andWhere
([
'<>'
,
'msg'
,
'success'
])
->
one
();
if
(
false
==
$model
)
continue
;
$node_params
=
$model
->
transfer_url
;
$node_params
=
explode
(
':'
,
$node_params
);
$node_params
=
[
'scheme'
=>
$node_params
[
0
],
'host'
=>
str_replace
(
'//'
,
''
,
$node_params
[
1
]),
'port'
=>
isset
(
$node_params
[
2
])
?
$node_params
[
2
]
:
''
];
$service
=
new
Chain33Service
(
$node_params
);
$send_result
=
$model
->
send_result
;
$result
=
$service
->
QueryTransaction
(
$send_result
);
if
(
isset
(
$result
[
'result'
][
'actionName'
])
&&
'unknown'
==
$result
[
'result'
][
'actionName'
])
{
$model
->
query_result
=
'success'
;
$model
->
msg
=
'success'
;
$model
->
save
();
continue
;
}
else
if
(
isset
(
$result
[
'result'
][
'receipt'
][
'ty'
])
&&
2
==
$result
[
'result'
][
'receipt'
][
'ty'
])
{
$model
->
query_result
=
'success'
;
$model
->
msg
=
'success'
;
$model
->
save
();
continue
;
}
else
{
$model
->
txhex
=
$val
[
'tx'
];
$model
->
transfer_url
=
$val
[
'url'
];
$model
->
send_result
=
0
;
$model
->
query_result
=
0
;
$model
->
msg
=
0
;
$model
->
save
();
continue
;
}
}
$code
=
0
;
$msg
=
'success'
;
doEnd
:
return
[
'code'
=>
$code
,
'msg'
=>
$msg
];
}
public
function
actionTransferStatus
()
public
function
actionTransferStatus
()
{
{
$code
=
-
1
;
$code
=
-
1
;
$msg
=
'fail'
;
$msg
=
'fail'
;
$data
=
null
;
$data
=
null
;
$step
=
0
;
$step
=
$amount
=
0
;
$request
=
Yii
::
$app
->
request
;
$request
=
Yii
::
$app
->
request
;
if
(
!
$request
->
isGet
)
{
if
(
!
$request
->
isGet
)
{
$msg
=
'请求错误!'
;
$msg
=
'请求错误!'
;
...
@@ -83,11 +141,13 @@ class CrossChainController extends BaseController
...
@@ -83,11 +141,13 @@ class CrossChainController extends BaseController
$model
=
CoinCrossChain
::
find
()
->
where
([
'address'
=>
$address
,
'is_with_draw'
=>
$is_with_draw
])
->
orderBy
(
"id desc"
)
->
limit
(
3
)
->
asArray
()
->
all
();
$model
=
CoinCrossChain
::
find
()
->
where
([
'address'
=>
$address
,
'is_with_draw'
=>
$is_with_draw
])
->
orderBy
(
"id desc"
)
->
limit
(
3
)
->
asArray
()
->
all
();
if
(
empty
(
$model
))
{
if
(
empty
(
$model
))
{
$msg
=
'数据不存在!'
;
$msg
=
'数据不存在!'
;
$code
=
0
;
goto
doEnd
;
goto
doEnd
;
}
}
sort
(
$model
);
sort
(
$model
);
foreach
(
$model
as
$key
=>
$val
)
{
foreach
(
$model
as
$key
=>
$val
)
{
$amount
=
$val
[
'amount'
];
//未交易
//未交易
if
(
'0'
==
$val
[
'send_result'
]
&&
'0'
==
$val
[
'query_result'
]
&&
'0'
==
$val
[
'msg'
])
{
if
(
'0'
==
$val
[
'send_result'
]
&&
'0'
==
$val
[
'query_result'
]
&&
'0'
==
$val
[
'msg'
])
{
$step
=
$key
+
1
;
$step
=
$key
+
1
;
...
@@ -111,7 +171,7 @@ class CrossChainController extends BaseController
...
@@ -111,7 +171,7 @@ class CrossChainController extends BaseController
goto
doEnd
;
goto
doEnd
;
}
}
//交易成功,查询失败
//交易成功,查询失败
if
(
true
==
$val
[
'send_result'
]
&&
'
fail'
=
=
$val
[
'query_result'
])
{
if
(
true
==
$val
[
'send_result'
]
&&
'
success'
!
=
$val
[
'query_result'
])
{
$step
=
$key
+
1
;
$step
=
$key
+
1
;
$code
=
-
1
;
$code
=
-
1
;
$msg
=
$val
[
'msg'
];
$msg
=
$val
[
'msg'
];
...
@@ -119,7 +179,7 @@ class CrossChainController extends BaseController
...
@@ -119,7 +179,7 @@ class CrossChainController extends BaseController
}
}
//交易成功,查询成功
//交易成功,查询成功
if
(
true
==
$val
[
'send_result'
]
&&
'success'
==
$val
[
'query_result'
]
&&
'success'
==
$val
[
'msg'
])
{
if
(
true
==
$val
[
'send_result'
]
&&
'success'
==
$val
[
'query_result'
]
&&
'success'
==
$val
[
'msg'
])
{
if
(
2
==
$key
){
if
(
2
==
$key
)
{
$step
=
(
2
==
$key
)
?
4
:
(
$key
+
2
);
$step
=
(
2
==
$key
)
?
4
:
(
$key
+
2
);
$code
=
0
;
$code
=
0
;
$msg
=
$val
[
'send_result'
];
$msg
=
$val
[
'send_result'
];
...
@@ -131,7 +191,8 @@ class CrossChainController extends BaseController
...
@@ -131,7 +191,8 @@ class CrossChainController extends BaseController
doEnd
:
doEnd
:
$data
=
[
$data
=
[
'step'
=>
$step
'step'
=>
$step
,
'amount'
=>
(
int
)
$amount
];
];
return
[
'code'
=>
$code
,
'msg'
=>
$msg
,
'data'
=>
$data
];
return
[
'code'
=>
$code
,
'msg'
=>
$msg
,
'data'
=>
$data
];
}
}
...
...
api/controllers/GameBetController.php
View file @
accc1a5c
...
@@ -23,10 +23,10 @@ class GameBetController extends BaseController
...
@@ -23,10 +23,10 @@ class GameBetController extends BaseController
}
}
$query
=
CoinGameBet
::
find
()
$query
=
CoinGameBet
::
find
()
->
select
(
'round, player, amount, height, guess_num,
guess_num
, rand_num, player_win, platform'
)
->
select
(
'round, player, amount, height, guess_num,
valid
, rand_num, player_win, platform'
)
->
where
(
'player= :player'
,[
':player'
=>
$player
])
->
where
(
'player= :player'
,[
':player'
=>
$player
])
->
andWhere
([
'platform'
=>
$platform
])
->
andWhere
([
'platform'
=>
$platform
])
#
->andWhere(['valid' => CoinGameBet::VAILD_TRUE])
//
->andWhere(['valid' => CoinGameBet::VAILD_TRUE])
->
orderBy
(
'update_time desc'
);
->
orderBy
(
'update_time desc'
);
$count
=
$query
->
count
();
$count
=
$query
->
count
();
...
...
api/controllers/ServiceController.php
View file @
accc1a5c
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
* Date: 2018/12/29
* Date: 2018/12/29
* Time: 16:26
* Time: 16:26
*/
*/
namespace
api\controllers
;
namespace
api\controllers
;
use
api\base\BaseController
;
use
api\base\BaseController
;
...
@@ -33,23 +34,23 @@ class ServiceController extends BaseController
...
@@ -33,23 +34,23 @@ class ServiceController extends BaseController
public
function
actionCoinTickers
()
public
function
actionCoinTickers
()
{
{
$request
=
Yii
::
$app
->
request
;
$request
=
Yii
::
$app
->
request
;
$coinItems
=
$request
->
post
(
'names'
);
$coinItems
=
$request
->
post
(
'names'
);
if
(
!
$coinItems
)
{
if
(
!
$coinItems
)
{
return
[
'code'
=>
1
,
'data'
=>
[],
'msg'
=>
'币种不能为空'
];
return
[
'code'
=>
1
,
'data'
=>
[],
'msg'
=>
'币种不能为空'
];
}
}
if
(
!
is_array
(
$coinItems
))
{
if
(
!
is_array
(
$coinItems
))
{
$coinItems
=
[
$coinItems
];
$coinItems
=
[
$coinItems
];
}
}
$tol_coins
=
[
'ETC'
];
$tol_coins
=
[
'ETC'
];
$tickerData
=
[];
$tickerData
=
[];
if
(
$coinItems
)
{
if
(
$coinItems
)
{
foreach
(
$coinItems
as
$item
)
{
foreach
(
$coinItems
as
$item
)
{
$item
=
strtoupper
(
$item
);
$item
=
strtoupper
(
$item
);
if
(
in_array
(
$item
,
$tol_coins
))
{
if
(
in_array
(
$item
,
$tol_coins
))
{
$exchange
=
ExchangeFactory
::
createExchange
(
'HuoBi'
);
$exchange
=
ExchangeFactory
::
createExchange
(
'HuoBi'
);
if
(
$exchange
->
symbolExists
(
$item
))
{
if
(
$exchange
->
symbolExists
(
$item
))
{
$quotation
=
$exchange
->
getTicker
(
$item
);
$quotation
=
$exchange
->
getTicker
(
$item
);
if
(
$quotation
)
{
if
(
$quotation
)
{
//格式化行情数据
//格式化行情数据
foreach
(
$quotation
as
$key
=>
$value
)
{
foreach
(
$quotation
as
$key
=>
$value
)
{
$quotation
[
$key
]
=
(
float
)
sprintf
(
"%0.4f"
,
(
double
)
$value
);
$quotation
[
$key
]
=
(
float
)
sprintf
(
"%0.4f"
,
(
double
)
$value
);
...
@@ -58,30 +59,34 @@ class ServiceController extends BaseController
...
@@ -58,30 +59,34 @@ class ServiceController extends BaseController
$quotation
[
'rmb'
]
=
(
float
)
sprintf
(
"%0.4f"
,
$rate
*
$quotation
[
'last'
]);
$quotation
[
'rmb'
]
=
(
float
)
sprintf
(
"%0.4f"
,
$rate
*
$quotation
[
'last'
]);
}
}
}
}
}
else
{
}
else
{
$quotation
=
ExchangeBusiness
::
getquatation
(
$item
);
$quotation
=
ExchangeBusiness
::
getquatation
(
$item
);
}
}
if
(
!
$quotation
)
{
if
(
!
$quotation
)
{
//使用Coin服务
//使用Coin服务
try
{
try
{
$coinServer
=
CoinFactory
::
createCoin
(
$item
,
''
,
''
);
$coinServer
=
CoinFactory
::
createCoin
(
$item
,
''
,
''
);
$tickerData
[
$item
][
'rmb'
]
=
$coinServer
->
getPrice
();
$tickerData
[
$item
][
'rmb'
]
=
$coinServer
->
getPrice
();
$tickerData
[
$item
][
'last'
]
=
$coinServer
->
getDollar
();
$tickerData
[
$item
][
'last'
]
=
$coinServer
->
getDollar
();
$tickerData
[
$item
][
'low'
]
=
$coinServer
->
getLow
();
$tickerData
[
$item
][
'low'
]
=
$coinServer
->
getLow
();
$tickerData
[
$item
][
'high'
]
=
$coinServer
->
getHigh
();
$tickerData
[
$item
][
'high'
]
=
$coinServer
->
getHigh
();
$tickerData
[
$item
][
'open'
]
=
$coinServer
->
getDollar
();
$tickerData
[
$item
][
'usd'
]
=
$coinServer
->
getDollar
();
$coinServer
->
__destruct
();
$coinServer
->
__destruct
();
}
catch
(
\Exception
$exception
)
{
}
catch
(
\Exception
$exception
)
{
$tickerData
[
$item
][
'rmb'
]
=
0
;
$tickerData
[
$item
][
'rmb'
]
=
0
;
$tickerData
[
$item
][
'last'
]
=
0
;
$tickerData
[
$item
][
'last'
]
=
0
;
$tickerData
[
$item
][
'low'
]
=
0
;
$tickerData
[
$item
][
'low'
]
=
0
;
$tickerData
[
$item
][
'high'
]
=
0
;
$tickerData
[
$item
][
'high'
]
=
0
;
$tickerData
[
$item
][
'open'
]
=
0
;
$tickerData
[
$item
][
'usd'
]
=
0
;
\Yii
::
error
(
$exception
->
getMessage
());
\Yii
::
error
(
$exception
->
getMessage
());
}
}
}
else
{
}
else
{
$tickerData
[
$item
]
=
$quotation
;
$tickerData
[
$item
]
=
$quotation
;
}
}
}
}
return
[
'code'
=>
0
,
'data'
=>
$tickerData
,
'msg'
=>
'行情获取成功'
];
return
[
'code'
=>
0
,
'data'
=>
$tickerData
,
'msg'
=>
'行情获取成功'
];
}
}
}
}
...
@@ -94,13 +99,13 @@ class ServiceController extends BaseController
...
@@ -94,13 +99,13 @@ class ServiceController extends BaseController
$platform_id
=
Yii
::
$app
->
request
->
get
(
'platform_id'
,
6
);
$platform_id
=
Yii
::
$app
->
request
->
get
(
'platform_id'
,
6
);
$type
=
Yii
::
$app
->
request
->
get
(
'type'
,
1
);
$type
=
Yii
::
$app
->
request
->
get
(
'type'
,
1
);
$coin_recommendItems
=
$this
->
coinRecommendList
(
$platform_id
,
$type
);
$coin_recommendItems
=
$this
->
coinRecommendList
(
$platform_id
,
$type
);
$fields
=
[
'id'
,
'sid'
,
'icon'
,
'name'
,
'nickname'
,
'chain'
,
'platform'
];
$fields
=
[
'id'
,
'sid'
,
'icon'
,
'name'
,
'nickname'
,
'chain'
,
'platform'
];
$rows
=
Coin
::
getSelectList
(
1
,
999
,
$fields
,[[
'in'
,
'id'
,
$coin_recommendItems
]]);
$rows
=
Coin
::
getSelectList
(
1
,
999
,
$fields
,
[[
'in'
,
'id'
,
$coin_recommendItems
]]);
foreach
(
$rows
[
'data'
]
as
$key
=>
&
$value
)
{
foreach
(
$rows
[
'data'
]
as
$key
=>
&
$value
)
{
$nickname
=
json_decode
(
$value
[
'nickname'
],
true
);
$nickname
=
json_decode
(
$value
[
'nickname'
],
true
);
$value
[
'nickname'
]
=
$nickname
[
$this
->
lang
];
$value
[
'nickname'
]
=
$nickname
[
$this
->
lang
];
}
}
return
[
'code'
=>
0
,
'data'
=>
$rows
,
'msg'
=>
'币种列表获取成功'
];
return
[
'code'
=>
0
,
'data'
=>
$rows
,
'msg'
=>
'币种列表获取成功'
];
}
}
/**
/**
...
@@ -109,9 +114,9 @@ class ServiceController extends BaseController
...
@@ -109,9 +114,9 @@ class ServiceController extends BaseController
*/
*/
private
function
coinRecommendList
(
$platform_id
,
$type
=
1
)
private
function
coinRecommendList
(
$platform_id
,
$type
=
1
)
{
{
$recommend_list
=
CoinRecommend
::
find
()
->
select
(
'cid'
)
->
where
([
'platform_id'
=>
$platform_id
,
'type'
=>
$type
])
->
all
();
$recommend_list
=
CoinRecommend
::
find
()
->
select
(
'cid'
)
->
where
([
'platform_id'
=>
$platform_id
,
'type'
=>
$type
])
->
all
();
if
(
$recommend_list
)
{
if
(
$recommend_list
)
{
$coin_ids
=
array_column
(
$recommend_list
,
'cid'
);
$coin_ids
=
array_column
(
$recommend_list
,
'cid'
);
return
$coin_ids
;
return
$coin_ids
;
}
}
return
[];
return
[];
...
@@ -124,15 +129,15 @@ class ServiceController extends BaseController
...
@@ -124,15 +129,15 @@ class ServiceController extends BaseController
public
function
actionFee
()
public
function
actionFee
()
{
{
$request
=
Yii
::
$app
->
request
;
$request
=
Yii
::
$app
->
request
;
$coin
=
$request
->
post
(
'name'
);
$coin
=
$request
->
post
(
'name'
);
if
(
!
$coin
)
{
if
(
!
$coin
)
{
return
[
'code'
=>
1
,
'data'
=>
[],
'msg'
=>
'币种不能为空'
];
return
[
'code'
=>
1
,
'data'
=>
[],
'msg'
=>
'币种不能为空'
];
}
}
$fee
=
MinerFee
::
find
()
->
where
([
'platform'
=>
$coin
,
'type'
=>
2
])
->
select
(
'id,platform,type,fee,create_at,update_at'
)
->
asArray
()
->
one
();
$fee
=
MinerFee
::
find
()
->
where
([
'platform'
=>
$coin
,
'type'
=>
2
])
->
select
(
'id,platform,type,fee,create_at,update_at'
)
->
asArray
()
->
one
();
if
(
!
$fee
)
{
if
(
!
$fee
)
{
return
[
'code'
=>
1
,
'data'
=>
[],
'msg'
=>
'旷工费未设置'
];
return
[
'code'
=>
1
,
'data'
=>
[],
'msg'
=>
'旷工费未设置'
];
}
}
return
[
'code'
=>
0
,
'data'
=>
$fee
,
'msg'
=>
'旷工费获取成功'
];
return
[
'code'
=>
0
,
'data'
=>
$fee
,
'msg'
=>
'旷工费获取成功'
];
}
}
/**
/**
...
@@ -141,8 +146,8 @@ class ServiceController extends BaseController
...
@@ -141,8 +146,8 @@ class ServiceController extends BaseController
*/
*/
private
function
getRate
()
private
function
getRate
()
{
{
$exchange
=
ExchangeFactory
::
createExchange
(
"Bty"
);
$exchange
=
ExchangeFactory
::
createExchange
(
"Bty"
);
$rate
=
$exchange
->
getTicker
(
"BTY"
,
"USDT"
);
$rate
=
$exchange
->
getTicker
(
"BTY"
,
"USDT"
);
return
(
float
)
$rate
[
'rmb'
]
/
$rate
[
'last'
];
return
(
float
)
$rate
[
'rmb'
]
/
$rate
[
'last'
];
}
}
...
@@ -153,12 +158,12 @@ class ServiceController extends BaseController
...
@@ -153,12 +158,12 @@ class ServiceController extends BaseController
public
function
actionChain
()
public
function
actionChain
()
{
{
$request
=
Yii
::
$app
->
request
;
$request
=
Yii
::
$app
->
request
;
$currency
=
$request
->
post
(
'currency'
,
''
);
$currency
=
$request
->
post
(
'currency'
,
''
);
$coin
=
Coin
::
find
()
->
where
([
'name'
=>
$currency
])
->
select
(
'name,nickname,chain'
)
->
asArray
()
->
one
();
$coin
=
Coin
::
find
()
->
where
([
'name'
=>
$currency
])
->
select
(
'name,nickname,chain'
)
->
asArray
()
->
one
();
if
(
$coin
)
{
if
(
$coin
)
{
return
[
'code'
=>
0
,
'data'
=>
$coin
];
return
[
'code'
=>
0
,
'data'
=>
$coin
];
}
}
return
[
'code'
=>
-
1
,
'msg'
=>
'币种不存在'
];
return
[
'code'
=>
-
1
,
'msg'
=>
'币种不存在'
];
}
}
}
}
backend/controllers/CoinController.php
View file @
accc1a5c
...
@@ -92,7 +92,7 @@ class CoinController extends BaseController
...
@@ -92,7 +92,7 @@ class CoinController extends BaseController
if
(
isset
(
$data
[
'optional_name'
]))
{
if
(
isset
(
$data
[
'optional_name'
]))
{
$data
[
'optional_name'
]
=
strtoupper
(
$data
[
'optional_name'
]);
$data
[
'optional_name'
]
=
strtoupper
(
$data
[
'optional_name'
]);
}
}
$data
[
'name'
]
=
strtoupper
(
$data
[
'name'
]
);
$data
[
'name'
]
=
strtoupper
(
trim
(
$data
[
'name'
])
);
$data
[
'platform'
]
=
strtolower
(
$data
[
'platform'
]);
$data
[
'platform'
]
=
strtolower
(
$data
[
'platform'
]);
$data
[
'chain'
]
=
strtoupper
(
$data
[
'chain'
]);
$data
[
'chain'
]
=
strtoupper
(
$data
[
'chain'
]);
$lang
=
[
$lang
=
[
...
@@ -105,7 +105,7 @@ class CoinController extends BaseController
...
@@ -105,7 +105,7 @@ class CoinController extends BaseController
$nickname
=
[];
$nickname
=
[];
$introduce
=
[];
$introduce
=
[];
foreach
(
$nickname_arr
as
$key
=>
$val
)
{
foreach
(
$nickname_arr
as
$key
=>
$val
)
{
$nickname
[
$lang
[
$key
]]
=
$val
;
$nickname
[
$lang
[
$key
]]
=
trim
(
$val
)
;
}
}
foreach
(
$introduce_arr
as
$key
=>
$val
)
{
foreach
(
$introduce_arr
as
$key
=>
$val
)
{
$introduce
[
$lang
[
$key
]]
=
$val
;
$introduce
[
$lang
[
$key
]]
=
$val
;
...
...
common/helpers/Curl.php
View file @
accc1a5c
...
@@ -8,612 +8,656 @@ use yii\helpers\Json;
...
@@ -8,612 +8,656 @@ use yii\helpers\Json;
class
Curl
class
Curl
{
{
/**
/**
* @var string
* @var string
* * Holds response data right after sending a request.
* * Holds response data right after sending a request.
*/
*/
public
$httpType
=
'http'
;
public
$httpType
=
'http'
;
/**
/**
* @var string|boolean
* @var string|boolean
* Holds response data right after sending a request.
* Holds response data right after sending a request.
*/
*/
public
$response
=
null
;
public
$response
=
null
;
/**
/**
* @var null|integer
* @var null|integer
* Error code holder: https://curl.haxx.se/libcurl/c/libcurl-errors.html
* Error code holder: https://curl.haxx.se/libcurl/c/libcurl-errors.html
*/
*/
public
$errorCode
=
null
;
public
$errorCode
=
null
;
/**
/**
* @var null|string
* @var null|string
* Error text holder: http://php.net/manual/en/function.curl-strerror.php
* Error text holder: http://php.net/manual/en/function.curl-strerror.php
*/
*/
public
$errorText
=
null
;
public
$errorText
=
null
;
/**
/**
* @var integer HTTP-Status Code
* @var integer HTTP-Status Code
* This value will hold HTTP-Status Code. False if request was not successful.
* This value will hold HTTP-Status Code. False if request was not successful.
*/
*/
public
$responseCode
=
null
;
public
$responseCode
=
null
;
/**
/**
* @var string|null HTTP Response Charset
* @var string|null HTTP Response Charset
* (taken from Content-type header)
* (taken from Content-type header)
*/
*/
public
$responseCharset
=
null
;
public
$responseCharset
=
null
;
/**
/**
* @var int HTTP Response Length
* @var int HTTP Response Length
* (taken from Content-length header, or strlen() of downloaded content)
* (taken from Content-length header, or strlen() of downloaded content)
*/
*/
public
$responseLength
=
-
1
;
public
$responseLength
=
-
1
;
/**
/**
* @var string|null HTTP Response Content Type
* @var string|null HTTP Response Content Type
* (taken from Content-type header)
* (taken from Content-type header)
*/
*/
public
$responseType
=
null
;
public
$responseType
=
null
;
/**
/**
* @var array|null HTTP Response headers
* @var array|null HTTP Response headers
* Lists response header in an array if CURLOPT_HEADER is set to true.
* Lists response header in an array if CURLOPT_HEADER is set to true.
*/
*/
public
$responseHeaders
=
null
;
public
$responseHeaders
=
null
;
/**
/**
* @var array HTTP-Status Code
* @var array HTTP-Status Code
* Custom options holder
* Custom options holder
*/
*/
protected
$_options
=
[];
protected
$_options
=
[];
/**
/**
* @var array
* @var array
* Hold array of get params to send with the request
* Hold array of get params to send with the request
*/
*/
protected
$_getParams
=
[];
protected
$_getParams
=
[];
/**
/**
* @var array
* @var array
* Hold array of post params to send with the request
* Hold array of post params to send with the request
*/
*/
protected
$_postParams
=
[];
protected
$_postParams
=
[];
/**
/**
* @var resource|null
* @var resource|null
* Holds cURL-Handler
* Holds cURL-Handler
*/
*/
public
$curl
=
null
;
public
$curl
=
null
;
/**
/**
* @var string
* @var string
* hold base URL
* hold base URL
*/
*/
protected
$_baseUrl
=
''
;
protected
$_baseUrl
=
''
;
/**
/**
* @var array default curl options
* @var array default curl options
* Default curl options
* Default curl options
*/
*/
protected
$_defaultOptions
=
[
protected
$_defaultOptions
=
[
CURLOPT_USERAGENT
=>
'Yii2-Curl-Agent'
,
CURLOPT_USERAGENT
=>
'Yii2-Curl-Agent'
,
CURLOPT_TIMEOUT
=>
10
,
CURLOPT_TIMEOUT
=>
10
,
CURLOPT_CONNECTTIMEOUT
=>
10
,
CURLOPT_CONNECTTIMEOUT
=>
10
,
CURLOPT_RETURNTRANSFER
=>
true
,
CURLOPT_RETURNTRANSFER
=>
true
,
CURLOPT_HEADER
=>
true
,
CURLOPT_HEADER
=>
true
,
CURLOPT_SSL_VERIFYPEER
=>
false
,
CURLOPT_SSL_VERIFYPEER
=>
false
,
CURLOPT_SSL_VERIFYHOST
=>
2
,
CURLOPT_SSL_VERIFYHOST
=>
2
,
];
];
// ############################################### class methods // ##############################################
// ############################################### class methods // ##############################################
/**
/**
* Start performing GET-HTTP-Request
* Start performing GET-HTTP-Request
*
*
* @param string $url
* @param string $url
* @param boolean $raw if response body contains JSON and should be decoded
* @param boolean $raw if response body contains JSON and should be decoded
*
*
* @return mixed response
* @return mixed response
*/
*/
public
function
get
(
$url
,
$raw
=
true
)
protected
$connect_timeout_ms
;
{
protected
$timeout_ms
;
$this
->
_baseUrl
=
$url
;
return
$this
->
_httpRequest
(
'GET'
,
$raw
);
public
function
__construct
(
$config
=
[])
}
{
/**
if
(
!
empty
(
$config
))
{
* Start performing HEAD-HTTP-Request
$this
->
connect_timeout_ms
=
isset
(
$config
[
'connect_timeout'
])
?
$config
[
'connect_timeout'
]
:
10
;
*
$this
->
timeout_ms
=
isset
(
$config
[
'timeout_ms'
])
?
$config
[
'timeout_ms'
]
:
100
;
* @param string $url
}
*
}
* @return mixed response
*/
public
function
head
(
$url
)
public
function
get
(
$url
,
$raw
=
true
)
{
{
$this
->
_baseUrl
=
$url
;
$this
->
_baseUrl
=
$url
;
return
$this
->
_httpRequest
(
'HEAD'
);
return
$this
->
_httpRequest
(
'GET'
,
$raw
);
}
}
/**
* Start performing POST-HTTP-Request
/**
*
* Start performing HEAD-HTTP-Request
* @param string $url
*
* @param boolean $raw if response body contains JSON and should be decoded
* @param string $url
*
*
* @return mixed response
* @return mixed response
*/
*/
public
function
post
(
$url
,
$raw
=
true
)
public
function
head
(
$url
)
{
{
$this
->
_baseUrl
=
$url
;
$this
->
_baseUrl
=
$url
;
return
$this
->
_httpRequest
(
'POST'
,
$raw
);
return
$this
->
_httpRequest
(
'HEAD'
);
}
}
/**
* Start performing PUT-HTTP-Request
/**
*
* Start performing POST-HTTP-Request
* @param string $url
*
* @param boolean $raw if response body contains JSON and should be decoded
* @param string $url
*
* @param boolean $raw if response body contains JSON and should be decoded
* @return mixed response
*
*/
* @return mixed response
public
function
put
(
$url
,
$raw
=
true
)
*/
{
public
function
post
(
$url
,
$raw
=
true
)
$this
->
_baseUrl
=
$url
;
{
return
$this
->
_httpRequest
(
'PUT'
,
$raw
);
$this
->
_baseUrl
=
$url
;
}
return
$this
->
_httpRequest
(
'POST'
,
$raw
);
/**
}
* Start performing PATCH-HTTP-Request
*
/**
* @param string $url
* Start performing PUT-HTTP-Request
* @param boolean $raw if response body contains JSON and should be decoded
*
*
* @param string $url
* @return mixed response
* @param boolean $raw if response body contains JSON and should be decoded
*/
*
public
function
patch
(
$url
,
$raw
=
true
)
* @return mixed response
{
*/
$this
->
_baseUrl
=
$url
;
public
function
put
(
$url
,
$raw
=
true
)
$this
->
setHeaders
([
{
'X-HTTP-Method-Override'
=>
'PATCH'
$this
->
_baseUrl
=
$url
;
]);
return
$this
->
_httpRequest
(
'PUT'
,
$raw
);
return
$this
->
_httpRequest
(
'POST'
,
$raw
);
}
}
/**
/**
* Start performing DELETE-HTTP-Request
* Start performing PATCH-HTTP-Request
*
*
* @param string $url
* @param string $url
* @param boolean $raw if response body contains JSON and should be decoded
* @param boolean $raw if response body contains JSON and should be decoded
*
*
* @return mixed response
* @return mixed response
*/
*/
public
function
delete
(
$url
,
$raw
=
true
)
public
function
patch
(
$url
,
$raw
=
true
)
{
{
$this
->
_baseUrl
=
$url
;
$this
->
_baseUrl
=
$url
;
return
$this
->
_httpRequest
(
'DELETE'
,
$raw
);
$this
->
setHeaders
([
}
'X-HTTP-Method-Override'
=>
'PATCH'
/**
]);
* Set curl option
return
$this
->
_httpRequest
(
'POST'
,
$raw
);
*
}
* @param string $key
* @param mixed $value
/**
*
* Start performing DELETE-HTTP-Request
* @return $this
*
*/
* @param string $url
public
function
setOption
(
$key
,
$value
)
* @param boolean $raw if response body contains JSON and should be decoded
{
*
//set value
* @return mixed response
if
(
array_key_exists
(
$key
,
$this
->
_defaultOptions
)
&&
$key
!==
CURLOPT_WRITEFUNCTION
)
{
*/
$this
->
_defaultOptions
[
$key
]
=
$value
;
public
function
delete
(
$url
,
$raw
=
true
)
}
else
{
{
$this
->
_options
[
$key
]
=
$value
;
$this
->
_baseUrl
=
$url
;
}
return
$this
->
_httpRequest
(
'DELETE'
,
$raw
);
//return self
}
return
$this
;
}
/**
/**
* Set curl option
* Set get params
*
*
* @param string $key
* @param array $params
* @param mixed $value
* @return $this
*
*/
* @return $this
public
function
setGetParams
(
$params
)
*/
{
public
function
setOption
(
$key
,
$value
)
if
(
is_array
(
$params
))
{
{
foreach
(
$params
as
$key
=>
$value
)
{
//set value
$this
->
_getParams
[
$key
]
=
$value
;
if
(
array_key_exists
(
$key
,
$this
->
_defaultOptions
)
&&
$key
!==
CURLOPT_WRITEFUNCTION
)
{
}
$this
->
_defaultOptions
[
$key
]
=
$value
;
}
}
else
{
//return self
$this
->
_options
[
$key
]
=
$value
;
return
$this
;
}
}
//return self
/**
return
$this
;
* Set get params
}
*
* @param array $params
/**
* @return $this
* Set get params
*/
*
public
function
setPostParams
(
$params
)
* @param array $params
{
* @return $this
if
(
is_array
(
$params
))
{
*/
$this
->
setOption
(
public
function
setGetParams
(
$params
)
CURLOPT_POSTFIELDS
,
{
http_build_query
(
$params
)
if
(
is_array
(
$params
))
{
);
foreach
(
$params
as
$key
=>
$value
)
{
}
$this
->
_getParams
[
$key
]
=
$value
;
//return self
}
return
$this
;
}
}
//return self
/**
return
$this
;
* Set raw post data allows you to post any data format.
}
*
* @param mixed $data
/**
* @return $this
* Set get params
*/
*
public
function
setRawPostData
(
$data
)
* @param array $params
{
* @return $this
$this
->
setOption
(
*/
CURLOPT_POSTFIELDS
,
public
function
setPostParams
(
$params
)
$data
{
);
if
(
is_array
(
$params
))
{
//return self
$this
->
setOption
(
return
$this
;
CURLOPT_POSTFIELDS
,
}
http_build_query
(
$params
)
/**
);
* Set get params
}
*
//return self
* @param string $data
return
$this
;
* @return $this
}
*/
public
function
setRequestBody
(
$data
)
/**
{
* Set raw post data allows you to post any data format.
if
(
is_string
(
$data
))
{
*
$this
->
setOption
(
* @param mixed $data
CURLOPT_POSTFIELDS
,
* @return $this
$data
*/
);
public
function
setRawPostData
(
$data
)
}
{
//return self
$this
->
setOption
(
return
$this
;
CURLOPT_POSTFIELDS
,
}
$data
/**
);
* Get URL - return URL parsed with given params
//return self
*
return
$this
;
* @return string The full URL with parsed get params
}
*/
public
function
getUrl
()
/**
{
* Set get params
if
(
Count
(
$this
->
_getParams
)
>
0
)
{
*
return
$this
->
_baseUrl
.
'?'
.
http_build_query
(
$this
->
_getParams
);
* @param string $data
}
else
{
* @return $this
return
$this
->
_baseUrl
;
*/
}
public
function
setRequestBody
(
$data
)
}
{
/**
if
(
is_string
(
$data
))
{
* Set curl options
$this
->
setOption
(
*
CURLOPT_POSTFIELDS
,
* @param array $options
$data
*
);
* @return $this
}
*/
//return self
public
function
setOptions
(
$options
)
return
$this
;
{
}
$this
->
_options
=
$options
+
$this
->
_options
;
return
$this
;
/**
}
* Get URL - return URL parsed with given params
/**
*
* Set multiple headers for request.
* @return string The full URL with parsed get params
*
*/
* @param array $headers
public
function
getUrl
()
*
{
* @return $this
if
(
Count
(
$this
->
_getParams
)
>
0
)
{
*/
return
$this
->
_baseUrl
.
'?'
.
http_build_query
(
$this
->
_getParams
);
public
function
setHeaders
(
$headers
)
}
else
{
{
return
$this
->
_baseUrl
;
if
(
is_array
(
$headers
))
{
}
//init
}
$parsedHeader
=
[];
//collect currently set headers
/**
foreach
(
$this
->
getRequestHeaders
()
as
$header
=>
$value
)
{
* Set curl options
array_push
(
$parsedHeader
,
$header
.
':'
.
$value
);
*
}
* @param array $options
//parse header into right format key:value
*
foreach
(
$headers
as
$header
=>
$value
)
{
* @return $this
array_push
(
$parsedHeader
,
$header
.
':'
.
$value
);
*/
}
public
function
setOptions
(
$options
)
//set headers
{
$this
->
setOption
(
$this
->
_options
=
$options
+
$this
->
_options
;
CURLOPT_HTTPHEADER
,
return
$this
;
$parsedHeader
}
);
}
/**
return
$this
;
* Set multiple headers for request.
}
*
/**
* @param array $headers
* Set a single header for request.
*
*
* @return $this
* @param string $header
*/
* @param string $value
public
function
setHeaders
(
$headers
)
*
{
* @return $this
if
(
is_array
(
$headers
))
{
*/
//init
public
function
setHeader
(
$header
,
$value
)
$parsedHeader
=
[];
{
//collect currently set headers
//init
foreach
(
$this
->
getRequestHeaders
()
as
$header
=>
$value
)
{
$parsedHeader
=
[];
array_push
(
$parsedHeader
,
$header
.
':'
.
$value
);
//collect currently set headers
}
foreach
(
$this
->
getRequestHeaders
()
as
$headerToSet
=>
$valueToSet
)
{
//parse header into right format key:value
array_push
(
$parsedHeader
,
$headerToSet
.
':'
.
$valueToSet
);
foreach
(
$headers
as
$header
=>
$value
)
{
}
array_push
(
$parsedHeader
,
$header
.
':'
.
$value
);
//add override new header
}
if
(
strlen
(
$header
)
>
0
)
{
//set headers
array_push
(
$parsedHeader
,
$header
.
':'
.
$value
);
$this
->
setOption
(
}
CURLOPT_HTTPHEADER
,
//set headers
$parsedHeader
$this
->
setOption
(
);
CURLOPT_HTTPHEADER
,
}
$parsedHeader
return
$this
;
);
}
return
$this
;
}
/**
/**
* Set a single header for request.
* Unset a single header.
*
*
* @param string $header
* @param string $header
* @param string $value
*
*
* @return $this
* @return $this
*/
*/
public
function
unsetHeader
(
$header
)
public
function
setHeader
(
$header
,
$value
)
{
{
//init
//init
$parsedHeader
=
[];
$parsedHeader
=
[];
//collect currently set headers and filter "unset" header param.
//collect currently set headers
foreach
(
$this
->
getRequestHeaders
()
as
$headerToSet
=>
$valueToSet
)
{
foreach
(
$this
->
getRequestHeaders
()
as
$headerToSet
=>
$valueToSet
)
{
if
(
$header
!==
$headerToSet
)
{
array_push
(
$parsedHeader
,
$headerToSet
.
':'
.
$valueToSet
);
array_push
(
$parsedHeader
,
$headerToSet
.
':'
.
$valueToSet
);
}
}
//add override new header
}
if
(
strlen
(
$header
)
>
0
)
{
//set headers
array_push
(
$parsedHeader
,
$header
.
':'
.
$value
);
$this
->
setOption
(
}
CURLOPT_HTTPHEADER
,
//set headers
$parsedHeader
$this
->
setOption
(
);
CURLOPT_HTTPHEADER
,
return
$this
;
$parsedHeader
}
);
/**
return
$this
;
* Get all request headers as key:value array
}
*
* @return array
/**
*/
* Unset a single header.
public
function
getRequestHeaders
()
*
{
* @param string $header
//Init
*
$requestHeaders
=
$this
->
getOption
(
CURLOPT_HTTPHEADER
);
* @return $this
$parsedRequestHeaders
=
[];
*/
if
(
is_array
(
$requestHeaders
))
{
public
function
unsetHeader
(
$header
)
foreach
(
$requestHeaders
as
$headerValue
)
{
{
list
(
$key
,
$value
)
=
explode
(
':'
,
$headerValue
,
2
);
//init
$parsedRequestHeaders
[
$key
]
=
$value
;
$parsedHeader
=
[];
}
//collect currently set headers and filter "unset" header param.
}
foreach
(
$this
->
getRequestHeaders
()
as
$headerToSet
=>
$valueToSet
)
{
return
$parsedRequestHeaders
;
if
(
$header
!==
$headerToSet
)
{
}
array_push
(
$parsedHeader
,
$headerToSet
.
':'
.
$valueToSet
);
/**
}
* Get specific request header as key:value array
}
*
//set headers
* @param string $headerKey
$this
->
setOption
(
*
CURLOPT_HTTPHEADER
,
* @return string|null
$parsedHeader
*/
);
public
function
getRequestHeader
(
$headerKey
)
return
$this
;
{
}
//Init
$parsedRequestHeaders
=
$this
->
getRequestHeaders
();
/**
return
isset
(
$parsedRequestHeaders
[
$headerKey
])
?
$parsedRequestHeaders
[
$headerKey
]
:
null
;
* Get all request headers as key:value array
}
*
/**
* @return array
* Unset a single curl option
*/
*
public
function
getRequestHeaders
()
* @param string $key
{
*
//Init
* @return $this
$requestHeaders
=
$this
->
getOption
(
CURLOPT_HTTPHEADER
);
*/
$parsedRequestHeaders
=
[];
public
function
unsetOption
(
$key
)
if
(
is_array
(
$requestHeaders
))
{
{
foreach
(
$requestHeaders
as
$headerValue
)
{
//reset a single option if its set already
list
(
$key
,
$value
)
=
explode
(
':'
,
$headerValue
,
2
);
if
(
isset
(
$this
->
_options
[
$key
]))
{
$parsedRequestHeaders
[
$key
]
=
$value
;
unset
(
$this
->
_options
[
$key
]);
}
}
}
return
$this
;
return
$parsedRequestHeaders
;
}
}
/**
* Unset all curl option, excluding default options.
/**
*
* Get specific request header as key:value array
* @return $this
*
*/
* @param string $headerKey
public
function
unsetOptions
()
*
{
* @return string|null
//reset all options
*/
if
(
isset
(
$this
->
_options
))
{
public
function
getRequestHeader
(
$headerKey
)
$this
->
_options
=
[];
{
}
//Init
return
$this
;
$parsedRequestHeaders
=
$this
->
getRequestHeaders
();
}
return
isset
(
$parsedRequestHeaders
[
$headerKey
])
?
$parsedRequestHeaders
[
$headerKey
]
:
null
;
/**
}
* Total reset of options, responses, etc.
*
/**
* @return $this
* Unset a single curl option
*/
*
public
function
reset
()
* @param string $key
{
*
if
(
$this
->
curl
!==
null
)
{
* @return $this
curl_close
(
$this
->
curl
);
//stop curl
*/
}
public
function
unsetOption
(
$key
)
//reset all options
{
if
(
isset
(
$this
->
_options
))
{
//reset a single option if its set already
$this
->
_options
=
[];
if
(
isset
(
$this
->
_options
[
$key
]))
{
}
unset
(
$this
->
_options
[
$key
]);
//reset response & status params
}
$this
->
curl
=
null
;
return
$this
;
$this
->
errorCode
=
null
;
}
$this
->
response
=
null
;
$this
->
responseCode
=
null
;
/**
$this
->
responseCharset
=
null
;
* Unset all curl option, excluding default options.
$this
->
responseLength
=
-
1
;
*
$this
->
responseType
=
null
;
* @return $this
$this
->
errorText
=
null
;
*/
$this
->
_postParams
=
[];
public
function
unsetOptions
()
$this
->
_getParams
=
[];
{
return
$this
;
//reset all options
}
if
(
isset
(
$this
->
_options
))
{
/**
$this
->
_options
=
[];
* Return a single option
}
*
return
$this
;
* @param string|integer $key
}
* @return mixed|boolean
*/
/**
public
function
getOption
(
$key
)
* Total reset of options, responses, etc.
{
*
//get merged options depends on default and user options
* @return $this
$mergesOptions
=
$this
->
getOptions
();
*/
//return value or false if key is not set.
public
function
reset
()
return
isset
(
$mergesOptions
[
$key
])
?
$mergesOptions
[
$key
]
:
false
;
{
}
if
(
$this
->
curl
!==
null
)
{
/**
curl_close
(
$this
->
curl
);
//stop curl
* Return merged curl options and keep keys!
}
*
//reset all options
* @return array
if
(
isset
(
$this
->
_options
))
{
*/
$this
->
_options
=
[];
public
function
getOptions
()
}
{
//reset response & status params
return
$this
->
_options
+
$this
->
_defaultOptions
;
$this
->
curl
=
null
;
}
$this
->
errorCode
=
null
;
/**
$this
->
response
=
null
;
* Get curl info according to http://php.net/manual/de/function.curl-getinfo.php
$this
->
responseCode
=
null
;
*
$this
->
responseCharset
=
null
;
* @param null $opt
$this
->
responseLength
=
-
1
;
* @return array|mixed
$this
->
responseType
=
null
;
*/
$this
->
errorText
=
null
;
public
function
getInfo
(
$opt
=
null
)
$this
->
_postParams
=
[];
{
$this
->
_getParams
=
[];
if
(
$this
->
curl
!==
null
&&
$opt
===
null
)
{
return
$this
;
return
curl_getinfo
(
$this
->
curl
);
}
}
elseif
(
$this
->
curl
!==
null
&&
$opt
!==
null
)
{
return
curl_getinfo
(
$this
->
curl
,
$opt
);
/**
}
else
{
* Return a single option
return
[];
*
}
* @param string|integer $key
}
* @return mixed|boolean
/**
*/
* Performs HTTP request
public
function
getOption
(
$key
)
*
{
* @param string $method
//get merged options depends on default and user options
* @param boolean $raw if response body contains JSON and should be decoded -> helper.
$mergesOptions
=
$this
->
getOptions
();
*
//return value or false if key is not set.
* @throws Exception if request failed
return
isset
(
$mergesOptions
[
$key
])
?
$mergesOptions
[
$key
]
:
false
;
*
}
* @return mixed
*/
/**
protected
function
_httpRequest
(
$method
,
$raw
=
false
)
* Return merged curl options and keep keys!
{
*
//set request type and writer function
* @return array
$this
->
setOption
(
CURLOPT_CUSTOMREQUEST
,
strtoupper
(
$method
));
*/
//check if method is head and set no body
public
function
getOptions
()
if
(
$method
===
'HEAD'
)
{
{
$this
->
setOption
(
CURLOPT_NOBODY
,
true
);
return
$this
->
_options
+
$this
->
_defaultOptions
;
$this
->
unsetOption
(
CURLOPT_WRITEFUNCTION
);
}
}
//setup error reporting and profiling
/**
if
(
YII_DEBUG
)
{
* Get curl info according to http://php.net/manual/de/function.curl-getinfo.php
Yii
::
trace
(
'Start sending cURL-Request: '
.
$this
->
getUrl
()
.
'\n'
,
__METHOD__
);
*
Yii
::
beginProfile
(
$method
.
' '
.
$this
->
_baseUrl
.
'#'
.
md5
(
serialize
(
$this
->
getOption
(
CURLOPT_POSTFIELDS
))),
__METHOD__
);
* @param null $opt
}
* @return array|mixed
/**
*/
* proceed curl
public
function
getInfo
(
$opt
=
null
)
*/
{
$curlOptions
=
$this
->
getOptions
();
if
(
$this
->
curl
!==
null
&&
$opt
===
null
)
{
$this
->
curl
=
curl_init
(
$this
->
getUrl
());
return
curl_getinfo
(
$this
->
curl
);
curl_setopt_array
(
$this
->
curl
,
$curlOptions
);
}
elseif
(
$this
->
curl
!==
null
&&
$opt
!==
null
)
{
curl_setopt
(
$this
->
curl
,
CURLOPT_TIMEOUT
,
40
);
return
curl_getinfo
(
$this
->
curl
,
$opt
);
$response
=
curl_exec
(
$this
->
curl
);
}
else
{
//check if curl was successful
return
[];
if
(
$response
===
false
)
{
}
//set error code
}
$this
->
errorCode
=
curl_errno
(
$this
->
curl
);
$this
->
errorText
=
curl_strerror
(
$this
->
errorCode
);
/**
switch
(
$this
->
errorCode
)
{
* Performs HTTP request
// 7, 28 = timeout
*
case
7
:
* @param string $method
case
28
:
* @param boolean $raw if response body contains JSON and should be decoded -> helper.
$this
->
responseCode
=
'timeout'
;
*
return
false
;
* @throws Exception if request failed
break
;
*
default
:
* @return mixed
return
false
;
*/
break
;
protected
function
_httpRequest
(
$method
,
$raw
=
false
)
}
{
}
//set request type and writer function
//extract header / body data if CURLOPT_HEADER are set to true
$this
->
setOption
(
CURLOPT_CUSTOMREQUEST
,
strtoupper
(
$method
));
if
(
isset
(
$curlOptions
[
CURLOPT_HEADER
])
&&
$curlOptions
[
CURLOPT_HEADER
])
{
//check if method is head and set no body
$this
->
response
=
$this
->
_extractCurlBody
(
$response
);
if
(
$method
===
'HEAD'
)
{
$this
->
responseHeaders
=
$this
->
_extractCurlHeaders
(
$response
);
$this
->
setOption
(
CURLOPT_NOBODY
,
true
);
}
else
{
$this
->
unsetOption
(
CURLOPT_WRITEFUNCTION
);
$this
->
response
=
$response
;
}
}
//setup error reporting and profiling
// Extract additional curl params
if
(
YII_DEBUG
)
{
$this
->
_extractAdditionalCurlParameter
();
Yii
::
trace
(
'Start sending cURL-Request: '
.
$this
->
getUrl
()
.
'\n'
,
__METHOD__
);
//end yii debug profile
Yii
::
beginProfile
(
$method
.
' '
.
$this
->
_baseUrl
.
'#'
.
md5
(
serialize
(
$this
->
getOption
(
CURLOPT_POSTFIELDS
))),
__METHOD__
);
if
(
YII_DEBUG
)
{
}
Yii
::
endProfile
(
$method
.
' '
.
$this
->
getUrl
()
.
'#'
.
md5
(
serialize
(
$this
->
getOption
(
CURLOPT_POSTFIELDS
))),
__METHOD__
);
/**
}
* proceed curl
//check responseCode and return data/status
*/
if
(
$this
->
getOption
(
CURLOPT_CUSTOMREQUEST
)
===
'HEAD'
)
{
$curlOptions
=
$this
->
getOptions
();
return
true
;
$this
->
curl
=
curl_init
(
$this
->
getUrl
());
}
else
{
curl_setopt_array
(
$this
->
curl
,
$curlOptions
);
$this
->
response
=
$raw
?
$this
->
response
:
Json
::
decode
(
$this
->
response
);
if
(
true
==
$this
->
timeout_ms
&&
true
==
$this
->
connect_timeout_ms
)
{
return
$this
->
response
;
curl_setopt
(
$this
->
curl
,
CURLOPT_TIMEOUT_MS
,
$this
->
timeout_ms
);
}
curl_setopt
(
$this
->
curl
,
CURLOPT_CONNECTTIMEOUT
,
$this
->
timeout_ms
);
}
curl_setopt
(
$this
->
curl
,
CURLOPT_CONNECTTIMEOUT_MS
,
$this
->
connect_timeout_ms
);
/**
}
* Extract additional curl params protected class helper
//curl_setopt($this->curl, CURLOPT_TIMEOUT,40);
*/
$response
=
curl_exec
(
$this
->
curl
);
protected
function
_extractAdditionalCurlParameter
()
//check if curl was successful
{
if
(
$response
===
false
)
{
/**
//set error code
* retrieve response code
$this
->
errorCode
=
curl_errno
(
$this
->
curl
);
*/
$this
->
errorText
=
curl_strerror
(
$this
->
errorCode
);
$this
->
responseCode
=
curl_getinfo
(
$this
->
curl
,
CURLINFO_HTTP_CODE
);
switch
(
$this
->
errorCode
)
{
/**
// 7, 28 = timeout
* try extract response type & charset.
case
7
:
*/
case
28
:
$this
->
responseType
=
curl_getinfo
(
$this
->
curl
,
CURLINFO_CONTENT_TYPE
);
$this
->
responseCode
=
'timeout'
;
if
(
!
is_null
(
$this
->
responseType
)
&&
count
(
explode
(
';'
,
$this
->
responseType
))
>
1
)
{
return
false
;
list
(
$this
->
responseType
,
$possibleCharset
)
=
explode
(
';'
,
$this
->
responseType
);
break
;
//extract charset
default
:
if
(
preg_match
(
'~^charset=(.+?)$~'
,
trim
(
$possibleCharset
),
$matches
)
&&
isset
(
$matches
[
1
]))
{
return
false
;
$this
->
responseCharset
=
strtolower
(
$matches
[
1
]);
break
;
}
}
}
}
/**
//extract header / body data if CURLOPT_HEADER are set to true
* try extract response length
if
(
isset
(
$curlOptions
[
CURLOPT_HEADER
])
&&
$curlOptions
[
CURLOPT_HEADER
])
{
*/
$this
->
response
=
$this
->
_extractCurlBody
(
$response
);
$this
->
responseLength
=
curl_getinfo
(
$this
->
curl
,
CURLINFO_CONTENT_LENGTH_DOWNLOAD
);
$this
->
responseHeaders
=
$this
->
_extractCurlHeaders
(
$response
);
if
((
int
)
$this
->
responseLength
==
-
1
)
{
}
else
{
$this
->
responseLength
=
strlen
(
$this
->
response
);
$this
->
response
=
$response
;
}
}
}
// Extract additional curl params
/**
$this
->
_extractAdditionalCurlParameter
();
* Extract body curl data from response
//end yii debug profile
*
if
(
YII_DEBUG
)
{
* @param string $response
Yii
::
endProfile
(
$method
.
' '
.
$this
->
getUrl
()
.
'#'
.
md5
(
serialize
(
$this
->
getOption
(
CURLOPT_POSTFIELDS
))),
__METHOD__
);
* @return string
}
*/
//check responseCode and return data/status
protected
function
_extractCurlBody
(
$response
)
if
(
$this
->
getOption
(
CURLOPT_CUSTOMREQUEST
)
===
'HEAD'
)
{
{
return
true
;
return
substr
(
$response
,
$this
->
getInfo
(
CURLINFO_HEADER_SIZE
));
}
else
{
}
$this
->
response
=
$raw
?
$this
->
response
:
Json
::
decode
(
$this
->
response
);
/**
return
$this
->
response
;
* Extract header curl data from response
}
*
}
* @param string $response
* @return array
/**
*/
* Extract additional curl params protected class helper
protected
function
_extractCurlHeaders
(
$response
)
*/
{
protected
function
_extractAdditionalCurlParameter
()
//Init
{
$headers
=
[];
/**
$headerText
=
substr
(
$response
,
0
,
strpos
(
$response
,
"
\r\n\r\n
"
));
* retrieve response code
foreach
(
explode
(
"
\r\n
"
,
$headerText
)
as
$i
=>
$line
)
{
*/
if
(
$i
===
0
)
{
$this
->
responseCode
=
curl_getinfo
(
$this
->
curl
,
CURLINFO_HTTP_CODE
);
$headers
[
'http_code'
]
=
$line
;
/**
}
else
{
* try extract response type & charset.
list
(
$key
,
$value
)
=
explode
(
':'
,
$line
,
2
);
*/
$headers
[
$key
]
=
ltrim
(
$value
);
$this
->
responseType
=
curl_getinfo
(
$this
->
curl
,
CURLINFO_CONTENT_TYPE
);
}
if
(
!
is_null
(
$this
->
responseType
)
&&
count
(
explode
(
';'
,
$this
->
responseType
))
>
1
)
{
}
list
(
$this
->
responseType
,
$possibleCharset
)
=
explode
(
';'
,
$this
->
responseType
);
return
$headers
;
//extract charset
}
if
(
preg_match
(
'~^charset=(.+?)$~'
,
trim
(
$possibleCharset
),
$matches
)
&&
isset
(
$matches
[
1
]))
{
$this
->
responseCharset
=
strtolower
(
$matches
[
1
]);
}
}
/**
* try extract response length
*/
$this
->
responseLength
=
curl_getinfo
(
$this
->
curl
,
CURLINFO_CONTENT_LENGTH_DOWNLOAD
);
if
((
int
)
$this
->
responseLength
==
-
1
)
{
$this
->
responseLength
=
strlen
(
$this
->
response
);
}
}
/**
* Extract body curl data from response
*
* @param string $response
* @return string
*/
protected
function
_extractCurlBody
(
$response
)
{
return
substr
(
$response
,
$this
->
getInfo
(
CURLINFO_HEADER_SIZE
));
}
/**
* Extract header curl data from response
*
* @param string $response
* @return array
*/
protected
function
_extractCurlHeaders
(
$response
)
{
//Init
$headers
=
[];
$headerText
=
substr
(
$response
,
0
,
strpos
(
$response
,
"
\r\n\r\n
"
));
foreach
(
explode
(
"
\r\n
"
,
$headerText
)
as
$i
=>
$line
)
{
if
(
$i
===
0
)
{
$headers
[
'http_code'
]
=
$line
;
}
else
{
list
(
$key
,
$value
)
=
explode
(
':'
,
$line
,
2
);
$headers
[
$key
]
=
ltrim
(
$value
);
}
}
return
$headers
;
}
}
}
\ No newline at end of file
common/models/psources/CoinCrossChain.php
View file @
accc1a5c
...
@@ -10,6 +10,9 @@ class CoinCrossChain extends BaseActiveRecord
...
@@ -10,6 +10,9 @@ class CoinCrossChain extends BaseActiveRecord
const
WITHDRAW
=
0
;
const
WITHDRAW
=
0
;
const
RECHARGE
=
1
;
const
RECHARGE
=
1
;
const
CROSS_CHAIN_TRANSFERING
=
'cross_chain_transfering'
;
const
CROSS_CHAIN_CACHE_FAIL
=
'cross_chain_fail'
;
public
static
function
getDb
()
public
static
function
getDb
()
{
{
return
Yii
::
$app
->
get
(
'p_sources'
);
return
Yii
::
$app
->
get
(
'p_sources'
);
...
@@ -28,14 +31,14 @@ class CoinCrossChain extends BaseActiveRecord
...
@@ -28,14 +31,14 @@ class CoinCrossChain extends BaseActiveRecord
{
{
return
[
return
[
[[
'is_with_draw'
,
'address'
,
'txhex'
,
'transfer_url'
],
'required'
],
[[
'is_with_draw'
,
'address'
,
'txhex'
,
'transfer_url'
],
'required'
],
[
'transfer_number'
,
'safe'
]
[
[
'transfer_number'
,
'amount'
,
'step'
,
'send_result'
,
'query_result'
,
'msg'
]
,
'safe'
]
];
];
}
}
public
function
scenarios
()
public
function
scenarios
()
{
{
$scenarios
=
[
$scenarios
=
[
self
::
SCENARIOS_CREATE
=>
[
'is_with_draw'
,
'address'
,
'txhex'
,
'transfer_url'
,
'transfer_number'
],
self
::
SCENARIOS_CREATE
=>
[
'is_with_draw'
,
'address'
,
'txhex'
,
'transfer_url'
,
'transfer_number'
,
'amount'
,
'step'
,
'send_result'
,
'query_result'
,
'msg'
],
];
];
return
array_merge
(
parent
::
scenarios
(),
$scenarios
);
return
array_merge
(
parent
::
scenarios
(),
$scenarios
);
}
}
...
...
common/service/chain33/Chain33Service.php
View file @
accc1a5c
...
@@ -20,7 +20,7 @@ class Chain33Service
...
@@ -20,7 +20,7 @@ class Chain33Service
public
function
__construct
(
$parameter
=
[])
public
function
__construct
(
$parameter
=
[])
{
{
if
(
empty
(
$parameter
))
{
if
(
empty
(
$parameter
))
{
$this
->
node_params
=
Yii
::
$app
->
params
[
'chain33'
];
$this
->
node_params
=
Yii
::
$app
->
params
[
'chain33'
];
}
else
{
}
else
{
$this
->
node_params
=
$parameter
;
$this
->
node_params
=
$parameter
;
...
@@ -31,8 +31,8 @@ class Chain33Service
...
@@ -31,8 +31,8 @@ class Chain33Service
{
{
$config
=
$this
->
node_params
;
$config
=
$this
->
node_params
;
$scheme
=
$config
[
'scheme'
]
??
'http'
;
$scheme
=
$config
[
'scheme'
]
??
'http'
;
$host
=
$config
[
'host'
]
??
'127.0.0.1'
;
$host
=
$config
[
'host'
]
??
'127.0.0.1'
;
$port
=
(
string
)
$config
[
'port'
]
??
''
;
$port
=
(
string
)
$config
[
'port'
]
??
''
;
if
(
$port
)
{
if
(
$port
)
{
return
$scheme
.
'://'
.
$host
.
':'
.
$port
;
return
$scheme
.
'://'
.
$host
.
':'
.
$port
;
}
else
{
}
else
{
...
@@ -44,9 +44,9 @@ class Chain33Service
...
@@ -44,9 +44,9 @@ class Chain33Service
{
{
$data
=
[
$data
=
[
'jsonrpc'
=>
'2.0'
,
'jsonrpc'
=>
'2.0'
,
'id'
=>
0
,
'id'
=>
0
,
'method'
=>
$method
,
'method'
=>
$method
,
'params'
=>
[],
'params'
=>
[],
];
];
if
(
!
empty
(
$params
))
{
if
(
!
empty
(
$params
))
{
$data
[
'params'
][]
=
$params
;
$data
[
'params'
][]
=
$params
;
...
@@ -56,7 +56,11 @@ class Chain33Service
...
@@ -56,7 +56,11 @@ class Chain33Service
public
function
send
(
$params
=
[],
$method
=
'Chain33.Query'
)
public
function
send
(
$params
=
[],
$method
=
'Chain33.Query'
)
{
{
$ch
=
new
Curl
();
$timeout
=
[
'connect_timeout'
=>
50000
,
'timeout_ms'
=>
40000
];
$ch
=
new
Curl
(
$timeout
);
$jsonrpc
=
self
::
jsonRpcBuild
(
$params
,
$method
);
$jsonrpc
=
self
::
jsonRpcBuild
(
$params
,
$method
);
$ch
->
setHeader
(
'Content-Type'
,
'application/json'
);
$ch
->
setHeader
(
'Content-Type'
,
'application/json'
);
$ch
->
setRawPostData
(
$jsonrpc
);
$ch
->
setRawPostData
(
$jsonrpc
);
...
@@ -124,7 +128,7 @@ class Chain33Service
...
@@ -124,7 +128,7 @@ class Chain33Service
* 获取地址下的所有token资产
* 获取地址下的所有token资产
*
*
* @param string|array $address
* @param string|array $address
* @param string
$symbol
* @param string $symbol
* @return array
* @return array
*/
*/
public
function
getAccountTokenAssets
(
$address
,
$symbol
)
public
function
getAccountTokenAssets
(
$address
,
$symbol
)
...
@@ -133,8 +137,8 @@ class Chain33Service
...
@@ -133,8 +137,8 @@ class Chain33Service
$address
=
[
$address
];
$address
=
[
$address
];
}
}
$params
=
[
$params
=
[
"addresses"
=>
$address
,
"addresses"
=>
$address
,
"execer"
=>
"user.p.guodun.token"
,
"execer"
=>
"user.p.guodun.token"
,
"tokenSymbol"
=>
$symbol
"tokenSymbol"
=>
$symbol
];
];
return
$this
->
send
(
$params
,
'token.GetTokenBalance'
);
return
$this
->
send
(
$params
,
'token.GetTokenBalance'
);
...
@@ -147,18 +151,18 @@ class Chain33Service
...
@@ -147,18 +151,18 @@ class Chain33Service
* @param $to
* @param $to
* @param $amount
* @param $amount
* @param string $note
* @param string $note
* @param bool
$isToken
* @param bool $isToken
* @param string $tokenSymbol
* @param string $tokenSymbol
* @return array
* @return array
*/
*/
public
function
extractToken
(
$from
,
$to
,
$amount
,
$note
=
''
,
$isToken
=
true
,
$tokenSymbol
=
''
)
public
function
extractToken
(
$from
,
$to
,
$amount
,
$note
=
''
,
$isToken
=
true
,
$tokenSymbol
=
''
)
{
{
$params
=
[
$params
=
[
"from"
=>
$to
,
"from"
=>
$to
,
"to"
=>
$from
,
"to"
=>
$from
,
"amount"
=>
-
$amount
,
"amount"
=>
-
$amount
,
"note"
=>
$note
,
"note"
=>
$note
,
"isToken"
=>
$isToken
?
true
:
false
,
"isToken"
=>
$isToken
?
true
:
false
,
"tokenSymbol"
=>
strtoupper
(
$tokenSymbol
)
"tokenSymbol"
=>
strtoupper
(
$tokenSymbol
)
];
];
return
$this
->
send
(
$params
,
'Chain33.SendToAddress'
);
return
$this
->
send
(
$params
,
'Chain33.SendToAddress'
);
...
@@ -171,18 +175,18 @@ class Chain33Service
...
@@ -171,18 +175,18 @@ class Chain33Service
* @param $to
* @param $to
* @param $amount
* @param $amount
* @param string $note
* @param string $note
* @param bool
$isToken
* @param bool $isToken
* @param string $tokenSymbol
* @param string $tokenSymbol
* @return array
* @return array
*/
*/
public
function
transToken
(
$from
,
$to
,
$amount
,
$note
=
''
,
$isToken
=
true
,
$tokenSymbol
=
''
)
public
function
transToken
(
$from
,
$to
,
$amount
,
$note
=
''
,
$isToken
=
true
,
$tokenSymbol
=
''
)
{
{
$params
=
[
$params
=
[
"from"
=>
$from
,
"from"
=>
$from
,
"to"
=>
$to
,
"to"
=>
$to
,
"amount"
=>
$amount
,
"amount"
=>
$amount
,
"note"
=>
$note
,
"note"
=>
$note
,
"isToken"
=>
$isToken
?
true
:
false
,
"isToken"
=>
$isToken
?
true
:
false
,
"tokenSymbol"
=>
strtoupper
(
$tokenSymbol
)
"tokenSymbol"
=>
strtoupper
(
$tokenSymbol
)
];
];
return
$this
->
send
(
$params
,
'Chain33.SendToAddress'
);
return
$this
->
send
(
$params
,
'Chain33.SendToAddress'
);
...
@@ -191,25 +195,25 @@ class Chain33Service
...
@@ -191,25 +195,25 @@ class Chain33Service
public
function
createTokenRawTransaction
(
$to
,
$amount
,
$isToken
,
$tokenSymbol
,
$fee
,
$note
,
$execer
)
public
function
createTokenRawTransaction
(
$to
,
$amount
,
$isToken
,
$tokenSymbol
,
$fee
,
$note
,
$execer
)
{
{
$params
=
[
$params
=
[
"to"
=>
$to
,
"to"
=>
$to
,
"amount"
=>
$amount
,
"amount"
=>
$amount
,
"isToken"
=>
$isToken
,
"isToken"
=>
$isToken
,
"tokenSymbol"
=>
$tokenSymbol
,
"tokenSymbol"
=>
$tokenSymbol
,
"fee"
=>
$fee
,
"fee"
=>
$fee
,
"note"
=>
$note
,
"note"
=>
$note
,
"execer"
=>
$execer
,
"execer"
=>
$execer
,
];
];
return
$this
->
send
(
$params
,
'Chain33.CreateRawTransaction'
);
return
$this
->
send
(
$params
,
'Chain33.CreateRawTransaction'
);
}
}
public
function
createRawTransaction
(
$to
,
$amount
,
$fee
,
$note
,
$execer
)
public
function
createRawTransaction
(
$to
,
$amount
,
$fee
,
$note
,
$execer
)
{
{
$params
=
[
$params
=
[
"to"
=>
$to
,
"to"
=>
$to
,
"amount"
=>
$amount
,
"amount"
=>
$amount
,
"fee"
=>
$fee
,
"fee"
=>
$fee
,
"note"
=>
$note
,
"note"
=>
$note
,
"execer"
=>
$execer
,
"execer"
=>
$execer
,
];
];
...
@@ -274,11 +278,11 @@ class Chain33Service
...
@@ -274,11 +278,11 @@ class Chain33Service
public
function
structureTrade
(
$amount
,
$execName
,
$fee
,
$isToken
=
True
,
$to
,
$tokenSymbol
=
''
)
public
function
structureTrade
(
$amount
,
$execName
,
$fee
,
$isToken
=
True
,
$to
,
$tokenSymbol
=
''
)
{
{
$params
=
[
$params
=
[
"amount"
=>
$amount
,
"amount"
=>
$amount
,
"execName"
=>
$execName
,
"execName"
=>
$execName
,
"fee"
=>
$fee
,
"fee"
=>
$fee
,
"isToken"
=>
$isToken
?
true
:
false
,
"isToken"
=>
$isToken
?
true
:
false
,
"to"
=>
$to
,
"to"
=>
$to
,
"tokenSymbol"
=>
strtoupper
(
$tokenSymbol
)
"tokenSymbol"
=>
strtoupper
(
$tokenSymbol
)
];
];
return
$this
->
send
(
$params
,
'Chain33.CreateRawTransaction'
);
return
$this
->
send
(
$params
,
'Chain33.CreateRawTransaction'
);
...
@@ -287,21 +291,38 @@ class Chain33Service
...
@@ -287,21 +291,38 @@ class Chain33Service
public
function
signTrade
(
$addr
,
$expire
=
'2h'
,
$txHex
)
public
function
signTrade
(
$addr
,
$expire
=
'2h'
,
$txHex
)
{
{
$params
=
[
$params
=
[
"addr"
=>
$addr
,
"addr"
=>
$addr
,
"expire"
=>
$expire
,
"expire"
=>
$expire
,
"txHex"
=>
$txHex
"txHex"
=>
$txHex
];
];
return
$this
->
send
(
$params
,
'Chain33.SignRawTx'
);
return
$this
->
send
(
$params
,
'Chain33.SignRawTx'
);
}
}
public
function
getBlock2MainInfo
(
$start
,
$end
)
{
$params
=
[
"Start"
=>
$start
,
"End"
=>
$end
,
];
return
$this
->
send
(
$params
,
'paracross.GetBlock2MainInfo'
);
}
public
function
sendTrade
(
$data
)
public
function
sendTrade
(
$data
)
{
{
$params
=
[
$params
=
[
"data"
=>
$data
,
"data"
=>
$data
,
];
];
return
$this
->
send
(
$params
,
'Chain33.SendTransaction'
);
return
$this
->
send
(
$params
,
'Chain33.SendTransaction'
);
}
}
public
function
getHeight
(
$params
=
[])
{
$params
=
[
"data"
=>
'user.p.game.'
,
];
return
$this
->
send
(
$params
,
'paracross.GetHeight'
);
}
/**
/**
* 获取最新的区块
* 获取最新的区块
*/
*/
...
@@ -329,12 +350,12 @@ class Chain33Service
...
@@ -329,12 +350,12 @@ class Chain33Service
public
function
getTxByAddr
(
$addr
,
$flag
,
$count
,
$direction
,
$height
,
$index
)
public
function
getTxByAddr
(
$addr
,
$flag
,
$count
,
$direction
,
$height
,
$index
)
{
{
$params
=
[
$params
=
[
'addr'
=>
$addr
,
'addr'
=>
$addr
,
'flag'
=>
$flag
,
'flag'
=>
$flag
,
'count'
=>
$count
,
'count'
=>
$count
,
'direction'
=>
$direction
,
'direction'
=>
$direction
,
'height'
=>
$height
,
'height'
=>
$height
,
'index'
=>
$index
'index'
=>
$index
];
];
return
$this
->
send
(
$params
,
'Chain33.GetTxByAddr'
);
return
$this
->
send
(
$params
,
'Chain33.GetTxByAddr'
);
}
}
...
@@ -359,9 +380,9 @@ class Chain33Service
...
@@ -359,9 +380,9 @@ class Chain33Service
public
function
unLockWallet
(
$password
)
public
function
unLockWallet
(
$password
)
{
{
$params
=
[
$params
=
[
'passwd'
=>
$password
,
'passwd'
=>
$password
,
'walletorticket'
=>
false
,
'walletorticket'
=>
false
,
'timeout'
=>
30
'timeout'
=>
30
];
];
return
$this
->
send
(
$params
,
'Chain33.UnLock'
);
return
$this
->
send
(
$params
,
'Chain33.UnLock'
);
}
}
...
...
console/controllers/CrossChainController.php
View file @
accc1a5c
...
@@ -14,71 +14,95 @@ class CrossChainController extends Controller
...
@@ -14,71 +14,95 @@ class CrossChainController extends Controller
*
*
* @return array
* @return array
*/
*/
public
function
actionAutoTransfer
()
public
function
actionAutoTransfer
(
$step
,
$is_with_draw
)
{
{
$model
=
CoinCrossChain
::
find
()
->
where
([
'send_result'
=>
"0"
])
->
limit
(
20
)
->
groupBy
(
'transfer_number'
)
->
orderBy
(
'id'
)
->
asArray
()
->
all
();
$redis
=
Yii
::
$app
->
redis
;
$model
=
CoinCrossChain
::
find
()
->
where
([
'send_result'
=>
"0"
,
'step'
=>
(
int
)
$step
,
'is_with_draw'
=>
(
int
)
$is_with_draw
,
'query_result'
=>
'0'
])
->
asArray
()
->
all
();
if
(
empty
(
$model
))
{
if
(
empty
(
$model
))
{
echo
date
(
'Y-m-d H:i:s'
)
.
'暂无跨链交易计划'
.
PHP_EOL
;
echo
date
(
'Y-m-d H:i:s'
)
.
'
STEP: '
.
$step
.
'
暂无跨链交易计划'
.
PHP_EOL
;
return
0
;
return
0
;
}
}
$current_time
=
time
();
foreach
(
$model
as
$val
)
{
foreach
(
$model
as
$val
)
{
$isExist
=
CoinCrossChain
::
find
()
if
(
$step
>
1
)
{
->
where
([
'transfer_number'
=>
$val
[
'transfer_number'
]])
$isExist
=
CoinCrossChain
::
find
()
->
andWhere
([
'<'
,
'id'
,
(
int
)
$val
[
'id'
]])
->
where
([
'transfer_number'
=>
$val
[
'transfer_number'
]])
->
orderBy
(
'id desc'
)
->
andWhere
([
'<'
,
'id'
,
(
int
)
$val
[
'id'
]])
->
asArray
()
->
orderBy
(
'id desc'
)
->
one
();
->
asArray
()
//上一步发送成功,未查询
->
one
();
if
(
'success'
!=
$isExist
[
'query_result'
]
&&
!
empty
(
$isExist
))
{
//上一步发送成功,未查询
if
(
'success'
!=
$isExist
[
'query_result'
]
&&
!
empty
(
$isExist
))
{
continue
;
}
}
$cache_transfering_time
=
$redis
->
hget
(
CoinCrossChain
::
CROSS_CHAIN_TRANSFERING
,
$val
[
'address'
]
.
':'
.
$val
[
'is_with_draw'
]
.
':'
.
$val
[
'id'
]);
if
(
true
==
$cache_transfering_time
)
{
continue
;
continue
;
}
}
$redis
->
hmset
(
CoinCrossChain
::
CROSS_CHAIN_TRANSFERING
,
$val
[
'address'
]
.
':'
.
$val
[
'is_with_draw'
]
.
':'
.
$val
[
'id'
],
$current_time
);
//go(function () use ($val
) {
go
(
function
()
use
(
$val
,
$redis
)
{
//
\Co::sleep(0.5);
\Co
::
sleep
(
0.5
);
$transfer_url
=
$val
[
'transfer_url'
];
$transfer_url
=
$val
[
'transfer_url'
];
$transfer_url
=
explode
(
':'
,
$transfer_url
);
$transfer_url
=
explode
(
':'
,
$transfer_url
);
$node_params
=
[
$node_params
=
[
'scheme'
=>
$transfer_url
[
0
],
'scheme'
=>
$transfer_url
[
0
],
'host'
=>
str_replace
(
'//'
,
''
,
$transfer_url
[
1
]),
'host'
=>
str_replace
(
'//'
,
''
,
$transfer_url
[
1
]),
'port'
=>
isset
(
$transfer_url
[
2
])
?
$transfer_url
[
2
]
:
''
'port'
=>
isset
(
$transfer_url
[
2
])
?
$transfer_url
[
2
]
:
''
,
];
];
$service
=
new
Chain33Service
(
$node_params
);
$service
=
new
Chain33Service
(
$node_params
);
$sign_str
=
$val
[
'txhex'
];
$sign_str
=
$val
[
'txhex'
];
$result
=
$service
->
sendTransaction
(
$sign_str
);
$result
=
$service
->
sendTransaction
(
$sign_str
);
if
(
0
!=
$result
[
'code'
])
{
if
(
0
==
$result
[
'code'
])
{
$msg
=
$result
[
'msg'
];
$send_result
=
$result
[
'result'
];
goto
doEnd
;
$currentModel
=
CoinCrossChain
::
findOne
(
$val
[
'id'
]);
}
$send_result
=
$result
[
'result'
];
doEnd
:
$currentModel
=
CoinCrossChain
::
findOne
(
$val
[
'id'
]);
if
(
isset
(
$msg
))
{
$currentModel
->
msg
=
$msg
;
}
if
(
isset
(
$send_result
))
{
$currentModel
->
send_result
=
$send_result
;
$currentModel
->
send_result
=
$send_result
;
$currentModel
->
msg
=
0
;
$currentModel
->
save
();
$redis
->
hdel
(
CoinCrossChain
::
CROSS_CHAIN_TRANSFERING
,
$val
[
'address'
]
.
':'
.
$val
[
'is_with_draw'
]
.
':'
.
$val
[
'id'
]);
}
}
$currentModel
->
save
();
//});
if
(
0
!=
$result
[
'code'
]
&&
(
true
==
strstr
(
$result
[
'msg'
],
'Balance'
)))
{
$currentModel
=
CoinCrossChain
::
findOne
(
$val
[
'id'
]);
$currentModel
->
msg
=
$result
[
'msg'
];
$currentModel
->
save
();
$redis
->
hdel
(
CoinCrossChain
::
CROSS_CHAIN_TRANSFERING
,
$val
[
'address'
]
.
':'
.
$val
[
'is_with_draw'
]
.
':'
.
$val
[
'id'
]);
}
else
if
(
0
!=
$result
[
'code'
]
&&
(
false
==
strstr
(
$result
[
'msg'
],
'ErrDupTx'
)))
{
$redis
->
hdel
(
CoinCrossChain
::
CROSS_CHAIN_TRANSFERING
,
$val
[
'address'
]
.
':'
.
$val
[
'is_with_draw'
]
.
':'
.
$val
[
'id'
]);
}
else
{
}
});
}
}
echo
date
(
'Y-m-d H:i:s'
)
.
'跨链交易成功'
.
PHP_EOL
;
echo
date
(
'Y-m-d H:i:s'
)
.
'
STEP: '
.
$step
.
'
跨链交易成功'
.
PHP_EOL
;
return
0
;
return
0
;
}
}
public
function
actionQueryTransaction
()
public
function
actionQueryTransaction
()
{
{
$model
=
CoinCrossChain
::
find
()
->
where
([
'<>'
,
'send_result'
,
'0'
])
->
andWhere
([
'msg'
=>
'0'
])
->
limit
(
20
)
->
asArray
()
->
all
();
$redis
=
Yii
::
$app
->
redis
;
$model
=
CoinCrossChain
::
find
()
->
where
([
'<>'
,
'send_result'
,
'0'
])
->
andWhere
([
'msg'
=>
'0'
])
->
asArray
()
->
all
();
if
(
empty
(
$model
))
{
if
(
empty
(
$model
))
{
echo
date
(
'Y-m-d H:i:s'
)
.
'暂无跨链交易计划'
.
PHP_EOL
;
echo
date
(
'Y-m-d H:i:s'
)
.
'暂无跨链交易计划'
.
PHP_EOL
;
return
0
;
return
0
;
}
}
//查询共识高度
$node_params
=
[
'scheme'
=>
'https'
,
'host'
=>
'jiedian1.bityuan.com'
,
'port'
=>
8801
];
$service
=
new
Chain33Service
(
$node_params
);
$result
=
$service
->
getHeight
();
$consensHeight
=
$result
[
'result'
][
'consensHeight'
];
$current_time
=
time
();
foreach
(
$model
as
$val
)
{
foreach
(
$model
as
$val
)
{
$node_params
=
$val
[
'transfer_url'
];
$node_params
=
$val
[
'transfer_url'
];
$node_params
=
explode
(
':'
,
$node_params
);
$node_params
=
explode
(
':'
,
$node_params
);
...
@@ -90,30 +114,53 @@ class CrossChainController extends Controller
...
@@ -90,30 +114,53 @@ class CrossChainController extends Controller
$service
=
new
Chain33Service
(
$node_params
);
$service
=
new
Chain33Service
(
$node_params
);
$send_result
=
$val
[
'send_result'
];
$send_result
=
$val
[
'send_result'
];
$result
=
$service
->
QueryTransaction
(
$send_result
);
$result
=
$service
->
QueryTransaction
(
$send_result
);
if
(
-
1
==
$result
[
'code'
])
{
$switch
=
true
;
if
(
'tx not exist'
==
$result
[
'msg'
])
continue
;
$msg
=
$result
[
'msg'
];
$query_result
=
$result
[
'code'
];
goto
doEnd
;
// echo date('Y-m-d H:i:s') . 'ID:' . $val['id'] . '查询错误' . PHP_EOL;
// continue;
}
if
(
isset
(
$result
[
'result'
][
'actionName'
])
&&
'unknown'
==
$result
[
'result'
][
'actionName'
])
{
if
(
isset
(
$result
[
'result'
][
'actionName'
])
&&
'unknown'
==
$result
[
'result'
][
'actionName'
])
{
$redis
->
hdel
(
CoinCrossChain
::
CROSS_CHAIN_CACHE_FAIL
,
$val
[
'address'
]
.
':'
.
$val
[
'is_with_draw'
]);
$query_result
=
'success'
;
$query_result
=
'success'
;
$msg
=
'success'
;
$msg
=
'success'
;
$height
=
isset
(
$result
[
'result'
][
'height'
])
?
$result
[
'result'
][
'height'
]
:
0
;
goto
doEnd
;
}
else
if
(
isset
(
$result
[
'result'
][
'receipt'
][
'ty'
])
&&
2
==
$result
[
'result'
][
'receipt'
][
'ty'
])
{
}
else
if
(
isset
(
$result
[
'result'
][
'receipt'
][
'ty'
])
&&
2
==
$result
[
'result'
][
'receipt'
][
'ty'
])
{
$redis
->
hdel
(
CoinCrossChain
::
CROSS_CHAIN_CACHE_FAIL
,
$val
[
'address'
]
.
':'
.
$val
[
'is_with_draw'
]);
$query_result
=
'success'
;
$query_result
=
'success'
;
$msg
=
'success'
;
$msg
=
'success'
;
$height
=
isset
(
$result
[
'result'
][
'height'
])
?
$result
[
'result'
][
'height'
]
:
0
;
goto
doEnd
;
}
else
{
}
else
{
$query_result
=
'fail'
;
$cache_error_time
=
$redis
->
hget
(
CoinCrossChain
::
CROSS_CHAIN_CACHE_FAIL
,
$val
[
'address'
]
.
':'
.
$val
[
'is_with_draw'
]);
foreach
(
$result
[
'result'
][
'receipt'
][
'logs'
]
as
$log
)
{
if
(
false
==
$cache_error_time
)
{
if
(
is_array
(
$log
[
'log'
]))
continue
;
$redis
->
hmset
(
CoinCrossChain
::
CROSS_CHAIN_CACHE_FAIL
,
$val
[
'address'
]
.
':'
.
$val
[
'is_with_draw'
],
$current_time
);
$msg
=
isset
(
$log
[
'log'
])
?
$log
[
'log'
]
:
'查询错误'
;
continue
;
}
if
((
$current_time
-
$cache_error_time
)
<
60
)
{
continue
;
}
$redis
->
hdel
(
CoinCrossChain
::
CROSS_CHAIN_CACHE_FAIL
,
$val
[
'address'
]
.
':'
.
$val
[
'is_with_draw'
]);
if
(
-
1
==
$result
[
'code'
])
{
$msg
=
$result
[
'msg'
];
$query_result
=
$result
[
'code'
];
$switch
=
false
;
goto
doEnd
;
}
else
{
$query_result
=
'fail'
;
foreach
(
$result
[
'result'
][
'receipt'
][
'logs'
]
as
$log
)
{
if
(
is_array
(
$log
[
'log'
]))
continue
;
$msg
=
isset
(
$log
[
'log'
])
?
$log
[
'log'
]
:
'查询错误'
;
}
$switch
=
false
;
goto
doEnd
;
}
}
}
}
doEnd
:
doEnd
:
if
(
CoinCrossChain
::
RECHARGE
==
$val
[
'is_with_draw'
]
&&
$val
[
'step'
]
==
2
&&
$switch
&&
isset
(
$height
)
&&
(
$consensHeight
<
$height
))
{
continue
;
}
$currentModel
=
CoinCrossChain
::
findOne
(
$val
[
'id'
]);
$currentModel
=
CoinCrossChain
::
findOne
(
$val
[
'id'
]);
$currentModel
->
query_result
=
$query_result
;
$currentModel
->
query_result
=
$query_result
;
$currentModel
->
msg
=
$msg
;
$currentModel
->
msg
=
$msg
;
...
@@ -121,7 +168,6 @@ class CrossChainController extends Controller
...
@@ -121,7 +168,6 @@ class CrossChainController extends Controller
$count
=
CoinCrossChain
::
find
()
->
where
([
'transfer_number'
=>
$val
[
'transfer_number'
]])
->
andWhere
([
'query_result'
=>
'success'
])
->
count
();
$count
=
CoinCrossChain
::
find
()
->
where
([
'transfer_number'
=>
$val
[
'transfer_number'
]])
->
andWhere
([
'query_result'
=>
'success'
])
->
count
();
if
(
3
==
$count
)
{
if
(
3
==
$count
)
{
$redis
=
Yii
::
$app
->
redis
;
$key
=
$val
[
'address'
]
.
'_'
.
$val
[
'is_with_draw'
];
$key
=
$val
[
'address'
]
.
'_'
.
$val
[
'is_with_draw'
];
if
(
$redis
->
exists
(
$key
))
{
if
(
$redis
->
exists
(
$key
))
{
$redis
->
del
(
$key
);
$redis
->
del
(
$key
);
...
...
console/controllers/GameBetController.php
View file @
accc1a5c
...
@@ -4,6 +4,7 @@ namespace console\controllers;
...
@@ -4,6 +4,7 @@ namespace console\controllers;
use
common\business\Chain33Business
;
use
common\business\Chain33Business
;
use
common\models\psources\CoinGameBet
;
use
common\models\psources\CoinGameBet
;
use
common\service\chain33\Chain33Service
;
use
yii\console\Controller
;
use
yii\console\Controller
;
use
Yii
;
use
Yii
;
...
@@ -17,47 +18,46 @@ class GameBetController extends Controller
...
@@ -17,47 +18,46 @@ class GameBetController extends Controller
public
function
actionGameStatus
()
public
function
actionGameStatus
()
{
{
$nodes
=
\Yii
::
$app
->
params
[
'chain_parallel'
][
'wasm'
];
$nodes
=
\Yii
::
$app
->
params
[
'chain_parallel'
][
'wasm'
];
if
(
empty
(
$nodes
))
{
if
(
empty
(
$nodes
))
{
echo
date
(
'Y-m-d H:i:s'
)
.
'无节点'
.
PHP_EOL
;
echo
date
(
'Y-m-d H:i:s'
)
.
'无节点'
.
PHP_EOL
;
return
0
;
return
0
;
}
}
foreach
(
$nodes
as
$key
=>
$node
)
{
foreach
(
$nodes
as
$key
=>
$node
)
{
$service
=
new
Chain33Business
();
$service
=
new
Chain33Business
();
$result
=
$service
->
getGameStatus
(
$node
);
$result
=
$service
->
getGameStatus
(
$node
);
if
(
0
!==
$result
[
'code'
])
{
if
(
0
!==
$result
[
'code'
])
{
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
$result
[
'msg'
]
.
PHP_EOL
;
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
$result
[
'msg'
]
.
PHP_EOL
;
continue
;
continue
;
}
}
$queryResultItems
=
$result
[
'result'
]
??
[];
$queryResultItems
=
$result
[
'result'
]
??
[];
if
(
empty
(
$queryResultItems
))
{
if
(
empty
(
$queryResultItems
))
{
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'error'
.
PHP_EOL
;
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'error'
.
PHP_EOL
;
continue
;
continue
;
}
}
$resultJSON
=
json_decode
(
$queryResultItems
[
'queryResultItems'
][
0
][
'resultJSON'
],
true
);
$resultJSON
=
json_decode
(
$queryResultItems
[
'queryResultItems'
][
0
][
'resultJSON'
],
true
);
$current_round
=
$resultJSON
[
'current_round'
];
$current_round
=
$resultJSON
[
'current_round'
];
$cache_current_round
=
Yii
::
$app
->
redis
->
get
(
'chain33_game_bet_status_'
.
$key
);
$cache_current_round
=
Yii
::
$app
->
redis
->
get
(
'chain33_game_bet_status_'
.
$key
);
if
(
empty
(
$cache_current_round
))
{
if
(
empty
(
$cache_current_round
))
{
$cache_current_round
=
CoinGameBet
::
find
()
->
where
([
'platform'
=>
$key
])
->
max
(
'round'
);
$cache_current_round
=
CoinGameBet
::
find
()
->
where
([
'platform'
=>
$key
])
->
max
(
'round'
);
Yii
::
$app
->
redis
->
set
(
'chain33_game_bet_status_'
.
$key
,
$cache_current_round
,
'EX'
,
300
);
Yii
::
$app
->
redis
->
set
(
'chain33_game_bet_status_'
.
$key
,
$cache_current_round
,
'EX'
,
300
);
}
}
$cache_current_round
=
(
false
==
$cache_current_round
?
0
:
$cache_current_round
);
$cache_current_round
=
(
false
==
$cache_current_round
?
0
:
$cache_current_round
);
if
(
$cache_current_round
>=
$current_round
)
{
if
(
$cache_current_round
>=
$current_round
)
{
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据已为最新'
.
PHP_EOL
;
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据已为最新'
.
PHP_EOL
;
continue
;
continue
;
}
}
Yii
::
$app
->
redis
->
set
(
'chain33_game_bet_status_'
.
$key
,
$current_round
,
'EX'
,
300
);
Yii
::
$app
->
redis
->
set
(
'chain33_game_bet_status_'
.
$key
,
$current_round
,
'EX'
,
300
);
$result
=
$service
->
getBetStatus
(
$cache_current_round
,
$current_round
,
''
,
$node
);
$result
=
$service
->
getBetStatus
(
$cache_current_round
,
$current_round
,
''
,
$node
);
if
(
0
!==
$result
[
'code'
])
{
if
(
0
!==
$result
[
'code'
])
{
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据错误'
.
PHP_EOL
;
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据错误'
.
PHP_EOL
;
continue
;
continue
;
}
}
$queryResultItems
=
$result
[
'result'
]
??
[];
$queryResultItems
=
$result
[
'result'
]
??
[];
if
(
empty
(
$queryResultItems
))
{
if
(
empty
(
$queryResultItems
))
{
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据错误'
.
PHP_EOL
;
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据错误'
.
PHP_EOL
;
continue
;
continue
;
}
}
$platform
=
$key
;
$platform
=
$key
;
...
@@ -69,7 +69,7 @@ class GameBetController extends Controller
...
@@ -69,7 +69,7 @@ class GameBetController extends Controller
];
];
}
}
CoinGameBet
::
loadArray
(
$datas
);
CoinGameBet
::
loadArray
(
$datas
);
echo
$platform
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据更新成功'
.
PHP_EOL
;
echo
$platform
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据更新成功'
.
PHP_EOL
;
continue
;
continue
;
}
}
return
0
;
return
0
;
...
@@ -77,44 +77,66 @@ class GameBetController extends Controller
...
@@ -77,44 +77,66 @@ class GameBetController extends Controller
public
function
actionBetUpdate
()
public
function
actionBetUpdate
()
{
{
$service
=
new
Chain33Business
();
$node_params
=
[
'scheme'
=>
'https'
,
'host'
=>
'jiedian1.bityuan.com'
,
'port'
=>
8801
];
$result
=
$service
->
getLastHeader
(
$node_params
);
$main_height
=
isset
(
$result
[
'result'
][
'height'
])
?
$result
[
'result'
][
'height'
]
:
0
;
$safe_main_height
=
$main_height
-
14
;
$nodes
=
\Yii
::
$app
->
params
[
'chain_parallel'
][
'wasm'
];
$nodes
=
\Yii
::
$app
->
params
[
'chain_parallel'
][
'wasm'
];
if
(
empty
(
$nodes
))
{
if
(
empty
(
$nodes
))
{
echo
date
(
'Y-m-d H:i:s'
)
.
'无节点'
.
PHP_EOL
;
echo
date
(
'Y-m-d H:i:s'
)
.
'无节点'
.
PHP_EOL
;
return
0
;
return
0
;
}
}
foreach
(
$nodes
as
$key
=>
$node
)
{
foreach
(
$nodes
as
$key
=>
$node
)
{
$service
=
new
Chain33
Business
(
);
$service
=
new
Chain33
Service
(
$node
);
$result
=
$service
->
getLastHeader
(
$node
);
$result
=
$service
->
getLastHeader
(
);
$height
=
$result
[
'result'
][
'height'
];
$height
=
$result
[
'result'
][
'height'
];
$main_info
=
$service
->
getBlock2MainInfo
(
$height
-
14
,
$height
);
if
(
!
isset
(
$main_info
[
'result'
][
'items'
]))
continue
;
$items
=
$main_info
[
'result'
][
'items'
];
$items
=
$this
->
arraySort
(
$items
,
'mainHeight'
);
$safe_height
=
0
;
foreach
(
$items
as
$item
)
{
if
(
$safe_main_height
>
$item
[
'mainHeight'
])
{
$safe_height
=
$item
[
'height'
];
break
;
}
}
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'当前主链高度为:'
.
$main_height
.
';当前平行链高度为:'
.
$height
.
';当前安全高度为:'
.
$safe_height
.
PHP_EOL
;
$models
=
CoinGameBet
::
find
()
->
select
(
'round'
)
->
where
([
$models
=
CoinGameBet
::
find
()
->
select
(
'round'
)
->
where
([
'and'
,
'and'
,
[
'valid'
=>
CoinGameBet
::
VAILD_FALSE
],
[
'valid'
=>
CoinGameBet
::
VAILD_FALSE
],
[
'<'
,
'height'
,
$
height
-
12
],
[
'<'
,
'height'
,
$
safe_height
],
[
'platform'
=>
$key
]
[
'platform'
=>
$key
]
])
->
all
();
])
->
all
();
if
(
empty
(
$models
))
{
if
(
empty
(
$models
))
{
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'无需更新的数据'
.
PHP_EOL
;
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'无需更新的数据'
.
PHP_EOL
;
continue
;
continue
;
}
}
$valid_arr
=
[];
$valid_arr
=
[];
foreach
(
$models
as
$model
)
{
foreach
(
$models
as
$model
)
{
$valid_arr
[]
=
$model
->
round
;
$valid_arr
[]
=
$model
->
round
;
}
}
$result
=
$service
->
getBetStatus
(
''
,
''
,
$valid_arr
,
$node
);
$business
=
new
Chain33Business
();
if
(
0
!==
$result
[
'code'
]){
$result
=
$business
->
getBetStatus
(
''
,
''
,
$valid_arr
,
$node
);
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据错误'
.
PHP_EOL
;
if
(
0
!==
$result
[
'code'
])
{
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据错误'
.
PHP_EOL
;
continue
;
continue
;
}
}
$queryResultItems
=
$result
[
'result'
]
??
[];
$queryResultItems
=
$result
[
'result'
]
??
[];
if
(
empty
(
$queryResultItems
))
{
if
(
empty
(
$queryResultItems
))
{
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据错误'
.
PHP_EOL
;
echo
$key
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据错误'
.
PHP_EOL
;
continue
;
continue
;
}
}
$platform
=
$key
;
$platform
=
$key
;
foreach
(
$queryResultItems
[
'queryResultItems'
]
as
$key
=>
$val
){
foreach
(
$queryResultItems
[
'queryResultItems'
]
as
$key
=>
$val
)
{
if
(
false
==
$val
[
'found'
])
continue
;
if
(
false
==
$val
[
'found'
])
continue
;
$resultArr
=
json_decode
(
$val
[
'resultJSON'
],
true
);
$resultArr
=
json_decode
(
$val
[
'resultJSON'
],
true
);
CoinGameBet
::
updateAll
([
CoinGameBet
::
updateAll
([
'amount'
=>
$resultArr
[
'amount'
],
'amount'
=>
$resultArr
[
'amount'
],
'height'
=>
$resultArr
[
'height'
],
'height'
=>
$resultArr
[
'height'
],
...
@@ -122,14 +144,25 @@ class GameBetController extends Controller
...
@@ -122,14 +144,25 @@ class GameBetController extends Controller
'rand_num'
=>
$resultArr
[
'rand_num'
],
'rand_num'
=>
$resultArr
[
'rand_num'
],
'player_win'
=>
$resultArr
[
'player_win'
],
'player_win'
=>
$resultArr
[
'player_win'
],
'valid'
=>
CoinGameBet
::
VAILD_TRUE
'valid'
=>
CoinGameBet
::
VAILD_TRUE
],[
],
[
'round'
=>
$resultArr
[
'round'
],
'round'
=>
$resultArr
[
'round'
],
'platform'
=>
$platform
'platform'
=>
$platform
]);
]);
}
}
echo
$platform
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据更新成功'
.
PHP_EOL
;
echo
$platform
.
':'
.
date
(
'Y-m-d H:i:s'
)
.
'数据更新成功'
.
PHP_EOL
;
continue
;
continue
;
}
}
return
0
;
return
0
;
}
}
protected
function
arraySort
(
$array
,
$keys
,
$sort
=
SORT_DESC
)
{
$keysValue
=
[];
foreach
(
$array
as
$k
=>
$v
)
{
$keysValue
[
$k
]
=
$v
[
$keys
];
}
array_multisort
(
$keysValue
,
$sort
,
$array
);
return
$array
;
}
}
}
\ No newline at end of file
shell/AutoTransfer.sh
deleted
100644 → 0
View file @
cf53079d
#!/bin/bash
while
true
;
do
php /var/www/html/token_pwallet/yii cross-chain/auto-transfer
>>
/var/www/html/auto-transfer.log 2>&1
;
sleep
15
;
done
&
\ No newline at end of file
shell/GameBet.sh
deleted
100644 → 0
View file @
cf53079d
#!/bin/bash
while
true
;
do
php /var/www/html/token_pwallet/yii game-bet/game-status
>>
/var/log/game-bet.log 2>&1
;
sleep
5
;
done
&
\ No newline at end of file
shell/QueryTransaction.sh
deleted
100644 → 0
View file @
cf53079d
#!/bin/bash
while
true
;
do
php /var/www/html/token_pwallet/yii cross-chain/query-transaction
>>
/var/www/html/query-transaction.log 2>&1
;
sleep
20
;
done
&
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment