koishi-plugin-pay-tool
Version:
适用于Koishi框架的易支付工具插件,支持订单创建、查询、退款、分配等功能
107 lines (106 loc) • 3.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OrderDatabase = void 0;
exports.setupDatabase = setupDatabase;
/**
* 初始化数据库表
*/
function setupDatabase(ctx) {
ctx.model.extend('pay_orders', {
id: 'unsigned',
trade_no: 'string',
out_trade_no: 'string',
user_id: 'string',
guild_id: 'string',
channel_id: 'string',
amount: 'string',
payment_type: 'string',
status: 'string',
customer_qq: 'string', // 订单归属人QQ号(管理员分配)
created_at: 'timestamp',
updated_at: 'timestamp'
}, {
primary: 'id',
autoInc: true
});
}
/**
* 订单数据库操作类
*/
class OrderDatabase {
constructor(ctx) {
this.ctx = ctx;
}
/**
* 创建订单记录
*/
async createOrder(tradeNo, outTradeNo, userId, guildId, channelId, amount, paymentType) {
await this.ctx.database.create('pay_orders', {
trade_no: tradeNo,
out_trade_no: outTradeNo,
user_id: userId,
guild_id: guildId,
channel_id: channelId,
amount,
payment_type: paymentType,
status: 'pending',
customer_qq: '', // 初始化为空,可通过provisioning命令分配
created_at: new Date(),
updated_at: new Date()
});
}
/**
* 根据商户订单号查询订单
*/
async getOrderByOutTradeNo(outTradeNo) {
const orders = await this.ctx.database.get('pay_orders', { out_trade_no: outTradeNo });
return orders.length > 0 ? orders[0] : null;
}
/**
* 根据易支付订单号查询订单
*/
async getOrderByTradeNo(tradeNo) {
const orders = await this.ctx.database.get('pay_orders', { trade_no: tradeNo });
return orders.length > 0 ? orders[0] : null;
}
/**
* 更新订单状态
*/
async updateOrderStatus(outTradeNo, status) {
await this.ctx.database.set('pay_orders', { out_trade_no: outTradeNo }, {
status,
updated_at: new Date()
});
}
/**
* 获取用户的订单列表
*/
async getUserOrders(userId, limit = 10) {
return await this.ctx.database
.select('pay_orders')
.where({ user_id: userId })
.orderBy('created_at', 'desc')
.limit(limit)
.execute();
}
/**
* 更新订单归属人
*/
async updateCustomerQQ(outTradeNo, customerQQ) {
await this.ctx.database.set('pay_orders', { out_trade_no: outTradeNo }, {
customer_qq: customerQQ,
updated_at: new Date()
});
}
/**
* 根据归属人QQ查询订单
*/
async getOrdersByCustomerQQ(customerQQ) {
return await this.ctx.database
.select('pay_orders')
.where({ customer_qq: customerQQ })
.orderBy('created_at', 'desc')
.execute();
}
}
exports.OrderDatabase = OrderDatabase;