cb/assets/Script/module/Pay/Utils.ts
2025-08-13 10:43:17 +08:00

939 lines
35 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { MiniGameSdk } from "../../Sdk/MiniGameSdk";
export default class Utils {
static uid: string = "";
static session_key = "";
static appid: string = "";
static openid: string = "";
static outTradeNo: string = "";
static httpip: string = `https://laf.nika4games.com/`;
//#region 安卓支付
/**获取用户信息*/
static getUserInfo(callBack) {
//微信登录
wx.login({
success(res) {
console.log("微信login成功");
//console.log(res.code);
if (res.code) {
// 标志位,用于记录 callBack 是否已经被调用
let isCallBackCalled = false;
// 定义轮询函数
const pollLogin = () => {
if (isCallBackCalled) {
console.log("回调已被调用,不再发起请求");
return;
}
let isDebug = false;
let test = cc.fx.GameTool.getWechatGameVersion();
if (test == "正式版") {
isDebug = true;
}
console.log("___________发起登录请求", true, cc.fx.GameConfig.GM_INFO.shushu_DistinctId);
Utils.POST("login", { code: res.code, isDebug: true, distinctId: cc.fx.GameConfig.GM_INFO.shushu_DistinctId }, ret => {
console.log("__________请求结果", ret);
if (!isCallBackCalled) {
isCallBackCalled = true;
if (ret.code === 1) { // 假设返回 code 为 1 表示成功
Utils.openid = ret.data.openid;
Utils.session_key = ret.data.session_key;
Utils.uid = ret.data._id;
}
callBack(ret);
}
});
// 如果回调未调用6 秒后再次请求
if (!isCallBackCalled) {
setTimeout(pollLogin, 6000);
}
};
// 首次调用轮询函数
pollLogin();
} else {
console.log('登录失败!' + res.errMsg)
callBack({ code: 0, data: { openid: "登录失败" }, message: res.errMsg });
}
}
})
}
/**道具直购接口*/
static buyProp(id, count, price, systemType, productId, callBack) {
//console.log("请求uid:" + Utils.uid, "请求id:" + id, "请求数量:" + count, "请求价格:" + price);
Utils.POST("wx/orderPaySig", { uid: Utils.uid, itemid: id, itemCount: count, itemPrice: price }, res => {
if (res.code == 1) {
Utils.outTradeNo = res.data.outTradeNo;
const data = {
price: price,
payment_name: productId,
payment_num: 1,
type: systemType,
}
console.log("创建订单", Utils.outTradeNo);
cc.fx.GameTool.shushu_Track("init_order", data);
//console.log("创建的最新订单的订单号:", Utils.outTradeNo);
// let timeoutId: number;
// const timeoutDuration = 30000; // 30 秒超时时间
// // 设置超时定时器
// timeoutId = setTimeout(() => {
// console.error('支付请求超时');
// callBack("请求支付超时");
// }, timeoutDuration);
//@ts-ignore
wx.requestMidasPaymentGameItem({
signData: res.data.signData,
paySig: res.data.paySig,
signature: res.data.signature,
success(res, errCode) {
// clearTimeout(timeoutId); // 清除超时定时器
//console.log('成功', res, errCode);
callBack(res);
},
fail({ errMsg, errCode }) {
// clearTimeout(timeoutId); // 清除超时定时器
//console.log('失败');
//console.log(errMsg, errCode)
let data = {
errMsg: errMsg,
errCode: errCode,
err: "请求支付失败",
}
callBack(data);
}
})
}
});
}
static getPayInfo(callBack) {
// 延迟时间数组,按照 1 秒 3 次、2 秒 5 次、5 秒 6 次、15 秒 5 次的规则生成
const delays = [
...Array(3).fill(1000),
...Array(5).fill(2000),
...Array(6).fill(5000),
...Array(5).fill(15000)
];
let attempt = 0; // 轮询次数
const poll = () => {
if (attempt >= delays.length) {
MiniGameSdk.API.showToast("网络异常,如付款成功,重进游戏可领取奖励");
callBack({ code: 0, data: { pay_state: -1 }, message: '轮询超时' });
return;
}
//console.log("请求uid:", Utils.uid);
//console.log("outTradeNo:", Utils.outTradeNo);
Utils.POST("wx/getPayInfo", { uid: Utils.uid, outTradeNo: Utils.outTradeNo }, res => {
//console.log("查询字符结果:", res);
if (res.code === 1 && (res.data.pay_state === 1 || res.data.pay_state === 2)) {
callBack(res);
} else {
attempt++;
setTimeout(poll, delays[attempt - 1]);
}
});
};
poll();
}
static setPayInfo(callBack, order) {
const delays = [1000, 3000, 6000, 9000, 12000];// 延迟时间数组
let attempt = 0; // 重试次数
const sendRequest = () => {
if (attempt > delays.length) {
// 达到最大重试次数,调用回调并返回错误信息
callBack({ code: 0, message: '请求失败,已达到最大重试次数' });
return;
}
let orderTemp = Utils.outTradeNo;
if (order) orderTemp = order;
//console.log("告知服务器发货的订单号:", orderTemp);
Utils.POST("wx/getOrderReward", { outTradeNo: orderTemp }, res => {
//console.log("告知服务器发货:", res);
if (res.code === 1) {
console.log("告知服务器发货成功:", res);
// 请求成功,调用回调并返回结果
callBack(res);
} else {
// 请求失败,增加重试次数并设置下一次请求的延迟
console.log("告知服务器发货失败:", res);
attempt++;
if (attempt <= delays.length) {
setTimeout(sendRequest, delays[attempt - 1]);
} else {
callBack({ code: 0, message: '请求失败,已达到最大重试次数' });
}
}
});
};
sendRequest();
}
//#region ios支付
/**跳转客服*/
static GoKEFu(iosPayInfo, callBack) {
console.log("创建新的订单,清空老订单");
var order = `wcx_` + Math.round(Math.random() * 10 ** 13) + Date.now();
if (iosPayInfo.payment_name == "month_Card") {
cc.fx.GameConfig.GM_INFO.iosMonthOrder = null;
cc.fx.GameConfig.GM_INFO.iosMonthOrder = order;
}
else if (iosPayInfo.payment_name == "reborn_Gift") {
cc.fx.GameConfig.GM_INFO.iosReviveOrder = null;
cc.fx.GameConfig.GM_INFO.iosReviveOrder = order;
}
else {
cc.fx.GameConfig.GM_INFO.iosShopOrder = null;
cc.fx.GameConfig.GM_INFO.iosShopOrder = order;
}
const data = {
tpye: "ios",
outTradeNo: order,
propName: iosPayInfo.payment_name,
count: iosPayInfo.payment_count,
price: iosPayInfo.price,//价格单位是分
}
const shushu_data = {
outTradeNo: order,
price: iosPayInfo.price,
payment_name: iosPayInfo.payment_name,
payment_num: iosPayInfo.payment_count,
type: "ios",
}
console.log("ios创建订单信息:", data);
cc.fx.GameTool.shushu_Track("init_order", shushu_data);
//@ts-ignore
wx.openCustomerServiceConversation({
sessionFrom: JSON.stringify(data), // 会话来源(可选)
showMessageCard: false, // 是否展示消息卡片
success() {
callBack("success");
//console.log('客服会话已successr');
},
fail() {
//console.log('客服会话已over');
callBack("fail");
}
});
}
static getIosPayInfo(order, callBack) {
// 延迟 0.5 秒执行后续逻辑
setTimeout(() => {
// 最大重试次数
const maxRetries = 7;
let retryCount = 0;
// 标志位,用于记录 callBack 是否已经被调用
let isCallBackCalled = false;
const makeRequest = () => {
if (retryCount > maxRetries) {
if (!isCallBackCalled) {
MiniGameSdk.API.showToast("网络异常,如充值成功,重进游戏可领取奖励");
callBack({ code: 2, data: null, message: '轮询超时,达到最大重试次数' });
isCallBackCalled = true;
}
return;
}
// 设置超时定时器
const timeoutId = setTimeout(() => {
retryCount++;
console.log(`请求超时,第 ${retryCount} 次重新申请接口`);
makeRequest();
}, 4000);
const orderNow = order;
console.log("请求uid:" + Utils.uid);
console.log("outTradeNo:" + orderNow);
Utils.POST("wx/iosgetPayInfo", { outTradeNo: orderNow, uid: cc.fx.GameConfig.GM_INFO.uid }, res => {
console.log("查询字符结果IOS");
console.log(res);
// 清除超时定时器
clearTimeout(timeoutId);
if (!isCallBackCalled) {
callBack(res);
isCallBackCalled = true;
}
});
};
makeRequest();
}, 500);
}
//#region POST请求
/**
* POST请求
*
* @static
* @param {*} url
* @param {object} [param={}]
* @param {*} callback
* @memberof HttpUtil
*/
public static POST(url, param: object | any, callback) {
var xhr = cc.loader.getXMLHttpRequest();
xhr.timeout = 5000;//超时时间
let dataStr = '';
Object.keys(param).forEach(key => {
dataStr += key + '=' + encodeURIComponent(param[key]) + '&';
})
if (dataStr !== '') {
dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
}
url = this.httpip + url;
//console.log("请求地址:" + url);
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
let response: any = xhr.responseText;
if (xhr.status >= 200 && xhr.status < 300) {
let httpStatus = xhr.statusText;
// callback(true, JSON.parse(response));
try {
response = JSON.parse(response);
} catch {
response = { data: "数据有误", code: 0 };
}
callback(response);
} else {
callback({ data: "网络请求失败,请检查网络连接", code: 0 });
}
}
};
xhr.send(dataStr);
}
static http_sendRequest(path, data, handler, extraUrl = null) {
let xhr = cc.loader.getXMLHttpRequest();
xhr.timeout = 5000;//超时时间
if (data == null) {
data = {};
}
if (extraUrl == null) {
//@ts-ignore
if (Utils.isDebug) {
extraUrl = "http://localhost:9003";
} else {
extraUrl = this.httpip;
}
}
//解析请求路由以及格式化请求参数
let sendtext = "?";
for (let k in data) {
if (sendtext != "?") {
sendtext += "&";
}
sendtext += (k + '=' + data[k]);
}
//组装完整的URL
let requestURL = extraUrl + "/" + path + encodeURI(sendtext);
// //console.log("发送请求:");
// //console.log(requestURL);
//发送请求 Get形式发送请求
xhr.open("GET", requestURL, true);
if (cc.sys.isNative) {//如果是手机就设置请求头
xhr.setRequestHeader("Accept-Encoding", "gzip,deflate");
}
//计时判断是否超时
let hasRetried = false;
let timer = setTimeout(function () {
//xhr.hasRetried=true;
hasRetried = true;
xhr.abort();
//console.log("http timeOut......");
retryFun();
}, 5000);
//重新发送请求
let retryFun = function () {
Utils.http_sendRequest(path, data, handler, extraUrl);
}
//监听反馈
xhr.onreadystatechange = function () {
clearTimeout(timer);
if (xhr.readyState === 4 && (xhr.status >= 200 && xhr.status < 300)) {
let ret = null;
let respText = xhr.responseText;
try {
ret = JSON.parse(respText);
} catch (e) {
//console.log("http error:" + e);
ret = {
code: 1,
msg: e
}
}
if (handler) {
handler(ret);
}
handler = null;
} else if (xhr.readyState === 4) {
// if(xhr.hasRetried){
// return;
// }
if (hasRetried) {
return;
}
//console.log('other readystate ==' + xhr.readyState + ', status:' + xhr.status);
if (xhr.readyState == 4 && xhr.status == 0) {
handler({
err: 1,
msg: "网络连接失败,请稍后再试"
});
return;
}
setTimeout(function () {
retryFun();
}, 5000);
} else {
//console.log('other readystate:' + xhr.readyState + ', status:' + xhr.status);
}
}
try {
xhr.send();
} catch (e) {
retryFun();
}
return xhr;
}
//#region laf云函数 游戏内数据用
//获取用户数据,包含头像昵称注册时间
static getUserData(callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let data = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'read',
}
Utils.POST("userData", data, res => {
//console.log("获得userData数据:", res);
if (res.code === 1) {
//console.log("服务器:获取用户数据成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:获取用户数据失败", res);
if (callBack) callBack(res);
}
});
}
}
//上传用户信息
static setUserData(data, callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'save',
userData: data
}
Utils.POST("userData", setData, res => {
//console.log("获得userData数据:", res);
if (res.code === 1) {
//console.log("服务器:获取用户数据成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:获取用户数据失败", res);
if (callBack) callBack(res);
}
});
}
}
//获得金币信息
static getUserCoin(callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'read',
}
Utils.POST("userCoin", setData, res => {
//console.log("获得userCoin数据:", res);
if (res.code === 1) {
//console.log("服务器:获得金币成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:获得金币失败", res);
if (callBack) callBack(res);
}
});
}
}
//上传金币信息
static setUserCoin(callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'save',
coinAmount: Math.floor(cc.fx.GameConfig.GM_INFO.coin)
}
//console.log("服务器:上传金币", Math.floor(cc.fx.GameConfig.GM_INFO.coin));
Utils.POST("userCoin", setData, res => {
//console.log("获得userCoin数据:", res);
if (res.code === 1) {
//console.log("服务器:上传金币成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:上传金币失败", res);
if (callBack) callBack(res);
}
});
}
}
//获得关卡等级信息
static getUserLevel(callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'read',
}
Utils.POST("userLevel", setData, res => {
//console.log("获得userLevel数据:", res);
if (res.code === 1) {
//console.log("服务器:获得等级成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:获得等级失败", res);
if (callBack) callBack(res);
}
});
}
}
//上传关卡等级信息
static setUserLevel(callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'save',
levelAmount: parseInt(cc.fx.GameConfig.GM_INFO.level)
}
Utils.POST("userLevel", setData, res => {
//console.log("获得userLevel数据:", res);
if (res.code === 1) {
//console.log("服务器:上传等级成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:上传等级失败", res);
if (callBack) callBack(res);
}
});
}
}
//获得用户道具信息
static getUserProp(callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'read',
}
Utils.POST("userProp", setData, res => {
//console.log("获得userProp数据:", res);
if (res.code === 1) {
//console.log("服务器:获得道具成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:获得道具失败", res);
if (callBack) callBack(res);
}
});
}
}
//上传道具信息
static setUserProp(propid, amount, callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = null;
if (propid == 0) {
setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'save',
propType: propid,
propData: JSON.stringify(amount),
}
}
else {
setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'save',
propType: propid,
propData: amount,
}
}
//console.log("上传道具类型", propid, "上传道具数量:", amount);
Utils.POST("userProp", setData, res => {
//console.log("获得userProp数据:", res);
if (res.code === 1) {
//console.log("服务器:上传道具成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:上传道具失败", res);
if (callBack) callBack(res);
}
});
}
}
//获得关卡等级信息
static getUserHealth(callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'read',
}
Utils.POST("userHealth", setData, res => {
//console.log("获得userHealth数据:", res);
if (res.code === 1) {
//console.log("服务器:获得体力成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:获得体力失败", res);
if (callBack) callBack(res);
}
});
}
}
//上传关卡等级信息
static setUserHealth(timestamp, callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'save',
healthAmount: cc.fx.GameConfig.GM_INFO.hp,
timestamp: timestamp
}
Utils.POST("userHealth", setData, res => {
//console.log("获得userHealth数据:", res);
if (res.code === 1) {
//console.log("服务器:上传体力成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:上传体力失败", res);
if (callBack) callBack(res);
}
});
}
}
//获得关卡等级信息
static getUserPowerTime(callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'read',
}
Utils.POST("userPower", setData, res => {
//console.log("获得userPower数据:", res);
if (res.code === 1) {
//console.log("服务器:获得无限体力成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:获得无限体力失败", res);
if (callBack) callBack(res);
}
});
}
}
//上传关卡等级信息
static setUserPowerTime(userPowerTime, callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'save',
userPowerTime: userPowerTime
}
Utils.POST("userPower", setData, res => {
//console.log("获得userPower数据:", res);
if (res.code === 1) {
//console.log("服务器:上传无限体力成功", res);
if (callBack) callBack(res);
} else {
//console.log("服务器:上传无限体力失败", res);
if (callBack) callBack(res);
}
});
}
}
//获得monthlyCard信息 少用
static monthGetReward(callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
}
Utils.POST("monthGetReward", setData, res => {
// //console.log("获得monthGetReward数据:", res);
if (res.code === 1) {
// //console.log("服务器:领取获得monthGetReward成功'✅ ", res);
if (callBack) callBack(res);
} else {
// //console.log("服务器:获得monthGetReward失败'❌ ", res);
if (callBack) callBack(res);
}
});
}
}
static getMonthlyCard(callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
// //console.log("获取monthlyCard信息:", uid, monthCardTime);
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'read',
}
Utils.POST("monthlyCard", setData, res => {
// //console.log("获得monthlyCard数据:", res);
if (res.code === 1) {
// //console.log("服务器:获取monthlyCard成功'✅ ", res);
if (callBack) callBack(res);
} else {
// //console.log("服务器:获取monthlyCard失败'❌ ", res);
if (callBack) callBack(res);
}
});
}
}
//上传monthlyCard信息
static setMonthlyCard(monthCardTime, callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
// //console.log("上传monthlyCard信息:", uid, monthCardTime);
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'save',
monthCardTime: monthCardTime,
}
Utils.POST("monthlyCard", setData, res => {
// //console.log("获得monthlyCard数据:", res);
if (res.code === 1) {
// //console.log("服务器:上传monthlyCard成功'✅ ", res);
if (callBack) callBack(res);
} else {
// //console.log("服务器:上传monthlyCard失败'❌ ", res);
if (callBack) callBack(res);
}
});
}
}
//canRebonGift信息
static canRebonGift(callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
}
Utils.POST("canRebonGift", setData, res => {
if (res.code === 1) {
//console.log("服务器:canRebonGift'✅ ", res);
if (callBack) callBack(res);
} else {
if (callBack) callBack(res);
}
});
}
}
//购买
//上传monthlyCard信息
static rebornGift(rebornGift, callBack) {
if (typeof wx !== 'undefined' && wx !== null) {
let uid = cc.fx.StorageMessage.getStorage("uid");
// //console.log("上传monthlyCard信息:", uid, monthCardTime);
//旧的读取数据设置数据方法,以强联网为主
if (uid != undefined && uid != "" && uid != null) {
cc.fx.GameConfig.GM_INFO.uid = uid;
}
let setData = {
uid: cc.fx.GameConfig.GM_INFO.uid,
action: 'save',
rebornGift: rebornGift,
}
Utils.POST("rebornGift", setData, res => {
// //console.log("获得rebornGift数据:", res);
if (res.code === 1) {
//console.log("服务器:上传rebornGift成功'✅ ", res);
if (callBack) callBack(res);
} else {
// //console.log("服务器:上传rebornGift失败'❌ ", res);
if (callBack) callBack(res);
}
});
}
}
//设置分享成功信息,帮别人成功
static shareLevel(otherLevel, uid, callBack) {
let otheruid = uid || "";
let level = otherLevel || 0;
let data = {
uid: otheruid,
otherUid: cc.fx.GameConfig.GM_INFO.uid,
shareLv: level,
};
// 延迟时间数组,按照 1 秒 3 次、2 秒 5 次、5 秒 6 次、15 秒 5 次的规则生成
const delays = [
...Array(3).fill(1000),
...Array(5).fill(2000),
...Array(6).fill(5000),
...Array(5).fill(15000)
];
let attempt = 0; // 轮询次数
const poll = () => {
if (attempt >= delays.length) {
MiniGameSdk.API.showToast("网络异常,分享数据提交失败");
callBack({ code: 0, data: null, message: '轮询超时' });
return;
}
Utils.POST("shareLvSuccess", data, res => {
//console.log("获得shareLvSuccess数据:", res);
if (res.code === 1) {
//console.log("服务器:分享帮助通过关卡数据成功", res);
callBack(res);
} else {
attempt++;
setTimeout(poll, delays[attempt - 1]);
}
});
};
poll();
}
//获取分享信息
static getShareLevel(callBack) {
let data = {
uid: cc.fx.GameConfig.GM_INFO.uid
};
if (typeof wx !== 'undefined' && wx !== null) {
Utils.POST("getShareLv", data, res => {
//console.log("获得shareLvSuccess数据:", res);
if (res.code === 1) {
//console.log("服务器:分享帮助通过关卡数据成功", res);
if (callBack) callBack(res);
} else {
if (callBack) callBack(res);
}
});
}
}
}