49 lines
1.9 KiB
TypeScript
49 lines
1.9 KiB
TypeScript
import { singleton } from 'decorators/singleton'
|
|
import logger from 'logger/logger'
|
|
import { GoogleInApp } from 'modules/GoogleInApp'
|
|
import * as schedule from 'node-schedule'
|
|
import { RedisClient } from 'redis/RedisClient'
|
|
import { GooglePaySvr } from 'service/googlepay.svr'
|
|
|
|
/**
|
|
* 定时查询 google voided purchase
|
|
*
|
|
* * * * * *
|
|
┬ ┬ ┬ ┬ ┬ ┬
|
|
│ │ │ │ │ │
|
|
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
|
|
│ │ │ │ └───── month (1 - 12)
|
|
│ │ │ └────────── day of month (1 - 31)
|
|
│ │ └─────────────── hour (0 - 23)
|
|
│ └──────────────────── minute (0 - 59)
|
|
└───────────────────────── second (0 - 59, OPTIONAL)
|
|
*/
|
|
@singleton
|
|
export default class GooglePurchaseSchedule {
|
|
async parseAllRecord() {
|
|
const timeKey = 'google_inapp_voided_check_time'
|
|
let timeStr = await new RedisClient().get(timeKey)
|
|
let startTime = timeStr ? parseInt(timeStr) : Date.now() - 24 * 60 * 60 * 1000
|
|
let endTime = Date.now()
|
|
try {
|
|
let res = await new GooglePaySvr().queryVoidedPurchases(startTime, endTime)
|
|
if (res.status !== 200) {
|
|
logger.info('error check google voided purchase', res.status, res.statusText)
|
|
return
|
|
}
|
|
const { data } = res
|
|
await GoogleInApp.parseVoidedRecords(data.voidedPurchases)
|
|
await new RedisClient().set(timeKey, endTime + '')
|
|
logger.info(`success check google voided purchase:: voidedPurchases: ${data.voidedPurchases?.length || 0}`)
|
|
} catch (err) {
|
|
logger.info('error check google voided purchase', err.message || err)
|
|
}
|
|
}
|
|
scheduleAll() {
|
|
const job = schedule.scheduleJob('1 * * * *', async () => {
|
|
await this.parseAllRecord()
|
|
})
|
|
this.parseAllRecord()
|
|
}
|
|
}
|