404 lines
14 KiB
TypeScript
404 lines
14 KiB
TypeScript
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("登录成功");
|
|
console.log(res);
|
|
if (res.code) {
|
|
Utils.POST("login",{code:res.code},ret=>{
|
|
console.log("请求结果:",res);
|
|
console.log(ret);
|
|
Utils.openid=ret.data.openid;
|
|
Utils.session_key=ret.data.session_key;
|
|
Utils.uid=ret.data._id;
|
|
callBack(Utils.uid);
|
|
})
|
|
} else {
|
|
console.log('登录失败!' + res.errMsg)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
/**道具直购接口*/
|
|
static buyProp(id,count,price,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;
|
|
//@ts-ignore
|
|
wx.requestMidasPaymentGameItem({
|
|
signData:res.data.signData,
|
|
paySig: res.data.paySig,
|
|
signature: res.data.signature,
|
|
success(res, errCode) {
|
|
console.log('成功', res, errCode);
|
|
callBack(res);
|
|
},
|
|
fail({errMsg,errCode}) {
|
|
console.error('失败');
|
|
console.error(errMsg, errCode)
|
|
callBack(null);
|
|
}
|
|
})
|
|
}
|
|
|
|
});
|
|
|
|
|
|
}
|
|
static getPayInfo(callBack) {
|
|
const delays = [1000, 10000, 30000, 60000, 60000]; // 延迟时间数组
|
|
let attempt = 0; // 轮询次数
|
|
|
|
const poll = () => {
|
|
if (attempt >= delays.length) {
|
|
callBack({ code: 0, data: { pay_state: -1 }, message: '轮询超时' });
|
|
return;
|
|
}
|
|
|
|
console.log("请求uid:", Utils.uid);
|
|
console.log("outTradeNo:", this.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) {
|
|
const delays = [1000, 5000, 10000, 20000, 30000]; // 延迟时间数组
|
|
let attempt = 0; // 重试次数
|
|
const sendRequest = () => {
|
|
if (attempt > delays.length) {
|
|
// 达到最大重试次数,调用回调并返回错误信息
|
|
callBack({ code: 0, message: '请求失败,已达到最大重试次数' });
|
|
return;
|
|
}
|
|
Utils.POST("wx/getOrderReward", {outTradeNo: Utils.outTradeNo}, res => {
|
|
console.log("告知服务器发货:", res);
|
|
if (res.code === 1) {
|
|
// 请求成功,调用回调并返回结果
|
|
callBack(res);
|
|
} else {
|
|
// 请求失败,增加重试次数并设置下一次请求的延迟
|
|
attempt++;
|
|
if (attempt <= delays.length) {
|
|
setTimeout(sendRequest, delays[attempt - 1]);
|
|
} else {
|
|
callBack({ code: 0, message: '请求失败,已达到最大重试次数' });
|
|
}
|
|
}
|
|
});
|
|
};
|
|
sendRequest();
|
|
}
|
|
|
|
/**跳转客服*/
|
|
static GoKEFu(){
|
|
// 打开客服会话
|
|
//wx.navigateTo({ url: '/pages/webview?url=https://xxx.com/customer' });
|
|
//@ts-ignore
|
|
wx.openCustomerServiceConversation({
|
|
sessionFrom: '你好这是充值中心', // 会话来源(可选)
|
|
showMessageCard: true, // 是否展示消息卡片
|
|
sendMessageTitle:"扫描二维码进行充值",
|
|
sendMessageImg:"https://img2.huashi6.com/images/resource/thumbnail/2023/07/23/193722_24254930385.jpg?imageMogr2/quality/100/interlace/1/thumbnail/2000x%3E",
|
|
success() {
|
|
console.log('客服会话已打开');
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
//#region 微信云
|
|
// static initServer(){
|
|
// if(cc.sys.platform!=cc.sys.WECHAT_GAME)return;
|
|
// //@ts-ignore
|
|
// wx.cloud.init({
|
|
// env: 'cloudbase-1gl7iex89268f11e'
|
|
// })
|
|
// }
|
|
|
|
// static getUserCode(){
|
|
// //@ts-ignore
|
|
// wx.login({
|
|
// success (res) {
|
|
// console.log("登录成功");
|
|
// console.log(res);
|
|
// if (res.code) {
|
|
// //@ts-ignore
|
|
// wx.cloud.callFunction({
|
|
// // 云函数名称
|
|
// name: 'login',
|
|
// // 传给云函数的参数
|
|
// data: {
|
|
// code:res.code,
|
|
// },
|
|
// success: function(ret) {
|
|
// console.log("请求成功");
|
|
// console.log("请求结果:");
|
|
// console.log(ret);
|
|
// Utils.openid=ret.data.openid;
|
|
// Utils.session_key=ret.data.session_key;
|
|
// Utils.uid=ret.data._id;
|
|
// },
|
|
// fail:function(res){
|
|
// console.log("请求失败");
|
|
// console.log(res);
|
|
// }
|
|
// })
|
|
// } else {
|
|
// console.log('登录失败!' + res.errMsg)
|
|
// }
|
|
// }
|
|
// })
|
|
// }
|
|
|
|
// static PayOder(){
|
|
// if(cc.sys.platform!=cc.sys.WECHAT_GAME)return;
|
|
// //@ts-ignore
|
|
// wx.cloud.callFunction({
|
|
// // 云函数名称
|
|
// name: 'userPayOrder',
|
|
// // 传给云函数的参数
|
|
// data: {
|
|
// itemid:"10011",
|
|
// itemCount:1,
|
|
// itemPrice:100
|
|
// },
|
|
// success: function(res) {
|
|
// console.log("请求成功");
|
|
// console.log(res)
|
|
// if(res.result.code==1){
|
|
// Utils.outTradeNo=res.result.data.outTradeNo;
|
|
// console.log("订单号:"+Utils.outTradeNo);
|
|
// //@ts-ignore
|
|
// wx.requestMidasPaymentGameItem({
|
|
// signData:res.result.data.signData,
|
|
// paySig: res.result.data.paySig,
|
|
// signature: res.result.data.signature,
|
|
// success(res, errCode) {
|
|
// console.log('成功', res, errCode);
|
|
// },
|
|
// fail({errMsg,errCode}) {
|
|
// console.error('失败');
|
|
// console.error(errMsg, errCode)
|
|
// }
|
|
// })
|
|
// }
|
|
|
|
// },
|
|
// fail:function(res){
|
|
// console.log("请求失败");
|
|
// console.log(res);
|
|
// }
|
|
// })
|
|
// }
|
|
|
|
// static getPayInfo1(callBack){
|
|
// if(cc.sys.platform!=cc.sys.WECHAT_GAME)return;
|
|
// //@ts-ignore
|
|
// wx.cloud.callFunction({
|
|
// // 云函数名称
|
|
// name: 'userGetPayState',
|
|
// // 传给云函数的参数
|
|
// data: {
|
|
// outTradeNo:Utils.outTradeNo
|
|
// },
|
|
// success: function(res) {
|
|
// console.log("请求成功");
|
|
// console.log(res)
|
|
// callBack("成功");
|
|
// },
|
|
// fail:function(res){
|
|
// console.log("请求失败");
|
|
// console.log(res);
|
|
// callBack("失败");
|
|
// }
|
|
// })
|
|
// }
|
|
|
|
// static toke(){
|
|
// if(cc.sys.platform!=cc.sys.WECHAT_GAME)return;
|
|
// //@ts-ignore
|
|
// wx.cloud.callFunction({
|
|
// // 云函数名称
|
|
// name: 'uerToken',
|
|
// // 传给云函数的参数
|
|
// data: {
|
|
|
|
// },
|
|
// success: function(res) {
|
|
// console.log("请求成功");
|
|
// console.log(res)
|
|
// },
|
|
// fail:function(res){
|
|
// console.log("请求失败");
|
|
// console.log(res);
|
|
// }
|
|
// })
|
|
// }
|
|
//#endregion
|
|
|
|
|
|
/**
|
|
* POST请求
|
|
*
|
|
* @static
|
|
* @param {*} url
|
|
* @param {object} [param={}]
|
|
* @param {*} callback
|
|
* @memberof HttpUtil
|
|
*/
|
|
public static POST(url, param:object|any,callback) {
|
|
var xhr = cc.loader.getXMLHttpRequest();
|
|
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(exports.token){//数据中加入安全密匙
|
|
// data.token=exports.token;
|
|
// }
|
|
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;
|
|
}
|
|
}
|