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
6c175d7e
Commit
6c175d7e
authored
Oct 30, 2019
by
shajiaiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
test
parent
87c7eb50
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
222 additions
and
4 deletions
+222
-4
OrderController.php
api/controllers/OrderController.php
+4
-2
CoinCTocTransfer.php
common/models/psources/CoinCTocTransfer.php
+8
-2
OrderController.php
console/controllers/OrderController.php
+210
-0
No files found.
api/controllers/OrderController.php
View file @
6c175d7e
...
...
@@ -30,11 +30,12 @@ class OrderController extends BaseController
$data
[
'market_name'
]
=
strtoupper
(
$post
[
'market_name'
]);
$data
[
'price'
]
=
$post
[
'price'
];
$data
[
'amount'
]
=
$post
[
'amount'
];
$data
[
'transfer_number'
]
=
date
(
'YmdHis'
)
.
self
::
getrandnums
();
$redis
=
Yii
::
$app
->
redis
;
$key
=
'C2C_'
.
$post
[
'address'
]
.
'_'
.
$
data
[
'is_sell'
]
.
'_'
.
str_replace
(
'/'
,
'-'
,
$post
[
'token_name'
])
.
'_'
.
str_replace
(
'/'
,
'-'
,
$post
[
'market_name'
])
;
$key
=
'C2C_'
.
$post
[
'address'
]
.
'_'
.
$
post
[
'is_sell'
]
.
'_'
.
$post
[
'token_name'
]
.
'-'
.
$post
[
'market_name'
]
;
if
(
$redis
->
exists
(
$key
))
{
$msg
=
'尚存在一笔未完成的交易!'
;
...
...
@@ -47,6 +48,7 @@ class OrderController extends BaseController
$data
[
'txhex'
]
=
$val
[
'tx'
];
$data
[
'transfer_url'
]
=
$val
[
'url'
];
$data
[
'step'
]
=
$val
[
'step'
];
$data
[
'consensus'
]
=
(
false
==
$val
[
'consensus'
])
?
0
:
1
;
$model
->
load
(
$data
,
''
);
$model
->
save
();
}
...
...
@@ -204,7 +206,7 @@ class OrderController extends BaseController
//交易成功,查询成功
if
(
true
==
$val
[
'send_result'
]
&&
'success'
==
$val
[
'query_result'
]
&&
'success'
==
$val
[
'msg'
])
{
if
((
count
(
$orders_info
)
-
1
)
==
$key
)
{
$step
=
((
count
(
$orders_info
)
-
1
)
==
$key
)
?
(
count
(
$orders_info
)
*
2
)
:
(
$key
+
2
);
$step
=
((
count
(
$orders_info
)
-
1
)
==
$key
)
?
99
:
(
$key
+
2
);
$code
=
0
;
$msg
=
$val
[
'send_result'
];
goto
doEnd
;
...
...
common/models/psources/CoinCTocTransfer.php
View file @
6c175d7e
...
...
@@ -10,10 +10,16 @@ class CoinCTocTransfer extends BaseActiveRecord
const
TYPE_SELL
=
1
;
//卖单
const
TYPE_BUY
=
0
;
//买单
const
CONSENSUE_YES
=
1
;
//需要
const
CONSENSUE_NO
=
0
;
//不需要
const
TYPE_ORDER
=
1
;
//挂单
const
TYPE_TRANSFER
=
2
;
//交易
const
TYPE_REVOKE
=
3
;
//撤消
const
C2C_ORDER_TRANSFERING
=
'C2C_order_transfering'
;
const
C2C_ORDER_FAIL
=
'C2C_order_fail'
;
public
static
function
getDb
()
{
return
Yii
::
$app
->
get
(
'p_sources'
);
...
...
@@ -31,7 +37,7 @@ class CoinCTocTransfer extends BaseActiveRecord
public
function
rules
()
{
return
[
[[
'is_sell'
,
'type'
,
'address'
,
'token_name'
,
'market_name'
,
'price'
,
'amount'
,
'step'
,
'txhex'
,
'transfer_url'
,
'transfer_number'
],
'required'
],
[[
'is_sell'
,
'type'
,
'address'
,
'token_name'
,
'market_name'
,
'price'
,
'amount'
,
'step'
,
'txhex'
,
'transfer_url'
,
'transfer_number'
,
'consensus'
],
'required'
],
[[
'send_result'
,
'query_result'
,
'msg'
],
'safe'
]
];
}
...
...
@@ -39,7 +45,7 @@ class CoinCTocTransfer extends BaseActiveRecord
public
function
scenarios
()
{
$scenarios
=
[
self
::
SCENARIOS_CREATE
=>
[
'is_sell'
,
'type'
,
'address'
,
'token_name'
,
'market_name'
,
'price'
,
'amount'
,
'step'
,
'txhex'
,
'transfer_url'
,
'transfer_number'
],
self
::
SCENARIOS_CREATE
=>
[
'is_sell'
,
'type'
,
'address'
,
'token_name'
,
'market_name'
,
'price'
,
'amount'
,
'step'
,
'txhex'
,
'transfer_url'
,
'transfer_number'
,
'consensus'
],
];
return
array_merge
(
parent
::
scenarios
(),
$scenarios
);
}
...
...
console/controllers/OrderController.php
0 → 100644
View file @
6c175d7e
<?php
namespace
console\controllers
;
use
common\models\psources\CoinCrossChain
;
use
common\models\psources\CoinCTocTransfer
;
use
Yii
;
use
yii\console\Controller
;
use
common\service\chain33\Chain33Service
;
class
OrderController
extends
Controller
{
/**
* 自动交易
*
* @return array
*/
public
function
actionAutoOrder
(
$is_sell
,
$type
)
{
$redis
=
Yii
::
$app
->
redis
;
$model
=
CoinCTocTransfer
::
find
()
->
where
([
'send_result'
=>
"0"
,
'is_sell'
=>
(
int
)
$is_sell
,
'type'
=>
(
int
)
$type
,
'query_result'
=>
'0'
])
->
asArray
()
->
all
();
if
(
empty
(
$model
))
{
echo
date
(
'Y-m-d H:i:s'
)
.
'暂无交易计划'
.
PHP_EOL
;
return
0
;
}
$current_time
=
time
();
foreach
(
$model
as
$val
)
{
if
(
$val
[
'step'
]
>
1
)
{
$isExist
=
CoinCTocTransfer
::
find
()
->
where
([
'transfer_number'
=>
$val
[
'transfer_number'
]])
->
andWhere
([
'<'
,
'id'
,
(
int
)
$val
[
'id'
]])
->
orderBy
(
'id desc'
)
->
asArray
()
->
one
();
//上一步发送成功,未查询
if
(
'success'
!=
$isExist
[
'query_result'
]
&&
!
empty
(
$isExist
))
{
continue
;
}
}
$key
=
$val
[
'address'
]
.
'_'
.
$val
[
'is_sell'
]
.
'_'
.
$val
[
'token_name'
]
.
'_'
.
$val
[
'market_name'
];
$cache_transfering_time
=
$redis
->
hget
(
CoinCTocTransfer
::
C2C_ORDER_TRANSFERING
,
$key
);
if
(
true
==
$cache_transfering_time
)
{
continue
;
}
$redis
->
hmset
(
CoinCTocTransfer
::
C2C_ORDER_TRANSFERING
,
$key
,
$current_time
);
go
(
function
()
use
(
$val
,
$redis
,
$key
)
{
\Co
::
sleep
(
0.5
);
$transfer_url
=
$val
[
'transfer_url'
];
$transfer_url
=
explode
(
':'
,
$transfer_url
);
$node_params
=
[
'scheme'
=>
$transfer_url
[
0
],
'host'
=>
str_replace
(
'//'
,
''
,
$transfer_url
[
1
]),
'port'
=>
isset
(
$transfer_url
[
2
])
?
$transfer_url
[
2
]
:
''
,
];
$service
=
new
Chain33Service
(
$node_params
);
$sign_str
=
$val
[
'txhex'
];
$result
=
$service
->
sendTransaction
(
$sign_str
);
if
(
0
==
$result
[
'code'
])
{
$send_result
=
$result
[
'result'
];
$currentModel
=
CoinCTocTransfer
::
findOne
(
$val
[
'id'
]);
$currentModel
->
send_result
=
$send_result
;
$currentModel
->
msg
=
0
;
$currentModel
->
save
();
$redis
->
hdel
(
CoinCTocTransfer
::
C2C_ORDER_TRANSFERING
,
$key
);
}
else
{
$currentModel
=
CoinCTocTransfer
::
findOne
(
$val
[
'id'
]);
$currentModel
->
msg
=
$result
[
'msg'
];
$currentModel
->
save
();
}
});
}
echo
date
(
'Y-m-d H:i:s'
)
.
'交易成功'
.
PHP_EOL
;
return
0
;
}
public
function
actionOrderStatus
()
{
$redis
=
Yii
::
$app
->
redis
;
$model
=
CoinCTocTransfer
::
find
()
->
where
([
'<>'
,
'send_result'
,
'0'
])
->
andWhere
([
'msg'
=>
'0'
])
->
asArray
()
->
all
();
if
(
empty
(
$model
))
{
echo
date
(
'Y-m-d H:i:s'
)
.
'暂无跨链交易计划'
.
PHP_EOL
;
return
0
;
}
//正式环境查询共识高度
//3步交易情况下需要做高度判断,2步交易无须判断
$node_params
=
[
'scheme'
=>
'https'
,
'host'
=>
'jiedian1.bityuan.com'
,
'port'
=>
8801
];
//测试环境查询共识高度
//2步交易情况下需要做高度判断
// $node_params = [
// 'scheme' => 'http',
// 'host' => '172.16.100.77',
// 'port' => 8801
// ];
$service
=
new
Chain33Service
(
$node_params
);
$result
=
$service
->
getHeight
();
$consensHeight
=
$result
[
'result'
][
'consensHeight'
];
$current_time
=
time
();
foreach
(
$model
as
$val
)
{
$key
=
$val
[
'address'
]
.
'_'
.
$val
[
'is_sell'
]
.
'_'
.
$val
[
'token_name'
]
.
'_'
.
$val
[
'market_name'
];
$node_params
=
$val
[
'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
]
:
''
];
$send_result
=
$val
[
'send_result'
];
#$result = $service->QueryTransaction($send_result);
$switch
=
true
;
$result
=
$this
->
queryTransaction
(
$node_params
,
$send_result
);
if
(
isset
(
$result
[
'result'
][
'actionName'
])
&&
'unknown'
==
$result
[
'result'
][
'actionName'
])
{
$redis
->
hdel
(
CoinCTocTransfer
::
C2C_ORDER_FAIL
,
$key
);
$query_result
=
'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'
])
{
$redis
->
hdel
(
CoinCTocTransfer
::
C2C_ORDER_FAIL
,
$key
);
$query_result
=
'success'
;
$msg
=
'success'
;
$height
=
isset
(
$result
[
'result'
][
'height'
])
?
$result
[
'result'
][
'height'
]
:
0
;
goto
doEnd
;
}
else
{
$cache_error_time
=
$redis
->
hget
(
CoinCTocTransfer
::
C2C_ORDER_FAIL
,
$key
);
if
(
false
==
$cache_error_time
)
{
$redis
->
hmset
(
CoinCTocTransfer
::
C2C_ORDER_FAIL
,
$key
,
$current_time
);
continue
;
}
if
((
$current_time
-
$cache_error_time
)
<
60
)
{
continue
;
}
$redis
->
hdel
(
CoinCTocTransfer
::
C2C_ORDER_FAIL
,
$key
);
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
:
//3步交易情况下需要做高度判断,2步交易注释IF判断
if
(
CoinCTocTransfer
::
CONSENSUE_YES
==
$val
[
'consensus'
]
&&
true
==
$switch
&&
isset
(
$height
)
&&
(
$consensHeight
<
$height
))
{
continue
;
}
$currentModel
=
CoinCTocTransfer
::
findOne
(
$val
[
'id'
]);
$currentModel
->
query_result
=
$query_result
;
$currentModel
->
msg
=
$msg
;
$currentModel
->
save
();
$model_c2c
=
CoinCTocTransfer
::
find
()
->
where
([
'transfer_number'
=>
$val
[
'transfer_number'
]])
->
asArray
()
->
all
();
$clear
=
true
;
foreach
(
$model_c2c
as
$record
)
{
if
(
'success'
!=
$record
[
'query_result'
])
{
$clear
=
false
;
}
}
if
(
true
==
$clear
)
{
$key
=
'C2C_'
.
$val
[
'address'
]
.
'_'
.
$val
[
'is_sell'
]
.
'_'
.
$val
[
'token_name'
]
.
'-'
.
$val
[
'market_name'
];
$redis
->
del
(
$key
);
}
}
echo
date
(
'Y-m-d H:i:s'
)
.
'查询完毕'
.
PHP_EOL
;
return
0
;
}
protected
function
queryTransaction
(
$node_params
,
$send_result
)
{
static
$result
=
[];
$service
=
new
Chain33Service
(
$node_params
);
$result
=
$service
->
QueryTransaction
(
$send_result
);
if
(
isset
(
$result
[
'result'
][
'receipt'
])
&&
is_array
(
$result
[
'result'
][
'receipt'
][
'logs'
]))
{
foreach
(
$result
[
'result'
][
'receipt'
][
'logs'
]
as
$log
)
{
if
(
isset
(
$log
[
'tyName'
])
&&
'logerr'
==
strtolower
(
$log
[
'tyName'
]))
{
return
$result
;
}
}
}
if
(
isset
(
$result
[
'result'
][
'tx'
][
'next'
]))
{
$this
->
queryTransaction
(
$node_params
,
$result
[
'result'
][
'tx'
][
'next'
]);
}
return
$result
;
}
}
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