pay-svr/src/schedule/googlepurchase.schedule.ts
2023-08-15 14:49:46 +08:00

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()
}
}