12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- const crypto = require('crypto')
- const createConfig = require('uni-config-center')
- const config = createConfig({
- pluginId: 'uni-cms'
- }).config()
- const unlockRecordDBName = 'uni-cms-unlock-record'
- // 定义云函数
- exports.main = async function (event) {
- // 解构 event 对象
- const {trans_id, extra: _extra, sign} = event
- let extra = {}
- try {
- extra = JSON.parse(_extra)
- } catch (e) {}
- // 如果 adConfig 或 securityKey 配置项不存在,则抛出错误引导用户配置参数
- if (!config.adConfig || !config.adConfig.securityKey) throw new Error('请先配置adConfig.securityKey')
- // 如果 extra.article_id 不存在,则返回 null
- if (!extra.article_id) return null
- // 签名验证
- const reSign = crypto.createHash('sha256').update(`${config.adConfig.securityKey}:${trans_id}`).digest('hex')
- if (sign !== reSign) {
- console.log('签名错误', `${config.adConfig.securityKey}:${trans_id}`)
- return null
- }
- // 获取数据库实例
- const db = uniCloud.database()
- // 查询解锁记录
- const unlockRecord = await db.collection(unlockRecordDBName).where({
- trans_id
- }).get()
- // 如果已经解锁过了,则返回 null
- if (unlockRecord.data.length) {
- console.log('已经解锁过了')
- return null // 已经解锁过了
- }
- // 添加解锁记录
- await db.collection(unlockRecordDBName).add({
- unique_id: extra.unique_id,
- unique_type: extra.unique_type,
- article_id: extra.article_id,
- trans_id,
- create_date: Date.now()
- })
- console.log('解锁成功')
- // 应广告规范,需返回 isValid 为 true
- return {
- isValid: true
- }
- }
|