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("请求结果:"); 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 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; } }