123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542 |
- const ResponseStateCode = require('../utils/GameEnum').ResponseStateCode;
- var Promise = require('../lib/es6-promise').Promise;
- class Api {
- static createImageFromUrl(avatarUrl, success, fail) {
- if (avatarUrl) {
- var index = avatarUrl.indexOf('https:');
- var httpIndex = avatarUrl.indexOf('http:');
- if (index === 0 || httpIndex === 0) {
- //以'https:'开头
- } else {
- avatarUrl = 'https:' + avatarUrl;
- }
- if (window.wx != undefined) {
- try {
- let image = wx.createImage();
- image.onload = () => {
- try {
- let texture = new cc.Texture2D();
- texture.initWithElement(image);
- texture.handleLoadedTexture();
- success(new cc.SpriteFrame(texture))
- } catch (e) {
- cc.log(e);
- cc.loader.loadRes('./textures/common/default_avatar', cc.SpriteFrame, (err, spriteFrame) => {
- success(spriteFrame);
- });
- }
- };
- image.src = avatarUrl;
- } catch (e) {
- cc.log(e);
- cc.loader.loadRes('./textures/common/default_avatar', cc.SpriteFrame, (err, spriteFrame) => {
- success(spriteFrame);
- });
- }
- } else {
- cc.loader.load({
- url: avatarUrl, type: 'jpg'
- }, (err, texture) => {
- if (err === undefined || err === null) {
- success(new cc.SpriteFrame(texture));
- } else {
- cc.loader.loadRes('./textures/common/default_avatar', cc.SpriteFrame, (err, spriteFrame) => {
- success(spriteFrame);
- });
- }
- });
- }
- } else {
- cc.loader.loadRes('./textures/common/default_avatar', cc.SpriteFrame, (err, spriteFrame) => {
- success(spriteFrame);
- });
- }
- }
- /**
- * get请求对外暴露的方法
- * @param {object} requestBody 请求body
- * @param {string} requestBody.url 请求地址
- * @param {object} requestBody.data 请求发送的data
- * @param {function} requestBody.success 请求成功的回调
- * @param {function} requestBody.fail 请求失败的回调
- */
- static httpGet(requestBody) {
- /// 如果是qq游戏那么做特殊处理
- requestBody.data = Api.baseParam(requestBody.data);
- requestBody.url = Api.requestUrl(requestBody.url);
- if (CC_QQPLAY) {
- /// 如果是get方式那么转变url
- if (requestBody.method == undefined || requestBody.method == 'GET') {
- // 将data对象直接拼接到url后面做参数
- requestBody.url = Api.urlEncode(requestBody.url, requestBody.data);
- }
- }
- if (CC_WECHATGAME) {
- Api.wxGet(requestBody);
- } else if (CC_QQPLAY) {
- Api.qqGet(requestBody);
- } else {
- Api.jsGet(requestBody);
- }
- }
- /**
- * post请求对外暴露的方法
- * @param {*} requestBody
- */
- static httpPost(requestBody) {
- if (CC_WECHATGAME) {
- requestBody.url = Api.requestUrl(requestBody.url);
- requestBody.data = Api.baseParam(requestBody.data);
- return Api.wxPost(requestBody);
- } else if (CC_QQPLAY) {
- requestBody.url = Api.qqUrlHandle(requestBody.url);
- requestBody.url = Api.requestUrl(requestBody.url);
- return Api.qqPost(requestBody);
- } else {
- requestBody.url = Api.requestUrl(requestBody.url);
- requestBody.data = Api.baseParam(requestBody.data);
- return Api.jsPost(requestBody);
- }
- }
- /// 在最后一个/前面加上/qq
- static qqUrlHandle(url) {
- let urlArr = url.split('/');
- let newUrl = '';
- let arrLen = urlArr.length;
- for (let i = 0; i < arrLen; ++i) {
- /// 如果是到了最后一个
- if (i == arrLen - 1) {
- newUrl += '/qq';
- }
- if (i == 0) {
- continue;
- }
- newUrl += '/';
- newUrl += urlArr[i];
- }
- return newUrl;
- }
- static wxGet(requestBody) {
- let onSuccess = requestBody.success;
- let onFail = requestBody.fail;
- let onComplete = requestBody.complete;
- wx.request({
- url: requestBody.url,
- data: requestBody.data,
- method: requestBody.method === undefined ? 'GET' : 'POST',
- header: requestBody.header === undefined ? {} : requestBody.header,
- success: (res) => {
- //直接处理登录失效的逻辑
- if (res.data.code === ResponseStateCode.LOGIN_INVALIDATE) {
- GameGlobal.needLogin = true;
- cc.director.loadScene('login');
- return;
- }
- if (res.data.code === ResponseStateCode.OK) {
- if (onSuccess != undefined) {
- onSuccess(res.data.data);
- }
- } else {
- if (onFail != undefined) {
- onFail(res.data.code, res.data.msg);
- }
- }
- },
- fail: (res) => {
- console.log('wxGet fail: ' + res);
- if (onFail != undefined) {
- onFail(-1, res.errMsg);
- }
- },
- complete: onComplete,
- });
- }
- static wxPost(requestBody) {
- requestBody.header = {
- "Content-Type": "application/x-www-form-urlencoded"
- };
- requestBody.method = 'POST';
- Api.wxGet(requestBody);
- }
- static qqGet(requestBody) {
- requestBody.header = {
- 'Referer': 'https://hudong.qq.com',
- 'User-Agent': 'brick-client',
- 'Content-Type': 'application/json'
- };
- let onSuccess = requestBody.success;
- let onFail = requestBody.fail;
- let data = requestBody.data;
- /// 如果是post方式
- if (data != undefined && requestBody.method == 'POST') {
- data = JSON.stringify(data);
- } else {
- data = '';
- }
- let method = requestBody.method === undefined ? 'GET' : 'POST';
- let url = requestBody.url;
- // let url = "https://test-api-taptap.duowan.com/room/reportGold1";
- BK.Http.request({
- url: url,
- body: data,
- method: method,
- headers: requestBody.header,
- success: (res) => {
- //直接处理登录失效的逻辑
- /// 如果请求成功
- if (res.statusCode === 200) {
- let bodyStr = res.text();
- let bodyObjct = JSON.parse(bodyStr);
- if (bodyObjct == undefined) {
- if (onFail != undefined) {
- onFail(res.statusCode, '请求失败');
- }
- return;
- }
- console.log('url :' + url, 'res: ' + res);
- if (bodyObjct.code === ResponseStateCode.LOGIN_INVALIDATE) {
- GameGlobal.needLogin = true;
- cc.director.loadScene('login');
- return;
- }
-
- if (bodyObjct.code === ResponseStateCode.OK) {
- if (onSuccess != undefined) {
- onSuccess(bodyObjct.data);
- }
- } else {
- if (onFail != undefined) {
- onFail(bodyObjct.code, bodyObjct.msg);
- // GameGlobal.commonAlert.showCommonErrorAlert('url' + url + ' login error code: ' + errCode + 'login error msg: ' + errMsg);
- }
- }
- } else {
- console.log('response error statusCode' + res.statusCode);
- if (onFail != undefined) {
- onFail(res.statusCode, '请求失败');
- }
- }
- },
- fail: (res) => {
- console.log('qqGet fail: ' + res, 'url : ' + url, 'res : ' + res);
- if (onFail != undefined) {
- onFail(-1, res.msg);
- }
- },
- });
-
- }
- static qqPost(requestBody) {
-
- requestBody.method = 'POST';
- /// 添加post公共参数
- requestBody.url = Api.urlEncode(requestBody.url, Api.baseParam({}));
- Api.qqGet(requestBody);
- }
- static jsGet(requestBody) {
- let url = requestBody.url;
- let data = requestBody.data;
- url = url + "?";
- for (var key in data) {
- url = url + key + '=' + data[key] + '&';
- }
- url = url.substr(0, url.length - 1)
- var xhr = Api.jsBaseRequest(requestBody.success, requestBody.fail, requestBody.complete);
- xhr.open("GET", url, true);
- xhr.send();
- }
- static jsPost(requestBody) {
- let data = requestBody.data;
- var xhr = Api.jsBaseRequest(requestBody.success, requestBody.fail, requestBody.complete);
- xhr.open("POST", requestBody.url, true);
- xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- let formData = new String();
- for (var key in data) {
- formData = formData + key + '=' + data[key] + "&";
- }
- xhr.send(formData.substr(0, formData.length - 1));
- }
- static jsBaseRequest(onSuccess, onFail, onComplete) {
- var xhr = new XMLHttpRequest();
- xhr.onreadystatechange = () => {
- if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) {
- // console.log('response:' + xhr.responseText);
- var response = JSON.parse(xhr.responseText);
- if (response.code == ResponseStateCode.OK) {
- if (onSuccess != undefined) {
- onSuccess(response.data, response.msg);
- }
- } else {
- if (onFail != undefined) {
- onFail(response.code, response.msg)
- }
- }
- if (onComplete != undefined) {
- onComplete();
- }
- }
- };
- return xhr;
- }
- /**
- * get请求对外暴露的方法
- * @param {*} requestBody
- */
- static httpGetPromise(url, data) {
- url = Api.requestUrl(url);
- data = Api.baseParam(data);
- if (CC_WECHATGAME) {
- return Api.wxGetP(url, data);
- } else if (CC_QQPLAY) {
- return Api.qqGetP(url, data);
- } else {
- return Api.jsGetP(url, data);
- }
- }
- /**
- * post请求对外暴露的方法
- * @param {*} requestBody
- */
- static httpPostPromise(url, data) {
- url = Api.requestUrl(url);
- data = Api.baseParam(data);
- if (CC_WECHATGAME) {
- return Api.wxPostP(url, data);
- } else if (CC_QQPLAY) {
- return Api.qqPostP(url, data);
- } else {
- return Api.jsPostP(url, data);
- }
- }
- static wxGetP(url, data) {
- return Api.wxRequestPromise(url, data, 'GET');
- }
- static wxPostP(url, data) {
- let header = {
- "Content-Type": "application/x-www-form-urlencoded"
- };
- return Api.wxRequestPromise(url, data, 'POST', header);
- }
- static wxRequestPromise(url, data, method, header) {
- return new Promise((resolve, reject) => {
- wx.request({
- url: url,
- data: data,
- method: method,
- headers: header === undefined ? {} : header,
- success: (res) => {
- //直接处理登录失效的逻辑
- if (res.data.code === ResponseStateCode.LOGIN_INVALIDATE) {
- GameGlobal.needLogin = true;
- cc.director.loadScene('login');
- reject(res.data);
- }
- if (res.data.code === ResponseStateCode.OK) {
- resolve(res.data);
- } else {
- reject(res.data);
- }
- },
- fail: (res) => {
- reject({
- code: -1,
- msg: '微信登录接口调用失败'
- });
- },
- complete: {},
- });
- });
- }
- static qqGetP(url, data) {
- url = Api.urlEncode(url, data);
- return Api.qqRequestPromise(url, '', 'GET');
- }
- static qqPostP(url, data) {
- if (data != null || data != undefined) {
- data = JSON.stringify(data);
- }
- return Api.qqRequestPromise(url, data, 'POST');
- }
- static qqRequestPromise(url, data, method) {
- return new Promise((resolve, reject) => {
- BK.Http.request({
- url: url,
- body: data,
- method: method,
- headers: {
- 'Content-Type': 'application/json'
- },
- success: (res) => {
- /// 如果请求成功
- console.log('url :' + url, 'res: ' + res);
- if (res.statusCode === 200) {
- let bodyStr = res.text();
- let bodyObjct = JSON.parse(bodyStr);
- if (bodyObjct.code === ResponseStateCode.LOGIN_INVALIDATE) {
- GameGlobal.needLogin = true;
- cc.director.loadScene('login');
- return;
- }
- if (bodyObjct.code === ResponseStateCode.OK) {
- resolve(bodyObjct);
- } else {
- reject({
- code: bodyObjct.code,
- msg: bodyObjct.msg
- });
- }
- } else {
- console.log('response error statusCode' + res.statusCode);
- reject({
- code: res.statusCode,
- msg: 'qq登录接口调用失败'
- });
- }
- },
- fail: (res) => {
- console.log('url :' + url, 'res: ' + res);
- reject({
- code: -1,
- msg: 'qq登录接口调用失败'
- });
- },
- // complete: {},
- });
- });
- }
- static jsGetP(url, data) {
- return new Promise((resolve, reject) => {
- url = url + "?";
- for (var key in data) {
- url = url + key + '=' + data[key] + '&';
- }
- url = url.substr(0, url.length - 1);
- var xhr = Api.jsBaseRequestP(resolve, reject);
- xhr.open("GET", url, true);
- xhr.send();
- });
- }
- static jsPostP(url, data) {
- return new Promise((resolve, reject) => {
- var xhr = Api.jsBaseRequestP(resolve, reject);
- xhr.open("POST", url, true);
- xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- let formData = new String();
- for (var key in data) {
- formData = formData + key + '=' + data[key] + "&";
- }
- xhr.send(formData.substr(0, formData.length - 1));
- });
- }
- static jsBaseRequestP(resolve, reject) {
- var xhr = new XMLHttpRequest();
- xhr.onreadystatechange = () => {
- if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) {
- // console.log('response:' + xhr.responseText);
- var response = JSON.parse(xhr.responseText);
- if (response.code == ResponseStateCode.OK) {
- resolve(response);
- } else {
- reject(response);
- }
- }
- };
- return xhr;
- }
- /**
- * 将每个接口都需要的公用参数都放到这里
- * @param target [Object] 请求参数
- */
- static baseParam(target) {
- if (target === undefined) {
- target = {};
- }
- target.thirdType = 1;
- target.channel = GameGlobal.channel;
- target.ver = GameGlobal.ver;
- target.os = GameGlobal.os;
- target.uid = GameGlobal.user ? GameGlobal.user.uid : '';
- target.token = GameGlobal.user ? GameGlobal.user.token : '';
- return target;
- }
- /**
- * 自动拼接请求接口
- * @param targetUrl [string] 请求接口
- */
- static requestUrl(targetUrl) {
- let host = GameGlobal.debug ? 'https://test-api-taptap.duowan.com' : 'https://api-taptap.duowan.com';
- // let host = GameGlobal.debug ? 'http://172.16.15.196:8888' : 'https://api-allstar.duowan.com';
- // let host = 'https://new-api-taptap.duowan.com';
- return host + targetUrl;
- }
- static setRequestBody(url, data, success, fail) {
- let requestBody = {
- url: url,
- data: data,
- success: success,
- fail: fail,
- complete: () => {
- }
- };
- return requestBody;
- }
- /// 将data对象拼接到url上做参数
- static urlEncode(url, data) {
- if(typeof(url) == 'undefined' || url == null || url == '') {
- return '';
- }
- if(typeof(data) == 'undefined' || data == null || typeof(data) != 'object') {
- return '';
- }
- url += (url.indexOf("?") != -1) ? "" : "?";
- for(var k in data) {
- url += ((url.indexOf("=") != -1) ? "&" : "") + k + "=" + encodeURI(data[k]);
- }
- return url;
- }
- }
- module.exports = Api;
|