diff --git a/.env.development b/.env.development index 7808afc..dccd251 100644 --- a/.env.development +++ b/.env.development @@ -8,17 +8,19 @@ API_TOKEN_EXPIRESIN=1d GOOGLE_OAUTH_CLIENT="53206975661-asnf3qe4bg29p8h981pgf099osvrjbme.apps.googleusercontent.com" GOOGLE_OAUTH_CLIENT2="53206975661-ih3r0ubph3rqejdq97b029difbrk2bqj.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_SERVER='http://127.0.0.1:3087' ALCHEMY_APPID="f83Is2y7L425rxl8" ALCHEMY_APP_SECRET="4Yn8RkxDXN71Q3p0" -# ALCHEMY_API_BASE="https://openapi-test.alchemypay.org" -# ALCHEMY_PAGE_BASE="https://ramptest.alchemypay.org" -ALCHEMY_API_BASE="http://127.0.0.1:3009" -ALCHEMY_PAGE_BASE="http://127.0.0.1:3009/pay_page" +ALCHEMY_API_BASE="https://openapi-test.alchemypay.org" +ALCHEMY_PAGE_BASE="https://ramptest.alchemypay.org" +# ALCHEMY_API_BASE="http://127.0.0.1:3009" +# ALCHEMY_PAGE_BASE="http://127.0.0.1:3009/pay_page" ALCHEMY_PAY_CB_URL="https://wallet.cebggame.com" diff --git a/src/config/config.ts b/src/config/config.ts index b30bd4a..4d5c71d 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -53,7 +53,7 @@ let baseConfig = { }, db_main: process.env.DB_MAIN, - db_second: process.env.DB_SECOND, + db_pay: process.env.DB_PAY, chainCfgs: chainCfgs, } diff --git a/src/controllers/alchemyout.controller.ts b/src/controllers/alchemyout.controller.ts index e32b3ec..417ab23 100644 --- a/src/controllers/alchemyout.controller.ts +++ b/src/controllers/alchemyout.controller.ts @@ -7,6 +7,7 @@ import { PayRecord, PayStatus } from 'modules/PayRecord' import { TransferQueue } from 'queue/transfer.queue' import { TransferRecord } from 'modules/TransferRecord' import { reportPayResult } from 'service/game.svr' +import { PriceSvr } from 'service/price.svr' let errorRes = function (msg: string) { logger.info(`error res: ${msg}`) @@ -90,14 +91,17 @@ class AlchemyOutController extends BaseController { if (!checkSha1Sign(req.headers)) { 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 = { direct: 1, data: { price: '1.0', networkList: [ { - network: 'AGOR', - networkFee: '0.037', + network: 'ARBITRUM', + networkFee: networkFee.toFixed(6), }, ], }, diff --git a/src/controllers/internal.controller.ts b/src/controllers/internal.controller.ts index 05f69a5..413f354 100644 --- a/src/controllers/internal.controller.ts +++ b/src/controllers/internal.controller.ts @@ -23,7 +23,7 @@ const notify = async function (record: DocumentType, subTask: Do network: record.network, // 用户购买的数字货币对应的网络 // networkFee: record.networkFee, // 网络费用/USDT address: record.address, // 用户的提币地址 - status: 'SUCCESS', // SUCCESS/FAIL + status: record.status === PayStatus.TRANSFERED ? 'SUCCESS' : 'FAIL', // SUCCESS/FAIL } try { let priceData = await queryPrice({ gas: subTask.gas }) @@ -71,15 +71,15 @@ export default class InternalController extends BaseController { record.hashList = hashList task.txHash = hashList[0] task.status = PayStatus.TRANSFERED - setImmediate(async () => { - await notify(task, record) - }) } else { record.status = 10 task.status = PayStatus.TRANSFER_FAIL } await record.save() await task.save() + setImmediate(async () => { + await notify(task, record) + }) return {} } } diff --git a/src/modules/PayRecord.ts b/src/modules/PayRecord.ts index 213fc36..dc40f25 100644 --- a/src/modules/PayRecord.ts +++ b/src/modules/PayRecord.ts @@ -20,7 +20,7 @@ export enum PayStatus { FAIL = 99, } -@dbconn() +@dbconn('pay') @index({ outOrderId: 1 }, { unique: true, partialFilterExpression: { outOrderId: { $exists: true } } }) @modelOptions({ schemaOptions: { collection: 'pay_record', timestamps: true }, diff --git a/src/modules/TransferRecord.ts b/src/modules/TransferRecord.ts index d82cbcf..bf2b20a 100644 --- a/src/modules/TransferRecord.ts +++ b/src/modules/TransferRecord.ts @@ -6,7 +6,7 @@ import { PayType } from './PayRecord' /** * 支付打款记录 */ -@dbconn() +@dbconn('pay') @index({ recordId: 1 }, { unique: true }) @modelOptions({ schemaOptions: { collection: 'pay_transfer_record', timestamps: true } }) export class TransferRecordClass extends BaseModule { diff --git a/src/queue/transfer.queue.ts b/src/queue/transfer.queue.ts index 7ae9cc0..d32d4cb 100644 --- a/src/queue/transfer.queue.ts +++ b/src/queue/transfer.queue.ts @@ -87,6 +87,7 @@ export class TransferQueue { taskId: record.id, source: 'pay', data: datas, + max: 1, cb: process.env.PAY_TRANSFER_CB_URL, } await pushTaskToChain(reqData) diff --git a/src/service/alchemy.svr.ts b/src/service/alchemy.svr.ts index ada991a..8ad1c56 100644 --- a/src/service/alchemy.svr.ts +++ b/src/service/alchemy.svr.ts @@ -87,6 +87,10 @@ export function createPageSign(plainText: string) { export function checkSha1Sign(headers: any) { 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 const expectedSign = sha1(appIdToCheck + process.env.ALCHEMY_APP_SECRET + timestamp) return sign === expectedSign