sdk:37ios支付及退款
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
|
||||
import { Service } from 'egg';
|
||||
import { REDIS_KEY, PAY_37_CALLBACK_CODE, SDK_37_CONST, ORDER_STATE, SDK_37_TREAT_CODE, SERVER_STATUS } from '@consts';
|
||||
import { GetGuildInfoByUserParam, GetServerListParam, GuildNameCallBackParam, PayCallback37Data, RoleNameCallBackParam } from '../domain/sdk';
|
||||
import { REDIS_KEY, PAY_37_CALLBACK_CODE, SDK_37_CONST, ORDER_STATE, SDK_37_TREAT_CODE, SERVER_STATUS, PAY_IOS_37_CALLBACK_CODE, SDK_37_REFUND_CODE } from '@consts';
|
||||
import { GetGuildInfoByUserParam, GetServerListParam, GuildNameCallBackParam, IOSRefundParam, PayCallback37Data, RoleNameCallBackParam } from '../domain/sdk';
|
||||
import { RedisClient } from 'redis';
|
||||
import { get37GetServerMd5Sign, get37Md5SignA, get37Md5SignB, getChannelId, getRedisSubChannel } from '../pubUtils/sdkUtil';
|
||||
import { UserOrderModel } from '@db/UserOrder';
|
||||
@@ -20,7 +20,7 @@ import moment = require('moment');
|
||||
*/
|
||||
export default class Sdk extends Service {
|
||||
|
||||
public check37Sign(params: PayCallback37Data) {
|
||||
public check37Sign(params: PayCallback37Data|IOSRefundParam) {
|
||||
let sign = get37Md5SignA(params.getBody(), SDK_37_CONST.PAY_KEY);
|
||||
console.log('******37Sign', sign);
|
||||
return sign == params.sign;
|
||||
@@ -85,6 +85,119 @@ export default class Sdk extends Service {
|
||||
return ctx.service.utils.resResult(PAY_37_CALLBACK_CODE.SUCCESS, '');
|
||||
}
|
||||
|
||||
public async pay37IOSCallback(params: PayCallback37Data) {
|
||||
const { ctx } = this;
|
||||
const { app } = ctx;
|
||||
|
||||
let checkResult = this.check37Sign(params);
|
||||
if(!checkResult) return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.MD5_ERR, '');
|
||||
|
||||
console.log('*****pay37Callback check sign ok')
|
||||
if(gameData.whiteip.indexOf(ctx.clientIp) == -1) {
|
||||
return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.IP_LIMIT, '');
|
||||
}
|
||||
|
||||
console.log('*****pay37Callback check ip ok')
|
||||
if(nowSeconds() - params.time > 15 * 60) {
|
||||
return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.TIME_IS_EXPIRED, '');
|
||||
}
|
||||
console.log('*****pay37Callback check time ok')
|
||||
|
||||
let order = await UserOrderModel.findOrder(params.order_no);
|
||||
if(!order) {
|
||||
return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.ORDER_DUPLICATE, '');
|
||||
}
|
||||
console.log('*****pay37Callback check order ok')
|
||||
if(order.state != ORDER_STATE.APPLY) {
|
||||
return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.SUCCESS, '');
|
||||
}
|
||||
console.log('*****pay37Callback check order status ok', params.money, typeof params.money)
|
||||
if(order.price != parseFloat(params.money)) {
|
||||
return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.FAIL, '');
|
||||
}
|
||||
console.log('*****pay37Callback check money ok', order.price, params.money)
|
||||
|
||||
let role = await RoleModel.findByRoleId(order.roleId);
|
||||
if(!role) {
|
||||
return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.ROLE_NOT_FOUND, '');
|
||||
}
|
||||
console.log('*****pay37Callback check role ok')
|
||||
if(role.serverId != params.sid) {
|
||||
return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.ROLE_NOT_FOUND, '');
|
||||
}
|
||||
console.log('*****pay37Callback check server ok')
|
||||
|
||||
order = await UserOrderModel.check(order.roleId, order.localOrderID);
|
||||
if(!order) {
|
||||
return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.FAIL, '');
|
||||
}
|
||||
console.log('*****pay37Callback save order check ok')
|
||||
|
||||
let redisClient: RedisClient = app.context.redisClient;
|
||||
let name = getRedisSubChannel(REDIS_KEY.PAY_CHANNEL, app.config.env);
|
||||
let result = await redisClient.publishAsync(name, JSON.stringify(params));
|
||||
if(result == 0) {
|
||||
return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.SERVER_IS_BUSY, '');
|
||||
}
|
||||
console.log('*****pay37Callback redis publish ok')
|
||||
|
||||
return ctx.service.utils.resResult(PAY_IOS_37_CALLBACK_CODE.SUCCESS, '');
|
||||
}
|
||||
|
||||
public async refundIOSCallback(params: IOSRefundParam) {
|
||||
const { ctx } = this;
|
||||
const { app } = ctx;
|
||||
|
||||
let checkResult = this.check37Sign(params);
|
||||
if(!checkResult) return ctx.service.utils.resResult(SDK_37_REFUND_CODE.MD5_ERR, '');
|
||||
|
||||
console.log('*****refundIOSCallback check sign ok')
|
||||
if(gameData.whiteip.indexOf(ctx.clientIp) == -1) {
|
||||
return ctx.service.utils.resResult(SDK_37_REFUND_CODE.IP_LIMIT, '');
|
||||
}
|
||||
|
||||
console.log('*****refundIOSCallback check ip ok')
|
||||
if(nowSeconds() - params.time > 15 * 60) {
|
||||
return ctx.service.utils.resResult(SDK_37_REFUND_CODE.TIME_IS_EXPIRED, '');
|
||||
}
|
||||
console.log('*****refundIOSCallback check time ok, order_no:', params.order_no)
|
||||
|
||||
let order = await UserOrderModel.findOrder(params.order_no);
|
||||
if(!order) {
|
||||
return ctx.service.utils.resResult(SDK_37_REFUND_CODE.FAIL, '');
|
||||
}
|
||||
console.log('*****refundIOSCallback check order ok')
|
||||
if(order.state != ORDER_STATE.RESULT_SUCCESS) {
|
||||
return ctx.service.utils.resResult(SDK_37_REFUND_CODE.SUCCESS, '');
|
||||
}
|
||||
console.log('*****refundIOSCallback check order status ok', params.money, typeof params.money)
|
||||
|
||||
let role = await RoleModel.findByRoleId(order.roleId);
|
||||
if(!role) {
|
||||
return ctx.service.utils.resResult(SDK_37_REFUND_CODE.ROLE_NOT_FOUND, '');
|
||||
}
|
||||
console.log('*****refundIOSCallback check role ok')
|
||||
if(role.serverId != params.sid) {
|
||||
return ctx.service.utils.resResult(SDK_37_REFUND_CODE.ROLE_NOT_FOUND, '');
|
||||
}
|
||||
console.log('*****refundIOSCallback check server ok')
|
||||
|
||||
order = await UserOrderModel.startRefund(order.roleId, order.localOrderID);
|
||||
if(!order) {
|
||||
return ctx.service.utils.resResult(SDK_37_REFUND_CODE.FAIL, '');
|
||||
}
|
||||
console.log('*****refundIOSCallback save order check ok')
|
||||
|
||||
let redisClient: RedisClient = app.context.redisClient;
|
||||
let name = getRedisSubChannel(REDIS_KEY.REFUND_CHANNEL, app.config.env);
|
||||
let result = await redisClient.publishAsync(name, JSON.stringify(params));
|
||||
if(result == 0) {
|
||||
return ctx.service.utils.resResult(SDK_37_REFUND_CODE.FAIL, '');
|
||||
}
|
||||
console.log('*****refundIOSCallback redis publish ok')
|
||||
|
||||
return ctx.service.utils.resResult(SDK_37_REFUND_CODE.SUCCESS, '');
|
||||
}
|
||||
|
||||
public check37WordsSign(params: RoleNameCallBackParam|GuildNameCallBackParam|GetGuildInfoByUserParam) {
|
||||
let sign = get37Md5SignB(params.getBody(), SDK_37_CONST.CHAT_KEY);
|
||||
|
||||
Reference in New Issue
Block a user