支付:代金券功能
This commit is contained in:
@@ -1,16 +1,19 @@
|
||||
import { Application, BackendSession, HandlerService, } from 'pinus';
|
||||
import { genCode, resResult } from '../../../pubUtils/util';
|
||||
import { ACTIVITY_TYPE, DEBUG_MAGIC_WORD, DEBUG_PRICE, ORDER_STATE, PAY_TYPE, STATUS, TASK_TYPE, TA_EVENT } from '../../../consts';
|
||||
import { ACTIVITY_TYPE, DEBUG_MAGIC_WORD, DEBUG_PRICE, ITEM_CHANGE_REASON, ORDER_STATE, PAY_TYPE, STATUS, TASK_TYPE, TA_EVENT } from '../../../consts';
|
||||
import { dicRMB } from '../../../pubUtils/dictionary/DicRMB';
|
||||
import { UserOrderModel } from '../../../db/UserOrder';
|
||||
import _ = require('underscore');
|
||||
import { applyOrderWX } from '../../../services/pay/weixinPay';
|
||||
import { applyOrderALI } from '../../../services/pay/aliPay';
|
||||
import { applyOrder37 } from '../../../services/pay/37Pay';
|
||||
import { checkOrderCanBuy, settleOrder, settleOrderAli, settleOrderWx } from '../../../services/orderService';
|
||||
import { checkOrderCanBuy, settleOrder, settleOrderAli, settleOrderFromHandler, settleOrderWx } from '../../../services/orderService';
|
||||
import { getActivityById } from '../../../services/activity/activityService';
|
||||
import { reportTAEvent } from '../../../services/sdkService';
|
||||
import { isDebugPay } from '../../../pubUtils/sdkUtil';
|
||||
import { canPay, isDebugPay } from '../../../pubUtils/sdkUtil';
|
||||
import { isDevelopEnv } from '../../../services/utilService';
|
||||
import { getVoucherObject, handleCost } from '../../../services/role/rewardService';
|
||||
import { CheckMeterial } from '../../../services/role/checkMaterial';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -29,17 +32,21 @@ export class orderHandler {
|
||||
* @param {BackendSession} session
|
||||
* @memberof orderHandler
|
||||
*/
|
||||
async applyOrder(msg: { productID: string, payType: number, activityId: number, paramStr: string }, session: BackendSession) {
|
||||
const { productID, payType, activityId, paramStr } = msg;
|
||||
async applyOrder(msg: { productID: string, payType: number, activityId: number, paramStr: string, useVoucher: boolean }, session: BackendSession) {
|
||||
const { productID, payType, activityId, paramStr, useVoucher } = msg;
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const ip = session.get('ip');
|
||||
|
||||
//如果有特殊情况,activityId可为0
|
||||
if (!productID || !_.isString(productID) || !payType || !_.isNumber(payType)) {
|
||||
if (!productID || !_.isString(productID) || !_.isNumber(payType)) {
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
}
|
||||
|
||||
if(!canPay()) {
|
||||
return resResult(STATUS.PAY_NOT_OPEN)
|
||||
}
|
||||
|
||||
//商品价格信息
|
||||
let productInfo = dicRMB.get(productID)
|
||||
if (!productInfo) {
|
||||
@@ -53,51 +60,65 @@ export class orderHandler {
|
||||
let localOrderID = genCode(32);//本地订单号
|
||||
let orderID = '';//平台订单号
|
||||
let sdkOrderInfo = null;//客户端需要的平台订单信息
|
||||
switch (payType) {
|
||||
case PAY_TYPE.THREE_SEVEN:
|
||||
case PAY_TYPE.THREE_SEVEN_IOS:
|
||||
{
|
||||
let pay37Order = await applyOrder37(localOrderID, roleId, productInfo);
|
||||
if (pay37Order.code == -1) {
|
||||
console.log('37下单失败')
|
||||
return pay37Order.resData;
|
||||
}
|
||||
sdkOrderInfo = pay37Order.data;
|
||||
orderID = ''
|
||||
break;
|
||||
}
|
||||
case PAY_TYPE.WX:
|
||||
{
|
||||
let weixinOrder = await applyOrderWX(localOrderID, price * 100, message);
|
||||
if (weixinOrder.code == -1) {
|
||||
console.log('微信下单失败')
|
||||
return resResult(STATUS.APPLY_ORDER_ERROR);
|
||||
}
|
||||
sdkOrderInfo = weixinOrder.data;
|
||||
orderID = weixinOrder.data.prepayid;//微信订单号
|
||||
break;
|
||||
}
|
||||
case PAY_TYPE.ALI:
|
||||
{
|
||||
let aliOrder = await applyOrderALI(localOrderID, price, message);
|
||||
if (aliOrder.code == -1) {
|
||||
console.log('支付宝下单失败')
|
||||
return resResult(STATUS.APPLY_ORDER_ERROR);
|
||||
}
|
||||
sdkOrderInfo = aliOrder.data;
|
||||
orderID = aliOrder.data;//支付宝订单
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PAY_TYPE.TEST:
|
||||
case PAY_TYPE.APPLE:
|
||||
{
|
||||
break;
|
||||
}
|
||||
default:
|
||||
console.log('未知支付类型');
|
||||
return resResult(STATUS.NO_PAY_TYPE);
|
||||
if(useVoucher) {
|
||||
let voucher = getVoucherObject(price);
|
||||
let check = new CheckMeterial(roleId);
|
||||
let isEnough = await check.decrease([voucher]);
|
||||
if (!isEnough) return resResult(STATUS.VOUCHER_NOT_ENOUGH);
|
||||
} else {
|
||||
switch (payType) {
|
||||
case PAY_TYPE.THREE_SEVEN:
|
||||
case PAY_TYPE.THREE_SEVEN_IOS:
|
||||
{
|
||||
let pay37Order = await applyOrder37(localOrderID, roleId, productInfo);
|
||||
if (pay37Order.code == -1) {
|
||||
console.log('37下单失败')
|
||||
return pay37Order.resData;
|
||||
}
|
||||
sdkOrderInfo = pay37Order.data;
|
||||
orderID = ''
|
||||
break;
|
||||
}
|
||||
case PAY_TYPE.WX:
|
||||
{
|
||||
let weixinOrder = await applyOrderWX(localOrderID, price * 100, message);
|
||||
if (weixinOrder.code == -1) {
|
||||
console.log('微信下单失败')
|
||||
return resResult(STATUS.APPLY_ORDER_ERROR);
|
||||
}
|
||||
sdkOrderInfo = weixinOrder.data;
|
||||
orderID = weixinOrder.data.prepayid;//微信订单号
|
||||
break;
|
||||
}
|
||||
case PAY_TYPE.ALI:
|
||||
{
|
||||
let aliOrder = await applyOrderALI(localOrderID, price, message);
|
||||
if (aliOrder.code == -1) {
|
||||
console.log('支付宝下单失败')
|
||||
return resResult(STATUS.APPLY_ORDER_ERROR);
|
||||
}
|
||||
sdkOrderInfo = aliOrder.data;
|
||||
orderID = aliOrder.data;//支付宝订单
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PAY_TYPE.TEST:
|
||||
{
|
||||
if(!isDevelopEnv()) {
|
||||
return resResult(STATUS.NO_PAY_TYPE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PAY_TYPE.APPLE:
|
||||
{
|
||||
break;
|
||||
}
|
||||
default:
|
||||
console.log('未知支付类型');
|
||||
return resResult(STATUS.NO_PAY_TYPE);
|
||||
}
|
||||
}
|
||||
|
||||
if(activityId > 0) {
|
||||
@@ -107,7 +128,7 @@ export class orderHandler {
|
||||
}
|
||||
|
||||
|
||||
await UserOrderModel.applyOrder(serverId, roleId, productID, localOrderID, orderID, price, payType, activityId, paramStr, message);
|
||||
await UserOrderModel.applyOrder(serverId, roleId, productID, localOrderID, orderID, price, payType, activityId, paramStr, message, useVoucher);
|
||||
reportTAEvent(roleId, TA_EVENT.RECHARGE, {
|
||||
pay_id: localOrderID, chargeId: productID, pay_name: message, pay_amount: price, pay_channel: payType
|
||||
}, ip)
|
||||
@@ -125,7 +146,7 @@ export class orderHandler {
|
||||
*/
|
||||
async checkOrder(msg: { localOrderID: string }, session: BackendSession) {
|
||||
const { localOrderID } = msg;
|
||||
// const roleId = session.get('roleId');
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const sid = session.get('sid');
|
||||
const roleName = session.get('roleName');
|
||||
@@ -145,35 +166,55 @@ export class orderHandler {
|
||||
return resResult(STATUS.NO_PRODUCT_ID);
|
||||
}
|
||||
|
||||
switch (orderInfo.payType) {
|
||||
case PAY_TYPE.TEST:
|
||||
case PAY_TYPE.THREE_SEVEN:
|
||||
case PAY_TYPE.APPLE:
|
||||
{
|
||||
break;
|
||||
}
|
||||
case PAY_TYPE.WX:
|
||||
{
|
||||
let res = await settleOrderWx(orderInfo, serverId, sid);
|
||||
if(res.code != 0) {
|
||||
return resResult(res);
|
||||
}
|
||||
orderInfo = await UserOrderModel.findOrder(localOrderID);
|
||||
break;
|
||||
}
|
||||
case PAY_TYPE.ALI:
|
||||
{
|
||||
let res = await settleOrderAli(orderInfo, serverId, sid);
|
||||
if(res.code != 0) {
|
||||
return resResult(res);
|
||||
}
|
||||
orderInfo = await UserOrderModel.findOrder(localOrderID);
|
||||
break;
|
||||
}
|
||||
if(orderInfo.useVoucher) {
|
||||
let voucher = getVoucherObject(productInfo.price);
|
||||
let result = await handleCost(roleId, roleName, [voucher], ITEM_CHANGE_REASON.USE_VOUCHER);
|
||||
if(!result) return resResult(STATUS.VOUCHER_NOT_ENOUGH);
|
||||
|
||||
default:
|
||||
console.log('未知支付类型');
|
||||
return resResult(STATUS.NO_PAY_TYPE);
|
||||
let res = await settleOrderFromHandler(localOrderID, roleId, serverId, sid);
|
||||
if(res.code != 0) {
|
||||
return resResult(res);
|
||||
}
|
||||
orderInfo = await UserOrderModel.findOrder(localOrderID);
|
||||
} else {
|
||||
switch (orderInfo.payType) {
|
||||
case PAY_TYPE.TEST:
|
||||
{
|
||||
let res = await settleOrderFromHandler(localOrderID, roleId, serverId, sid);
|
||||
if(res.code != 0) {
|
||||
return resResult(res);
|
||||
}
|
||||
orderInfo = await UserOrderModel.findOrder(localOrderID);
|
||||
break;
|
||||
}
|
||||
case PAY_TYPE.THREE_SEVEN:
|
||||
case PAY_TYPE.APPLE:
|
||||
{
|
||||
break;
|
||||
}
|
||||
case PAY_TYPE.WX:
|
||||
{
|
||||
let res = await settleOrderWx(orderInfo, serverId, sid);
|
||||
if(res.code != 0) {
|
||||
return resResult(res);
|
||||
}
|
||||
orderInfo = await UserOrderModel.findOrder(localOrderID);
|
||||
break;
|
||||
}
|
||||
case PAY_TYPE.ALI:
|
||||
{
|
||||
let res = await settleOrderAli(orderInfo, serverId, sid);
|
||||
if(res.code != 0) {
|
||||
return resResult(res);
|
||||
}
|
||||
orderInfo = await UserOrderModel.findOrder(localOrderID);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
console.log('未知支付类型');
|
||||
return resResult(STATUS.NO_PAY_TYPE);
|
||||
}
|
||||
}
|
||||
|
||||
//订单成功
|
||||
@@ -245,7 +286,7 @@ export class orderHandler {
|
||||
let check = await checkOrderCanBuy(roleId, serverId, activityData, productID, paramStr);
|
||||
if(!check) return resResult(STATUS.ORDER_CANNOT_BUY)
|
||||
|
||||
let orderInfo = await UserOrderModel.applyOrder(serverId, roleId, productID, localOrderID, orderID, price, payType, activityId, paramStr, message);
|
||||
let orderInfo = await UserOrderModel.applyOrder(serverId, roleId, productID, localOrderID, orderID, price, payType, activityId, paramStr, message, false);
|
||||
|
||||
//订单成功
|
||||
if(!orderInfo) {
|
||||
|
||||
Reference in New Issue
Block a user