sdk:37ios支付及退款
This commit is contained in:
@@ -56,6 +56,7 @@ export class orderHandler {
|
|||||||
let sdkOrderInfo = null;//客户端需要的平台订单信息
|
let sdkOrderInfo = null;//客户端需要的平台订单信息
|
||||||
switch (payType) {
|
switch (payType) {
|
||||||
case PAY_TYPE.THREE_SEVEN:
|
case PAY_TYPE.THREE_SEVEN:
|
||||||
|
case PAY_TYPE.THREE_SEVEN_IOS:
|
||||||
{
|
{
|
||||||
let pay37Order = await applyOrder37(localOrderID, roleId, productInfo);
|
let pay37Order = await applyOrder37(localOrderID, roleId, productInfo);
|
||||||
if (pay37Order.code == -1) {
|
if (pay37Order.code == -1) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Application, ChannelService, HandlerService, } from 'pinus';
|
import { Application, ChannelService, HandlerService, } from 'pinus';
|
||||||
import { reloadResources } from '../../../pubUtils/data';
|
import { reloadResources } from '../../../pubUtils/data';
|
||||||
import { settleOrderFromRedisPub } from '../../../services/orderService';
|
import { refundOrderFromRedisPub, settleOrderFromRedisPub } from '../../../services/orderService';
|
||||||
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
|
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
|
||||||
import { taflush } from '../../../services/sdkService';
|
import { taflush } from '../../../services/sdkService';
|
||||||
import { errlogger } from '../../../util/logger';
|
import { errlogger } from '../../../util/logger';
|
||||||
@@ -38,6 +38,14 @@ export class OrderRemote {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async refundOrderFromRedisPub(message: string) {
|
||||||
|
try {
|
||||||
|
await refundOrderFromRedisPub(message);
|
||||||
|
} catch(e) {
|
||||||
|
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public setServerMainten(serverIds: number[], startTime: number, endTime: number) {
|
public setServerMainten(serverIds: number[], startTime: number, endTime: number) {
|
||||||
try {
|
try {
|
||||||
setServerMainten(serverIds, startTime, endTime);
|
setServerMainten(serverIds, startTime, endTime);
|
||||||
|
|||||||
@@ -280,3 +280,30 @@ export async function settleOrderFromRedisPub(message: string) {
|
|||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export async function refundOrderFromRedisPub(message: string) {
|
||||||
|
console.log('**********refundOrderFromRedisPub*******')
|
||||||
|
console.log('message: ', message);
|
||||||
|
|
||||||
|
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_TO_REFUND) {
|
||||||
|
console.log('订单状态错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(order.roleId != params.actor_id) {
|
||||||
|
console.log('订单玩家错误');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
await UserOrderModel.refund(order.roleId, order.localOrderID, message);
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
@@ -542,9 +542,10 @@ export async function redisSubScribe() {
|
|||||||
let env = pinus.app.get('env');
|
let env = pinus.app.get('env');
|
||||||
if(env == 'development') env = 'local'; // 本地处理
|
if(env == 'development') env = 'local'; // 本地处理
|
||||||
let payChannel = getRedisSubChannel(REDIS_KEY.PAY_CHANNEL, env);
|
let payChannel = getRedisSubChannel(REDIS_KEY.PAY_CHANNEL, env);
|
||||||
|
let refundChannel = getRedisSubChannel(REDIS_KEY.REFUND_CHANNEL, env);
|
||||||
let treatRoleChannel = getRedisSubChannel(REDIS_KEY.TREAT_ROLE_CHANNEL, env);
|
let treatRoleChannel = getRedisSubChannel(REDIS_KEY.TREAT_ROLE_CHANNEL, env);
|
||||||
let treatGuildChannel = getRedisSubChannel(REDIS_KEY.TREAT_GUILD_CHANNEL, env);
|
let treatGuildChannel = getRedisSubChannel(REDIS_KEY.TREAT_GUILD_CHANNEL, env);
|
||||||
await redisClientPub().subscribeAsync(payChannel, treatRoleChannel, treatGuildChannel);
|
await redisClientPub().subscribeAsync(payChannel, treatRoleChannel, treatGuildChannel, refundChannel);
|
||||||
redisClientPub().on('message', (channel, message) => {
|
redisClientPub().on('message', (channel, message) => {
|
||||||
console.log('**********redisSubScribe*******')
|
console.log('**********redisSubScribe*******')
|
||||||
console.log('channel: ', channel, payChannel);
|
console.log('channel: ', channel, payChannel);
|
||||||
@@ -561,6 +562,11 @@ export async function redisSubScribe() {
|
|||||||
let servers = pinus.app.getServersByType('guild');
|
let servers = pinus.app.getServersByType('guild');
|
||||||
let server = getRandSingleEelm(servers);
|
let server = getRandSingleEelm(servers);
|
||||||
pinus.app.rpc.guild.guildRemote.treatGuildName.toServer(server.id, message);
|
pinus.app.rpc.guild.guildRemote.treatGuildName.toServer(server.id, message);
|
||||||
|
} else if (channel == refundChannel) {
|
||||||
|
let servers = pinus.app.getServersByType('order');
|
||||||
|
let server = getRandSingleEelm(servers);
|
||||||
|
pinus.app.rpc.order.orderRemote.refundOrderFromRedisPub.toServer(server.id, message);
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,9 +109,10 @@ export enum FIRST_GIFT_STATE {
|
|||||||
export enum PAY_TYPE {
|
export enum PAY_TYPE {
|
||||||
TEST = 0, // 测试
|
TEST = 0, // 测试
|
||||||
THREE_SEVEN = 1, // 37
|
THREE_SEVEN = 1, // 37
|
||||||
WX = 2, // 微信
|
THREE_SEVEN_IOS = 2, // 37ios
|
||||||
ALI = 3, // 阿里
|
WX = 3, // 微信
|
||||||
APPLE = 4, // 苹果
|
ALI = 4, // 阿里
|
||||||
|
APPLE = 5, // 苹果
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -122,6 +123,8 @@ export enum ORDER_STATE {
|
|||||||
RESULT_SUCCESS = 1, // 订单成功并结算奖励
|
RESULT_SUCCESS = 1, // 订单成功并结算奖励
|
||||||
CHECK_ORDER = 2, // 触发查询订单
|
CHECK_ORDER = 2, // 触发查询订单
|
||||||
RESULT_FAIL = 3, // 订单失败
|
RESULT_FAIL = 3, // 订单失败
|
||||||
|
CHECK_TO_REFUND = 4, // 触发查询要去退款
|
||||||
|
REFUND = 5, // 已退款
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ export enum SDK_37_CONST {
|
|||||||
LOGIN_KEY = '3PerD)H!JdTC_pEUnZl8vXKgasj5;7Q~', // 登录KEY
|
LOGIN_KEY = '3PerD)H!JdTC_pEUnZl8vXKgasj5;7Q~', // 登录KEY
|
||||||
PAY_KEY = '0;_Zy.qodXCF8NGQmrOYltk%HgfAz*39', // 重置KEY
|
PAY_KEY = '0;_Zy.qodXCF8NGQmrOYltk%HgfAz*39', // 重置KEY
|
||||||
CHAT_KEY = '3PerD)H!JdTC_pEUnZl8vXKgasj5;7Q~', // 聊天KEY
|
CHAT_KEY = '3PerD)H!JdTC_pEUnZl8vXKgasj5;7Q~', // 聊天KEY
|
||||||
|
IOS_PID = 'zyz',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum SDK_TA_CONST {
|
export enum SDK_TA_CONST {
|
||||||
|
|||||||
@@ -237,6 +237,7 @@ export enum REDIS_KEY {
|
|||||||
SHOW_LINEUP ="showLineup", // 展示阵容
|
SHOW_LINEUP ="showLineup", // 展示阵容
|
||||||
SYS_SERVER ='sysServer', // 全服connector服
|
SYS_SERVER ='sysServer', // 全服connector服
|
||||||
PAY_CHANNEL = 'pay', // 支付订阅频道
|
PAY_CHANNEL = 'pay', // 支付订阅频道
|
||||||
|
REFUND_CHANNEL = 'refund', // 退款频道
|
||||||
TREAT_ROLE_CHANNEL = 'treatRole', // 处理玩家账号名频道
|
TREAT_ROLE_CHANNEL = 'treatRole', // 处理玩家账号名频道
|
||||||
TREAT_GUILD_CHANNEL = 'treatGuild', // 处理公会账号名频道
|
TREAT_GUILD_CHANNEL = 'treatGuild', // 处理公会账号名频道
|
||||||
GUILD_FUND = 'guildFund', // 限时排行
|
GUILD_FUND = 'guildFund', // 限时排行
|
||||||
|
|||||||
@@ -520,6 +520,19 @@ export const PAY_37_CALLBACK_CODE = {
|
|||||||
PAY_ERR: { code: 10, simStr: '充值失败' }
|
PAY_ERR: { code: 10, simStr: '充值失败' }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const PAY_IOS_37_CALLBACK_CODE = {
|
||||||
|
SUCCESS: { code: 1, simStr: '发货成功' },
|
||||||
|
FAIL: { code: -1, simStr: '发货失败' },
|
||||||
|
USER_NOT_FOUND: { code: -2, simStr: '用户不存在' },
|
||||||
|
ROLE_NOT_FOUND: { code: -3, simStr: '角色不存在' },
|
||||||
|
IP_LIMIT: { code: -4, simStr: 'IP限制' },
|
||||||
|
MD5_ERR: { code: -5, simStr: 'md5校验错误' },
|
||||||
|
ORDER_DUPLICATE: { code: -6, simStr: '订单号重复' },
|
||||||
|
TIME_IS_EXPIRED: { code: -7, simStr: 'time时间已过期' },
|
||||||
|
SERVER_IS_BUSY: { code: -8, simStr: '游戏服务器繁忙' },
|
||||||
|
WRONG_PARAM: { code: -9, simStr: '参数错误' },
|
||||||
|
}
|
||||||
|
|
||||||
export const SDK_37_TREAT_CODE = {
|
export const SDK_37_TREAT_CODE = {
|
||||||
SUCCESS: { code: 1, simStr: '成功' },
|
SUCCESS: { code: 1, simStr: '成功' },
|
||||||
WRONG_PARAMS: { code: -1, simStr: '参数错误' },
|
WRONG_PARAMS: { code: -1, simStr: '参数错误' },
|
||||||
@@ -529,3 +542,12 @@ export const SDK_37_TREAT_CODE = {
|
|||||||
USER_NOT_FOUND: { code: -5, simStr: '用户不存在' },
|
USER_NOT_FOUND: { code: -5, simStr: '用户不存在' },
|
||||||
ROLE_NOT_FOUND: { code: -6, simStr: '角色不存在' },
|
ROLE_NOT_FOUND: { code: -6, simStr: '角色不存在' },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const SDK_37_REFUND_CODE = {
|
||||||
|
SUCCESS: { code: 1, simStr: '扣除元宝成功' },
|
||||||
|
FAIL: { code: -1, simStr: '扣除元宝失败' },
|
||||||
|
ROLE_NOT_FOUND: { code: -2, simStr: '角色不存在' },
|
||||||
|
IP_LIMIT: { code: -3, simStr: 'IP限制' },
|
||||||
|
MD5_ERR: { code: -4, simStr: 'md5校验错误' },
|
||||||
|
TIME_IS_EXPIRED: { code: -6, simStr: 'time时间已过期' },
|
||||||
|
}
|
||||||
@@ -68,6 +68,22 @@ export default class UserOrder extends BaseModel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 准备退款
|
||||||
|
public static async startRefund(roleId: string, localOrderID: string, message: string = '') {
|
||||||
|
let result: UserOrderModelType = await UserOrderModel.findOneAndUpdate({ roleId, localOrderID },
|
||||||
|
{ $set: { state: ORDER_STATE.CHECK_TO_REFUND, message } },
|
||||||
|
{ new: true }).lean(true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 退款
|
||||||
|
public static async refund(roleId: string, localOrderID: string, message: string = '') {
|
||||||
|
let result: UserOrderModelType = await UserOrderModel.findOneAndUpdate({ roleId, localOrderID },
|
||||||
|
{ $set: { state: ORDER_STATE.REFUND, message } },
|
||||||
|
{ new: true }).lean(true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//查询成功订单详情
|
//查询成功订单详情
|
||||||
public static async findSuccessOrderByProductID(productID: string, roleId: string, activityId: number) {
|
public static async findSuccessOrderByProductID(productID: string, roleId: string, activityId: number) {
|
||||||
let result: UserOrderModelType[] = await UserOrderModel.find({ productID, roleId, activityId, state: ORDER_STATE.RESULT_SUCCESS }).lean(true);
|
let result: UserOrderModelType[] = await UserOrderModel.find({ productID, roleId, activityId, state: ORDER_STATE.RESULT_SUCCESS }).lean(true);
|
||||||
|
|||||||
@@ -339,3 +339,43 @@ export class GetServerListParam {
|
|||||||
return this.appid != undefined && this.gid != undefined && this.time != undefined && this.sign != undefined
|
return this.appid != undefined && this.gid != undefined && this.time != undefined && this.sign != undefined
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class IOSRefundParam {
|
||||||
|
appid: string; // pid, 平台id
|
||||||
|
uid: number; // 用户id
|
||||||
|
game_id: number; // 发行游戏id
|
||||||
|
fx_c_game_id: string; // 子游戏id
|
||||||
|
sid: number; // 游戏服id
|
||||||
|
actor_id: string; // 角色id
|
||||||
|
order_id: string; // 37订单号
|
||||||
|
order_no: string; // 本地订单号
|
||||||
|
money: number; // 金额
|
||||||
|
game_coin: number; // 元宝数
|
||||||
|
product_id: string; // 商品id
|
||||||
|
time: number; // 请求时间
|
||||||
|
ext: string; // 扩展参数
|
||||||
|
sign: string; // 签名
|
||||||
|
|
||||||
|
constructor(data: any) {
|
||||||
|
this.appid = data.appid;
|
||||||
|
this.uid = data.uid;
|
||||||
|
this.game_id = data.game_id;
|
||||||
|
this.fx_c_game_id = data.fx_c_game_id;
|
||||||
|
this.sid = data.sid;
|
||||||
|
this.actor_id = data.actor_id;
|
||||||
|
this.order_id = data.order_id;
|
||||||
|
this.order_no = data.order_no;
|
||||||
|
this.money = data.money;
|
||||||
|
this.game_coin = data.game_coin;
|
||||||
|
this.product_id = data.product_id;
|
||||||
|
this.time = data.time;
|
||||||
|
this.ext = data.ext;
|
||||||
|
this.sign = data.sign;
|
||||||
|
}
|
||||||
|
|
||||||
|
getBody() {
|
||||||
|
let { appid, uid, game_id, sid, actor_id, order_id, order_no, money, game_coin, product_id, time, ext } = this;
|
||||||
|
return { appid, uid, game_id, sid, actor_id, order_id, order_no, money, game_coin, product_id, time, ext }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -63,7 +63,14 @@ export function get37GetServerMd5Sign(body: GetServerListParam, key: string) {
|
|||||||
return sign
|
return sign
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function loginValidate37(clientId: string, pst: string, platformAppid: string = SDK_37_CONST.PID, childGameId: number = SDK_37_CONST.FX_C_GAME_ID) {
|
export async function loginValidate37(clientId: string, pst: string, platform: string, platformAppid: string, childGameId: number = SDK_37_CONST.FX_C_GAME_ID) {
|
||||||
|
if(!platformAppid) {
|
||||||
|
if(platform == 'android') {
|
||||||
|
platformAppid = SDK_37_CONST.PID;
|
||||||
|
} else if(platform == 'ios' ){
|
||||||
|
platformAppid = SDK_37_CONST.IOS_PID;
|
||||||
|
}
|
||||||
|
}
|
||||||
let result: string = await request37(SDK_37_ADDR.LOGIN, {
|
let result: string = await request37(SDK_37_ADDR.LOGIN, {
|
||||||
clientid: clientId,
|
clientid: clientId,
|
||||||
pid: platformAppid,
|
pid: platformAppid,
|
||||||
@@ -86,10 +93,10 @@ export async function loginValidate37(clientId: string, pst: string, platformApp
|
|||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function loginValidata(channelType: string, params: { clientId: string, pst: string, platformAppid: string, childGameId: number }) {
|
export async function loginValidata(channelType: string, params: { clientId: string, pst: string, platform: string, platformAppid: string, childGameId: number }) {
|
||||||
if(channelType == '37') {
|
if(channelType == '37') {
|
||||||
let { clientId, pst, platformAppid, childGameId } = params;
|
let { clientId, pst, platform, platformAppid, childGameId } = params;
|
||||||
return await loginValidate37(clientId, pst, platformAppid, childGameId);
|
return await loginValidate37(clientId, pst, platform, platformAppid, childGameId);
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Controller } from 'egg';
|
import { Controller } from 'egg';
|
||||||
import { GetGuildInfoByUserParam, GetServerListParam, GuildNameCallBackParam, PayCallback37Data, RoleNameCallBackParam } from '../domain/sdk';
|
import { GetGuildInfoByUserParam, GetServerListParam, GuildNameCallBackParam, IOSRefundParam, PayCallback37Data, RoleNameCallBackParam } from '../domain/sdk';
|
||||||
|
|
||||||
export default class SdkController extends Controller {
|
export default class SdkController extends Controller {
|
||||||
|
|
||||||
@@ -10,6 +10,20 @@ export default class SdkController extends Controller {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async pay37IosCallback() {
|
||||||
|
const { ctx } = this;
|
||||||
|
const params = new PayCallback37Data(ctx.request.body);
|
||||||
|
ctx.body = await ctx.service.sdk.pay37IOSCallback(params);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async refundIOSCallback() {
|
||||||
|
const { ctx } = this;
|
||||||
|
const params = new IOSRefundParam(ctx.request.body);
|
||||||
|
ctx.body = await ctx.service.sdk.refundIOSCallback(params);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
public async treatRoleName() {
|
public async treatRoleName() {
|
||||||
const { ctx } = this;
|
const { ctx } = this;
|
||||||
const params = new RoleNameCallBackParam(ctx.query);
|
const params = new RoleNameCallBackParam(ctx.query);
|
||||||
|
|||||||
@@ -28,9 +28,11 @@ export default (app: Application) => {
|
|||||||
|
|
||||||
// sdk 回调
|
// sdk 回调
|
||||||
router.post('/cb/pay37callback', controller.sdk.pay37Callback);
|
router.post('/cb/pay37callback', controller.sdk.pay37Callback);
|
||||||
|
router.post('/cb/pay37ioscallback', controller.sdk.pay37IosCallback);
|
||||||
router.get('/cb/treatusername', controller.sdk.treatRoleName);
|
router.get('/cb/treatusername', controller.sdk.treatRoleName);
|
||||||
router.get('/cb/treatguildname', controller.sdk.treatGuildName);
|
router.get('/cb/treatguildname', controller.sdk.treatGuildName);
|
||||||
router.get('/cb/getguildbyuser', controller.sdk.getGuildByUser);
|
router.get('/cb/getguildbyuser', controller.sdk.getGuildByUser);
|
||||||
router.get('/cb/getserverlist', controller.sdk.getServerList);
|
router.get('/cb/getserverlist', controller.sdk.getServerList);
|
||||||
router.post('/cb/getserverlist', controller.sdk.getServerList);
|
router.post('/cb/getserverlist', controller.sdk.getServerList);
|
||||||
|
router.post('/cb/refundioscallback', controller.sdk.refundIOSCallback);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -404,7 +404,7 @@ export default class Auth extends Service {
|
|||||||
|
|
||||||
const ctx = this.ctx;
|
const ctx = this.ctx;
|
||||||
|
|
||||||
let requestResult = await loginValidata(channelType, { clientId, pst, platformAppid, childGameId });
|
let requestResult = await loginValidata(channelType, { clientId, pst, platform, platformAppid, childGameId });
|
||||||
if(!requestResult) return this.ctx.service.utils.resResult(STATUS.CHANNEL_ERR);
|
if(!requestResult) return this.ctx.service.utils.resResult(STATUS.CHANNEL_ERR);
|
||||||
|
|
||||||
if(requestResult.code != 1) {
|
if(requestResult.code != 1) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
import { Service } from 'egg';
|
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 { 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, PayCallback37Data, RoleNameCallBackParam } from '../domain/sdk';
|
import { GetGuildInfoByUserParam, GetServerListParam, GuildNameCallBackParam, IOSRefundParam, PayCallback37Data, RoleNameCallBackParam } from '../domain/sdk';
|
||||||
import { RedisClient } from 'redis';
|
import { RedisClient } from 'redis';
|
||||||
import { get37GetServerMd5Sign, get37Md5SignA, get37Md5SignB, getChannelId, getRedisSubChannel } from '../pubUtils/sdkUtil';
|
import { get37GetServerMd5Sign, get37Md5SignA, get37Md5SignB, getChannelId, getRedisSubChannel } from '../pubUtils/sdkUtil';
|
||||||
import { UserOrderModel } from '@db/UserOrder';
|
import { UserOrderModel } from '@db/UserOrder';
|
||||||
@@ -20,7 +20,7 @@ import moment = require('moment');
|
|||||||
*/
|
*/
|
||||||
export default class Sdk extends Service {
|
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);
|
let sign = get37Md5SignA(params.getBody(), SDK_37_CONST.PAY_KEY);
|
||||||
console.log('******37Sign', sign);
|
console.log('******37Sign', sign);
|
||||||
return sign == params.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, '');
|
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) {
|
public check37WordsSign(params: RoleNameCallBackParam|GuildNameCallBackParam|GetGuildInfoByUserParam) {
|
||||||
let sign = get37Md5SignB(params.getBody(), SDK_37_CONST.CHAT_KEY);
|
let sign = get37Md5SignB(params.getBody(), SDK_37_CONST.CHAT_KEY);
|
||||||
|
|||||||
Reference in New Issue
Block a user