支付回调
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { UserOrderModelType } from '../db/UserOrder';
|
||||
import { ACTIVITY_TYPE, STATUS } from '../consts';
|
||||
import { UserOrderModel, UserOrderModelType } from '../db/UserOrder';
|
||||
import { ACTIVITY_TYPE, ORDER_STATE, STATUS, TASK_TYPE } from '../consts';
|
||||
import { dicRMB } from '../pubUtils/dictionary/DicRMB';
|
||||
import { makeYuanbaoShopReward } from './activity/yuanbaoService';
|
||||
import { RoleModel } from '../db/Role';
|
||||
@@ -19,17 +19,20 @@ import { ActivityMonopolyModel, ActivityMonopolyModelType } from '../db/Activity
|
||||
import { ActivityMonopolyLandModel, ActivityMonopolyLandModelType } from '../db/ActivityMonopolyLand';
|
||||
import { pinus } from 'pinus';
|
||||
import { resResult } from '../pubUtils/util';
|
||||
|
||||
|
||||
|
||||
import { checkOrderWX } from './pay/weixinPay';
|
||||
import { addRechargeMoney } from './activity/rechargeMoneyService';
|
||||
import { addVipRechargeMoney } from './activity/vipRechargeMoneyService';
|
||||
import { checkActivityTask } from './taskService';
|
||||
import { checkOrderALI } from './pay/aliPay';
|
||||
import { getRoleOnlineInfo } from './redisService';
|
||||
import { PayCallback37Data } from '../domain/sdk';
|
||||
|
||||
|
||||
/**
|
||||
* 结算账单
|
||||
* @param localOrderID 本地订单号
|
||||
*/
|
||||
export async function makeOrder(localOrderID: string, sid: string, orderInfo: UserOrderModelType) {
|
||||
// let orderInfo = await UserOrderModel.findOrder(localOrderID);
|
||||
export async function makeOrder(orderInfo: UserOrderModelType, sid: string) {
|
||||
|
||||
//商品价格信息
|
||||
let productInfo = dicRMB.get(orderInfo.productID)
|
||||
@@ -144,4 +147,118 @@ export async function makeOrder(localOrderID: string, sid: string, orderInfo: Us
|
||||
}), [{ uid: roleId, sid }]);
|
||||
|
||||
return rewardResult
|
||||
}
|
||||
|
||||
export async function settleOrder(order: UserOrderModelType, serverId: number, sid?: string) {
|
||||
if(!sid) {
|
||||
let onlineUser = await getRoleOnlineInfo(order.roleId);
|
||||
sid = onlineUser.sid;
|
||||
}
|
||||
//结算奖励
|
||||
let result = await makeOrder(order, sid);
|
||||
if (result.code !== 0) {//结算失败
|
||||
console.log(`支付失败..... ${JSON.stringify(result)}`)
|
||||
return resResult(result);
|
||||
}
|
||||
//推送
|
||||
console.log('*****', order.roleId, sid)
|
||||
if(!!sid) {
|
||||
pinus.app.channelService.pushMessageByUids('onOrder', resResult(STATUS.SUCCESS, {
|
||||
...result.data,
|
||||
price: order.price,
|
||||
state: order.state,
|
||||
localOrderID: order.localOrderID
|
||||
}), [{ uid: order.roleId, sid }]);
|
||||
}
|
||||
//活动统计
|
||||
await addRechargeMoney(order.roleId, serverId, order.price);
|
||||
await addVipRechargeMoney(order.roleId, serverId, order.price);
|
||||
//成长任务
|
||||
await checkActivityTask(serverId, sid, order.roleId, TASK_TYPE.ACTIVITY_RMB, order.price, { activityId: order.activityId })
|
||||
|
||||
return result.data;
|
||||
}
|
||||
|
||||
export async function settleOrderWx(order: UserOrderModelType, serverId: number, sid: string) {
|
||||
|
||||
if (order.state == ORDER_STATE.RESULT_SUCCESS) {
|
||||
return STATUS.DUPLICATE_ORDER;
|
||||
}
|
||||
order = await UserOrderModel.check(order.roleId, order.localOrderID);
|
||||
if (!order) {
|
||||
return STATUS.DUPLICATE_ORDER;
|
||||
}
|
||||
|
||||
let weixinResult = await checkOrderWX(order.localOrderID);
|
||||
if (weixinResult.code == 0) {
|
||||
console.log('微信订单查询失败')
|
||||
return STATUS.ORDER_ERROR;
|
||||
}
|
||||
if (parseInt(weixinResult.data.total_fee) / 100 != order.price) {
|
||||
console.log('订单价格错误')
|
||||
return STATUS.PRICE_ERROR;
|
||||
}
|
||||
if (weixinResult.data.trade_state != "SUCCESS" ||
|
||||
weixinResult.data.result_code != "SUCCESS" ||
|
||||
weixinResult.data.return_code != "SUCCESS") {
|
||||
return STATUS.NO_PAY;
|
||||
}
|
||||
|
||||
let result = await settleOrder(order, serverId, sid);
|
||||
order = await UserOrderModel.success(order.roleId, order.localOrderID, result);
|
||||
|
||||
return STATUS.SUCCESS
|
||||
}
|
||||
|
||||
export async function settleOrderAli(order: UserOrderModelType, serverId: number, sid: string) {
|
||||
if (order.state == ORDER_STATE.RESULT_SUCCESS) {
|
||||
return STATUS.DUPLICATE_ORDER;
|
||||
}
|
||||
let aliResult = await checkOrderALI(order.localOrderID);
|
||||
if (aliResult.code == 0) {
|
||||
console.log('支付宝订单查询失败')
|
||||
return STATUS.ORDER_ERROR;
|
||||
}
|
||||
if (parseInt(aliResult.data.total_amount) != order.price) {
|
||||
console.log('订单价格错误')
|
||||
return STATUS.PRICE_ERROR;
|
||||
}
|
||||
if (aliResult.data.trade_status != "TRADE_SUCCESS") {
|
||||
return STATUS.NO_PAY;
|
||||
}
|
||||
let aliOrderID = aliResult.data.trade_no;
|
||||
let result = await settleOrder(order, serverId, sid);
|
||||
await UserOrderModel.saveOrderID(order.roleId, order.localOrderID, aliOrderID, result);
|
||||
|
||||
return STATUS.SUCCESS
|
||||
}
|
||||
|
||||
export async function settleOrderFromRedisPub(message: string) {
|
||||
let params: PayCallback37Data;
|
||||
try {
|
||||
params = JSON.parse(message);
|
||||
} catch(e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let order = await UserOrderModel.findOrder(params.order_no);
|
||||
if(!order || order.state != ORDER_STATE.CHECK_ORDER) {
|
||||
console.log('订单状态错误');
|
||||
return false;
|
||||
}
|
||||
if(order.roleId != params.actor_id) {
|
||||
console.log('订单玩家错误');
|
||||
return false;
|
||||
}
|
||||
if(order.price.toFixed(2) != params.money.toFixed(2)) {
|
||||
console.log('订单金额错误');
|
||||
return false;
|
||||
}
|
||||
|
||||
let aliOrderID = params.order_id;
|
||||
|
||||
let result = await settleOrder(order, params.sid);
|
||||
await UserOrderModel.saveOrderID(order.roleId, order.localOrderID, aliOrderID, JSON.stringify(result));
|
||||
|
||||
return true
|
||||
}
|
||||
Reference in New Issue
Block a user