优化alchemy购买流程
This commit is contained in:
parent
db5c061ce4
commit
ff90914997
@ -8,17 +8,19 @@ API_TOKEN_EXPIRESIN=1d
|
|||||||
GOOGLE_OAUTH_CLIENT="53206975661-asnf3qe4bg29p8h981pgf099osvrjbme.apps.googleusercontent.com"
|
GOOGLE_OAUTH_CLIENT="53206975661-asnf3qe4bg29p8h981pgf099osvrjbme.apps.googleusercontent.com"
|
||||||
GOOGLE_OAUTH_CLIENT2="53206975661-ih3r0ubph3rqejdq97b029difbrk2bqj.apps.googleusercontent.com"
|
GOOGLE_OAUTH_CLIENT2="53206975661-ih3r0ubph3rqejdq97b029difbrk2bqj.apps.googleusercontent.com"
|
||||||
GOOGLE_OAUTH_CLIENT_IOS="53206975661-qan0rnefniegjv53ohild375pv0p7ekd.apps.googleusercontent.com"
|
GOOGLE_OAUTH_CLIENT_IOS="53206975661-qan0rnefniegjv53ohild375pv0p7ekd.apps.googleusercontent.com"
|
||||||
DB_MAIN=mongodb://localhost/wallet-development
|
GOOGLE_CLOUD_API_KEY="AIzaSyDNOhG9J0TFqeE0g5TOnxWpDNkUMc3PBgI"
|
||||||
|
DB_MAIN=mongodb://192.168.100.22/wallet-development
|
||||||
|
DB_PAY=mongodb://192.168.100.22/pay-development
|
||||||
|
|
||||||
EMAIL_VERIFY_URL="https://wallet.cebggame.com"
|
EMAIL_VERIFY_URL="https://wallet.cebggame.com"
|
||||||
EMAIL_SERVER='http://127.0.0.1:3087'
|
EMAIL_SERVER='http://127.0.0.1:3087'
|
||||||
|
|
||||||
ALCHEMY_APPID="f83Is2y7L425rxl8"
|
ALCHEMY_APPID="f83Is2y7L425rxl8"
|
||||||
ALCHEMY_APP_SECRET="4Yn8RkxDXN71Q3p0"
|
ALCHEMY_APP_SECRET="4Yn8RkxDXN71Q3p0"
|
||||||
# ALCHEMY_API_BASE="https://openapi-test.alchemypay.org"
|
ALCHEMY_API_BASE="https://openapi-test.alchemypay.org"
|
||||||
# ALCHEMY_PAGE_BASE="https://ramptest.alchemypay.org"
|
ALCHEMY_PAGE_BASE="https://ramptest.alchemypay.org"
|
||||||
ALCHEMY_API_BASE="http://127.0.0.1:3009"
|
# ALCHEMY_API_BASE="http://127.0.0.1:3009"
|
||||||
ALCHEMY_PAGE_BASE="http://127.0.0.1:3009/pay_page"
|
# ALCHEMY_PAGE_BASE="http://127.0.0.1:3009/pay_page"
|
||||||
|
|
||||||
ALCHEMY_PAY_CB_URL="https://wallet.cebggame.com"
|
ALCHEMY_PAY_CB_URL="https://wallet.cebggame.com"
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ let baseConfig = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
db_main: process.env.DB_MAIN,
|
db_main: process.env.DB_MAIN,
|
||||||
db_second: process.env.DB_SECOND,
|
db_pay: process.env.DB_PAY,
|
||||||
chainCfgs: chainCfgs,
|
chainCfgs: chainCfgs,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ import { PayRecord, PayStatus } from 'modules/PayRecord'
|
|||||||
import { TransferQueue } from 'queue/transfer.queue'
|
import { TransferQueue } from 'queue/transfer.queue'
|
||||||
import { TransferRecord } from 'modules/TransferRecord'
|
import { TransferRecord } from 'modules/TransferRecord'
|
||||||
import { reportPayResult } from 'service/game.svr'
|
import { reportPayResult } from 'service/game.svr'
|
||||||
|
import { PriceSvr } from 'service/price.svr'
|
||||||
|
|
||||||
let errorRes = function (msg: string) {
|
let errorRes = function (msg: string) {
|
||||||
logger.info(`error res: ${msg}`)
|
logger.info(`error res: ${msg}`)
|
||||||
@ -90,14 +91,17 @@ class AlchemyOutController extends BaseController {
|
|||||||
if (!checkSha1Sign(req.headers)) {
|
if (!checkSha1Sign(req.headers)) {
|
||||||
return errorRes('sign error')
|
return errorRes('sign error')
|
||||||
}
|
}
|
||||||
|
let gas = 36000 * 0.0000000001
|
||||||
|
let price = await new PriceSvr().fetchPrice({ crypto: 'ETH', network: 'ARBITRUM' })
|
||||||
|
let networkFee = gas * parseFloat(price)
|
||||||
let result = {
|
let result = {
|
||||||
direct: 1,
|
direct: 1,
|
||||||
data: {
|
data: {
|
||||||
price: '1.0',
|
price: '1.0',
|
||||||
networkList: [
|
networkList: [
|
||||||
{
|
{
|
||||||
network: 'AGOR',
|
network: 'ARBITRUM',
|
||||||
networkFee: '0.037',
|
networkFee: networkFee.toFixed(6),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -23,7 +23,7 @@ const notify = async function (record: DocumentType<PayRecordClass>, subTask: Do
|
|||||||
network: record.network, // 用户购买的数字货币对应的网络
|
network: record.network, // 用户购买的数字货币对应的网络
|
||||||
// networkFee: record.networkFee, // 网络费用/USDT
|
// networkFee: record.networkFee, // 网络费用/USDT
|
||||||
address: record.address, // 用户的提币地址
|
address: record.address, // 用户的提币地址
|
||||||
status: 'SUCCESS', // SUCCESS/FAIL
|
status: record.status === PayStatus.TRANSFERED ? 'SUCCESS' : 'FAIL', // SUCCESS/FAIL
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
let priceData = await queryPrice({ gas: subTask.gas })
|
let priceData = await queryPrice({ gas: subTask.gas })
|
||||||
@ -71,15 +71,15 @@ export default class InternalController extends BaseController {
|
|||||||
record.hashList = hashList
|
record.hashList = hashList
|
||||||
task.txHash = hashList[0]
|
task.txHash = hashList[0]
|
||||||
task.status = PayStatus.TRANSFERED
|
task.status = PayStatus.TRANSFERED
|
||||||
setImmediate(async () => {
|
|
||||||
await notify(task, record)
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
record.status = 10
|
record.status = 10
|
||||||
task.status = PayStatus.TRANSFER_FAIL
|
task.status = PayStatus.TRANSFER_FAIL
|
||||||
}
|
}
|
||||||
await record.save()
|
await record.save()
|
||||||
await task.save()
|
await task.save()
|
||||||
|
setImmediate(async () => {
|
||||||
|
await notify(task, record)
|
||||||
|
})
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ export enum PayStatus {
|
|||||||
FAIL = 99,
|
FAIL = 99,
|
||||||
}
|
}
|
||||||
|
|
||||||
@dbconn()
|
@dbconn('pay')
|
||||||
@index({ outOrderId: 1 }, { unique: true, partialFilterExpression: { outOrderId: { $exists: true } } })
|
@index({ outOrderId: 1 }, { unique: true, partialFilterExpression: { outOrderId: { $exists: true } } })
|
||||||
@modelOptions({
|
@modelOptions({
|
||||||
schemaOptions: { collection: 'pay_record', timestamps: true },
|
schemaOptions: { collection: 'pay_record', timestamps: true },
|
||||||
|
@ -6,7 +6,7 @@ import { PayType } from './PayRecord'
|
|||||||
/**
|
/**
|
||||||
* 支付打款记录
|
* 支付打款记录
|
||||||
*/
|
*/
|
||||||
@dbconn()
|
@dbconn('pay')
|
||||||
@index({ recordId: 1 }, { unique: true })
|
@index({ recordId: 1 }, { unique: true })
|
||||||
@modelOptions({ schemaOptions: { collection: 'pay_transfer_record', timestamps: true } })
|
@modelOptions({ schemaOptions: { collection: 'pay_transfer_record', timestamps: true } })
|
||||||
export class TransferRecordClass extends BaseModule {
|
export class TransferRecordClass extends BaseModule {
|
||||||
|
@ -87,6 +87,7 @@ export class TransferQueue {
|
|||||||
taskId: record.id,
|
taskId: record.id,
|
||||||
source: 'pay',
|
source: 'pay',
|
||||||
data: datas,
|
data: datas,
|
||||||
|
max: 1,
|
||||||
cb: process.env.PAY_TRANSFER_CB_URL,
|
cb: process.env.PAY_TRANSFER_CB_URL,
|
||||||
}
|
}
|
||||||
await pushTaskToChain(reqData)
|
await pushTaskToChain(reqData)
|
||||||
|
@ -87,6 +87,10 @@ export function createPageSign(plainText: string) {
|
|||||||
|
|
||||||
export function checkSha1Sign(headers: any) {
|
export function checkSha1Sign(headers: any) {
|
||||||
const { appid, appId, timestamp, sign } = headers
|
const { appid, appId, timestamp, sign } = headers
|
||||||
|
// timestamp 5分钟内有效
|
||||||
|
if (parseInt(timestamp) < Date.now() - 1000 * 60 * 5) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
let appIdToCheck = appId || appid || process.env.ALCHEMY_APPID
|
let appIdToCheck = appId || appid || process.env.ALCHEMY_APPID
|
||||||
const expectedSign = sha1(appIdToCheck + process.env.ALCHEMY_APP_SECRET + timestamp)
|
const expectedSign = sha1(appIdToCheck + process.env.ALCHEMY_APP_SECRET + timestamp)
|
||||||
return sign === expectedSign
|
return sign === expectedSign
|
||||||
|
Loading…
x
Reference in New Issue
Block a user