支付通路
This commit is contained in:
1 parent
c7f43e30a9
commit
85b0e70907
26 files changed
+1324
-74
No files matched your search
@@ -7,6 +7,8 @@ import { OrdersService } from './orders.service';
|
||||
const createSchema = z.object({
|
||||
courseCode: z.string().min(1),
|
||||
quantity: z.coerce.number().int().min(1).max(10).optional(),
|
||||
/** 下单设备,小程序上报;缺省不影响下单,只是后台看不到渠道 */
|
||||
terminal: z.string().max(16).optional(),
|
||||
});
|
||||
|
||||
@Controller('v1/orders')
|
||||
@@ -17,7 +19,12 @@ export class OrdersController {
|
||||
create(@CurrentUser() user: AuthPrincipal, @Body() body: unknown) {
|
||||
const parsed = createSchema.safeParse(body);
|
||||
if (!parsed.success) throw AppError.badRequest('参数错误:缺少 courseCode');
|
||||
return this.orders.create(user.id, parsed.data.courseCode, parsed.data.quantity ?? 1);
|
||||
return this.orders.create(
|
||||
user.id,
|
||||
parsed.data.courseCode,
|
||||
parsed.data.quantity ?? 1,
|
||||
parsed.data.terminal ?? null,
|
||||
);
|
||||
}
|
||||
|
||||
@Get()
|
||||
@@ -30,4 +37,3 @@ export class OrdersController {
|
||||
return this.orders.status(user.id, outTradeNo);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,12 @@ export class OrdersService {
|
||||
* - signData 是要原样传给客户端的字符串,签名基于同一份字符串
|
||||
* - goodsPrice 单位是分,必须与 MP 后台道具价格一致
|
||||
*/
|
||||
async create(userId: number, courseCode: string, quantity = 1): Promise<{ outTradeNo: string; payData: PayData }> {
|
||||
async create(
|
||||
userId: number,
|
||||
courseCode: string,
|
||||
quantity = 1,
|
||||
terminal: string | null = null,
|
||||
): Promise<{ outTradeNo: string; payData: PayData }> {
|
||||
if (!this.wxpay.enabled) {
|
||||
throw new AppError(ErrorCode.PAY_NOT_ENABLED, '支付尚未开通,请联系管理员', 503);
|
||||
}
|
||||
@@ -72,6 +77,7 @@ export class OrdersService {
|
||||
amount_fen: amountFen,
|
||||
status: OrderStatus.CREATED,
|
||||
env: this.wxpay.env,
|
||||
terminal,
|
||||
attach: `course:${course.code}`,
|
||||
},
|
||||
});
|
||||
@@ -112,6 +118,7 @@ export class OrdersService {
|
||||
status: order.status,
|
||||
statusText: STATUS_TEXT[order.status] ?? '未知',
|
||||
amountFen: order.amount_fen,
|
||||
terminal: order.terminal,
|
||||
courseCode: order.course.code,
|
||||
courseTitle: order.course.title,
|
||||
createdAt: order.created_at,
|
||||
@@ -134,6 +141,7 @@ export class OrdersService {
|
||||
status: o.status,
|
||||
statusText: STATUS_TEXT[o.status] ?? '未知',
|
||||
amountFen: o.amount_fen,
|
||||
terminal: o.terminal,
|
||||
courseCode: o.course.code,
|
||||
courseTitle: o.course.title,
|
||||
createdAt: o.created_at,
|
||||
|
||||
Reference in new issue
Block a user