API接口-初版
This commit is contained in:
173
app/api/controller/Finance.php
Normal file
173
app/api/controller/Finance.php
Normal file
@@ -0,0 +1,173 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\controller;
|
||||
|
||||
use app\common\model\DepositOrder;
|
||||
use app\common\model\WithdrawOrder;
|
||||
use Webman\Http\Request;
|
||||
use support\Response;
|
||||
|
||||
class Finance extends MobileBase
|
||||
{
|
||||
public function depositCreate(Request $request): Response
|
||||
{
|
||||
$response = $this->initializeMobile($request);
|
||||
if ($response !== null) {
|
||||
return $response;
|
||||
}
|
||||
$payAmountFiat = (string) $request->post('pay_amount_fiat', '');
|
||||
$fiatCurrency = trim((string) $request->post('fiat_currency', ''));
|
||||
$channel = trim((string) $request->post('channel', ''));
|
||||
$idempotencyKey = trim((string) $request->post('idempotency_key', ''));
|
||||
if ($payAmountFiat === '' || $fiatCurrency === '' || $channel === '' || $idempotencyKey === '') {
|
||||
return $this->mobileError(1001, 'Missing parameters');
|
||||
}
|
||||
|
||||
$orderNo = 'DP' . date('YmdHis') . substr(str_replace('.', '', uniqid('', true)), -6);
|
||||
$coinAmount = $payAmountFiat;
|
||||
DepositOrder::create([
|
||||
'order_no' => $orderNo,
|
||||
'user_id' => $this->auth->id,
|
||||
'fiat_currency' => $fiatCurrency,
|
||||
'fiat_amount' => $payAmountFiat,
|
||||
'fx_rate' => '1.00000000',
|
||||
'coin_amount' => $coinAmount,
|
||||
'gateway' => $channel,
|
||||
'status' => 0,
|
||||
'create_time' => time(),
|
||||
'update_time' => time(),
|
||||
]);
|
||||
|
||||
return $this->mobileSuccess([
|
||||
'order_no' => $orderNo,
|
||||
'coin_amount' => $coinAmount,
|
||||
'pay_url' => '',
|
||||
'status' => 'pending',
|
||||
]);
|
||||
}
|
||||
|
||||
public function depositDetail(Request $request): Response
|
||||
{
|
||||
$response = $this->initializeMobile($request);
|
||||
if ($response !== null) {
|
||||
return $response;
|
||||
}
|
||||
$orderNo = trim((string) $request->get('order_no', ''));
|
||||
if ($orderNo === '') {
|
||||
return $this->mobileError(1001, 'Missing parameters');
|
||||
}
|
||||
$order = DepositOrder::where('order_no', $orderNo)->where('user_id', $this->auth->id)->find();
|
||||
if (!$order) {
|
||||
return $this->mobileError(2003, 'Order does not exist');
|
||||
}
|
||||
return $this->mobileSuccess([
|
||||
'order_no' => $order->order_no,
|
||||
'status' => $this->mapDepositStatus($order->status),
|
||||
'coin_amount' => $order->coin_amount,
|
||||
'create_time' => $order->create_time,
|
||||
'finish_time' => $order->paid_at,
|
||||
]);
|
||||
}
|
||||
|
||||
public function withdrawCreate(Request $request): Response
|
||||
{
|
||||
$response = $this->initializeMobile($request);
|
||||
if ($response !== null) {
|
||||
return $response;
|
||||
}
|
||||
$withdrawCoin = (string) $request->post('withdraw_coin', '');
|
||||
$receiveAccount = trim((string) $request->post('receive_account', ''));
|
||||
$receiveType = trim((string) $request->post('receive_type', ''));
|
||||
$idempotencyKey = trim((string) $request->post('idempotency_key', ''));
|
||||
if ($withdrawCoin === '' || $receiveAccount === '' || $receiveType === '' || $idempotencyKey === '') {
|
||||
return $this->mobileError(1001, 'Missing parameters');
|
||||
}
|
||||
$user = $this->auth->getUser();
|
||||
if (bccomp((string) $user->coin, $withdrawCoin, 4) < 0) {
|
||||
return $this->mobileError(2001, 'Insufficient balance');
|
||||
}
|
||||
|
||||
$orderNo = 'WD' . date('YmdHis') . substr(str_replace('.', '', uniqid('', true)), -6);
|
||||
$feeCoin = bcmul($withdrawCoin, '0.005', 4);
|
||||
$actualArrivalCoin = bcsub($withdrawCoin, $feeCoin, 4);
|
||||
WithdrawOrder::create([
|
||||
'order_no' => $orderNo,
|
||||
'user_id' => $user->id,
|
||||
'apply_amount' => $withdrawCoin,
|
||||
'fee_amount' => $feeCoin,
|
||||
'actual_amount' => $actualArrivalCoin,
|
||||
'fiat_currency' => '',
|
||||
'need_audit' => 1,
|
||||
'audit_status' => 0,
|
||||
'reject_reason' => '',
|
||||
'create_time' => time(),
|
||||
'update_time' => time(),
|
||||
]);
|
||||
|
||||
return $this->mobileSuccess([
|
||||
'order_no' => $orderNo,
|
||||
'status' => 'pending_review',
|
||||
'fee_coin' => $feeCoin,
|
||||
'actual_arrival_coin' => $actualArrivalCoin,
|
||||
'risk_review_required' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
public function withdrawDetail(Request $request): Response
|
||||
{
|
||||
$response = $this->initializeMobile($request);
|
||||
if ($response !== null) {
|
||||
return $response;
|
||||
}
|
||||
$orderNo = trim((string) $request->get('order_no', ''));
|
||||
if ($orderNo === '') {
|
||||
return $this->mobileError(1001, 'Missing parameters');
|
||||
}
|
||||
$order = WithdrawOrder::where('order_no', $orderNo)->where('user_id', $this->auth->id)->find();
|
||||
if (!$order) {
|
||||
return $this->mobileError(2003, 'Order does not exist');
|
||||
}
|
||||
return $this->mobileSuccess([
|
||||
'order_no' => $order->order_no,
|
||||
'status' => $this->mapWithdrawStatus($order->audit_status),
|
||||
'withdraw_coin' => $order->apply_amount,
|
||||
'fee_coin' => $order->fee_amount,
|
||||
'reject_reason' => $order->reject_reason === '' ? null : $order->reject_reason,
|
||||
'create_time' => $order->create_time,
|
||||
]);
|
||||
}
|
||||
|
||||
private function mapDepositStatus($status): string
|
||||
{
|
||||
if ($this->intValue($status) === 1) {
|
||||
return 'paid';
|
||||
}
|
||||
if ($this->intValue($status) === 2 || $this->intValue($status) === 3) {
|
||||
return 'failed';
|
||||
}
|
||||
return 'pending';
|
||||
}
|
||||
|
||||
private function mapWithdrawStatus($auditStatus): string
|
||||
{
|
||||
if ($this->intValue($auditStatus) === 1) {
|
||||
return 'approved';
|
||||
}
|
||||
if ($this->intValue($auditStatus) === 2) {
|
||||
return 'rejected';
|
||||
}
|
||||
return 'pending_review';
|
||||
}
|
||||
|
||||
private function intValue($value): int
|
||||
{
|
||||
$result = filter_var($value, FILTER_VALIDATE_INT);
|
||||
if ($result === false) {
|
||||
return 0;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user