Commit f76f173b7043b62a68f9292d2cea122219140a95

Authored by 宋庆平
1 parent e682ab1b

X

sdk/Analytics.ts
1   -import { LogLevel } from "../wxsdk/service/LogService";
2   -import WXSDK from "../wxsdk/WXSDK";
  1 +import TAMgr from "../../framework/ta/TAMgr";
  2 +import { SDKLogLevel } from "../../framework/wxsdk/service/LogService";
  3 +import WXSDK from "../../framework/wxsdk/WXSDK";
  4 +
3 5  
4 6  
5 7 export class Analytics {
6 8 private static _instance: Analytics;
7   - private systemType: number
  9 + private systemType: number;
8 10 static get I(): Analytics {
9 11 return this._instance || (this._instance = new Analytics);
10 12 }
... ... @@ -20,8 +22,14 @@ export class Analytics {
20 22  
21 23 // 游戏打点
22 24 dot(dot_type: string, data: any = {}) {
23   - if (typeof wx == 'undefined') return
24   - // wx.aldSendEvent(dot_type, data); //阿拉丁打点,没需求注释即可
  25 + if (typeof wx == 'undefined'&&typeof my == 'undefined') {
  26 + console.log("dot", dot_type, data);
  27 + return
  28 + }
  29 + // 数数
  30 + if (['receive_reward', 'button','merge_item','addToTempStore','talk','fund','mail','milktea','mail','activity_welcome','activity_raffle','activity_bp','piggy','invite','apple_tree','energy_cost','gem_cost','gold_cost','dress_cost','gem_output','gold_output','energy_output','exp_output','dress_output'].indexOf(dot_type) == -1) {// 排除部分key
  31 + TAMgr.Ins.dot(dot_type, data);
  32 + }
25 33 return WXSDK.stat.dot(dot_type, data);
26 34 }
27 35  
... ... @@ -82,7 +90,7 @@ export class Analytics {
82 90 * @param level 日志等级
83 91 * @returns
84 92 */
85   - clientLog(content, level = LogLevel.debug) {
  93 + clientLog(content, level = SDKLogLevel.debug) {
86 94 return WXSDK.stat.clientLog(content, level)
87 95 }
88 96 /**
... ... @@ -109,11 +117,4 @@ export class Analytics {
109 117 }
110 118  
111 119  
112   -}
113   -export enum EventKey {
114   - toggleScene = 'toggleScene',
115   - recoverGame = 'recoverGame',
116   - replayGame = 'replayGame',
117   - settingClose = 'settingClose',
118   - updateLvUI = 'updateLvUI',
119   -}
  120 +}
120 121 \ No newline at end of file
... ...
sdk/GameServicePlus.ts 0 → 100644
... ... @@ -0,0 +1,377 @@
  1 +import DataService from "../../framework/wxsdk/service/DataService";
  2 +import GameService from "../../framework/wxsdk/service/GameService";
  3 +import WxPay from "../../framework/wxsdk/wx/WxPay";
  4 +import SDKApiPlus from "./SDKApiPlus";
  5 +
  6 +
  7 +
  8 +export default class GameServicePlus extends GameService {
  9 + memberSave(content: string, params: any = {}) {
  10 + return SDKApiPlus.memberSave({ uid: DataService.I.UserId, token: DataService.I.Token, content, ...params });
  11 + }
  12 +
  13 + memberGet() {
  14 + return SDKApiPlus.memberGet({ uid: DataService.I.UserId, token: DataService.I.Token });
  15 + }
  16 + memberSesetAup() {
  17 + return SDKApiPlus.memberSesetAup({ uid: DataService.I.UserId, token: DataService.I.Token });
  18 + }
  19 +
  20 + memberClear() {
  21 + return SDKApiPlus.memberClear({ uid: DataService.I.UserId, token: DataService.I.Token });
  22 + }
  23 +
  24 + getGameNotice() {
  25 + return SDKApiPlus.notice();
  26 + }
  27 +
  28 + mail() {
  29 + return SDKApiPlus.mail({ uid: DataService.I.UserId, token: DataService.I.Token });
  30 + }
  31 +
  32 + /**
  33 + * 改变邮件状态
  34 + * @param id id为0或不传id时为 一键领取、一键删除
  35 + * @param status 1已读 2领取 3删除。如同时修改多个状态格式:1,2
  36 + * @returns
  37 + */
  38 + updateMailStatus(id: number, status: string) {
  39 + return SDKApiPlus.mailStatus({ id, status, uid: DataService.I.UserId, token: DataService.I.Token });
  40 + }
  41 +
  42 + getQRcode() {
  43 + return SDKApiPlus.QRcode();
  44 + }
  45 +
  46 + convertCDkey(cdkey: string) {
  47 + return SDKApiPlus.cdkey({ uid: DataService.I.UserId, token: DataService.I.Token, cdkey: cdkey });
  48 + }
  49 +
  50 + clearData() {
  51 + return SDKApiPlus.clearData({ uid: DataService.I.UserId, token: DataService.I.Token });
  52 + }
  53 +
  54 + goodsList() {
  55 + return SDKApiPlus.goodsList({ uid: DataService.I.UserId, token: DataService.I.Token });
  56 + }
  57 +
  58 + createOrder(goodid: string) {
  59 + return SDKApiPlus.createOrder({ uid: DataService.I.UserId, token: DataService.I.Token, goodid });
  60 + }
  61 +
  62 + queryOrder(no: string) {
  63 + return SDKApiPlus.queryOrder({ uid: DataService.I.UserId, token: DataService.I.Token, no });
  64 + }
  65 +
  66 + confirmOrder(no: string) {
  67 + return SDKApiPlus.confirmOrder({ uid: DataService.I.UserId, token: DataService.I.Token, no });
  68 + }
  69 +
  70 + /**
  71 + * 支付
  72 + * @param params
  73 + * @param opts
  74 + * @returns
  75 + */
  76 + pay(params: { payid: string, goodid: string, money: number; orderid: string }, opts: any = {}) {
  77 + return WxPay.I.pay(params, opts);
  78 + }
  79 + /**
  80 + * 订单查询
  81 + */
  82 + orderQuery(source) {
  83 + return SDKApiPlus.orderQuery({
  84 + ...this.buildParams(),
  85 + source
  86 + });
  87 + }
  88 + /**
  89 + * 订单查询
  90 + */
  91 + preorder(goodid: string, orderid: string) {
  92 + return SDKApiPlus.preorder({
  93 + ...this.buildParams2(),
  94 + token: DataService.I.Token,
  95 + goodid, orderid
  96 + });
  97 + }
  98 +
  99 + /**
  100 + * 获取玩家历史存档
  101 + * @param uid
  102 + * @param token
  103 + */
  104 + getUserHistory(uid: string, token: string) {
  105 + return SDKApiPlus.getUserHistory({ uid: uid, token: token });
  106 + }
  107 +
  108 + /**
  109 + * 获取玩家历史存档
  110 + * @param data //需要包含uid,token
  111 + */
  112 + saveUserHistory(data: any) {
  113 + return SDKApiPlus.saveUserHistory(data);
  114 + }
  115 +
  116 + /**
  117 + * 重置GM标识
  118 + */
  119 + setAup(typ: number = 0) {
  120 + return SDKApiPlus.setAup({ uid: DataService.I.UserId, token: DataService.I.Token, typ });
  121 + }
  122 +
  123 + /**
  124 + * 获取分享图片
  125 + * @param items 2,1,0|3,1,1|3,1,1|3,1,1|3,1,1格式:2,1,0(类型,id,领取状态)领取状态:1已领取0未领取
  126 + * @param zoom 图片缩放比例
  127 + * @returns
  128 + */
  129 + getShareImage(items: string, zoom: number = 1) {
  130 + return SDKApiPlus.getShareImg({ uid: DataService.I.UserId, token: DataService.I.Token, items, zoom });
  131 + }
  132 +
  133 + /**
  134 + * 获取我的今日分享
  135 + * @param refresh 是否刷新
  136 + */
  137 + getShare(refresh?: number) {
  138 + let req = { uid: DataService.I.UserId, token: DataService.I.Token };
  139 + if (refresh) {
  140 + req['refresh'] = refresh;
  141 + }
  142 + return SDKApiPlus.getShare(req);
  143 + }
  144 +
  145 + /**
  146 + * 获取好友分享详情
  147 + * @param id 分享id
  148 + * @param date 分享日期 格式:20220524
  149 + */
  150 + getShareInfo(id: number, date: string) {
  151 + return SDKApiPlus.getShareInfo({ uid: DataService.I.UserId, token: DataService.I.Token, id, date });
  152 + }
  153 +
  154 + /**
  155 + * 领取好友分享
  156 + * @param id 分享id
  157 + * @param date 分享日期 格式:20220524
  158 + * @param itemid 分享选项ID
  159 + */
  160 + getShareReward(id: number, date: string, itemid: number) {
  161 + return SDKApiPlus.receiveShare({ uid: DataService.I.UserId, token: DataService.I.Token, id, date, itemid });
  162 + }
  163 +
  164 + /**
  165 + * 领取额外进度奖励
  166 + * @param id 分享id
  167 + * @param date 分享日期 格式:20220524
  168 + */
  169 + getProgressReward(id: number, date: string) {
  170 + return SDKApiPlus.getProgressReward({ uid: DataService.I.UserId, token: DataService.I.Token, id, date });
  171 + }
  172 +
  173 + saveStory(key: string, data: string) {
  174 + // return SDKApiPlus.saveStory({
  175 + // id: UserManager.I.curStory.id,
  176 + // lv: UserManager.I.curStory.lv,
  177 + // fbid: UserManager.I.curStory.fbid,
  178 + // fbindex: UserManager.I.curStory.fbindex,
  179 + // data,
  180 + // uid: DataService.I.UserId,
  181 + // token: DataService.I.Token,
  182 + // });
  183 + }
  184 +
  185 + /**
  186 + * 我的邀请详情
  187 + * @returns
  188 + */
  189 + getInviteInfo() {
  190 + return SDKApiPlus.getInviteInfo({ uid: DataService.I.UserId, token: DataService.I.Token });
  191 + }
  192 +
  193 + /**
  194 + * 领取邀请奖励
  195 + * @param id 挡位id
  196 + */
  197 + receiveInvite(id: number) {
  198 + return SDKApiPlus.receiveInvite({ uid: DataService.I.UserId, token: DataService.I.Token, id });
  199 + }
  200 +
  201 + /**
  202 + * 心跳
  203 + */
  204 + beatheart() {
  205 + return SDKApiPlus.heartbeat({ uid: DataService.I.UserId, token: DataService.I.Token });
  206 + }
  207 + /**
  208 + * 周卡/月卡列表
  209 + */
  210 + recCardList() {
  211 + return SDKApiPlus.recCardList({ uid: DataService.I.UserId, token: DataService.I.Token });
  212 + }
  213 +
  214 + /**
  215 + * 领取周卡/月卡奖励
  216 + * @param typ 第几天 week周 month月
  217 + */
  218 + recCardReward(typ: string) {
  219 + return SDKApiPlus.recCardReward({ uid: DataService.I.UserId, token: DataService.I.Token, typ });
  220 + }
  221 +
  222 + /**
  223 + * 领取基金列表
  224 + */
  225 + recGrowthList() {
  226 + return SDKApiPlus.recGrowthList({ uid: DataService.I.UserId, token: DataService.I.Token });
  227 + }
  228 +
  229 + /**
  230 + * 领取基金列表
  231 + * @param goodid 购买的基金商品ID
  232 + * @param level 等级
  233 + */
  234 + recGrowthReward(goodid: string, level: number) {
  235 + return SDKApiPlus.recGrowthReward({ uid: DataService.I.UserId, token: DataService.I.Token, goodid, level });
  236 + }
  237 +
  238 + /**
  239 + * 获取无尽礼包数据
  240 + */
  241 + recEndlessList(groupId: string) {
  242 + return SDKApiPlus.recEndlessList({ uid: DataService.I.UserId, token: DataService.I.Token, group_id: groupId });
  243 + }
  244 +
  245 + /**
  246 + * 领取无尽礼包
  247 + */
  248 + recEndlessReward(groupId: string, id: string, date: string) {
  249 + return SDKApiPlus.recEndlessReward({ uid: DataService.I.UserId, token: DataService.I.Token, group_id: groupId, id, date });
  250 + }
  251 +
  252 + /**
  253 + * 获取新手礼包数据
  254 + */
  255 + getNewbieGiftData() {
  256 + return SDKApiPlus.getNewbieGiftData({ uid: DataService.I.UserId, token: DataService.I.Token });
  257 + }
  258 +
  259 + /**
  260 + * 领取新手礼包
  261 + * @param days 第几天
  262 + */
  263 + recNewbieGift(days: string) {
  264 + return SDKApiPlus.recNewbieGift({ uid: DataService.I.UserId, token: DataService.I.Token, days });
  265 + }
  266 +
  267 +
  268 + /**
  269 + * 订阅消息
  270 + * @param tmplId 订阅ID
  271 + * @param message 订阅内容
  272 + * @param sendtime 订阅发送时间s二选一参数
  273 + * @param times 订阅延迟时间s二选一参数
  274 + * @param status 1取消以前相同模板信息,默认为0不取消
  275 + */
  276 + async sendSubScribe(tmplId: string, message: string, sendtime: number, times: number = 0, status: number = 1) {
  277 + let uid = +DataService.I.UserId;
  278 + let token = DataService.I.Token + '';
  279 + let openid = DataService.I.OpenId + '';
  280 +
  281 + let data = {
  282 + uid,
  283 + token,
  284 + openid,
  285 + status,
  286 + message: encodeURIComponent(message),
  287 + temid: tmplId
  288 + };
  289 + if (times) {
  290 + data["times"] = times;
  291 + } else {
  292 + data["sendtime"] = Math.floor(sendtime);
  293 + }
  294 + let back = await SDKApiPlus.sendsubscribe(data)
  295 + return back;
  296 + }
  297 +
  298 +
  299 + /**
  300 + * 取消订阅消息
  301 + * @param tmplId 订阅ID
  302 + */
  303 + async cancelSubscribe(tmplId: string) {
  304 + let uid = +DataService.I.UserId;
  305 + let token = DataService.I.Token + '';
  306 + let openid = DataService.I.OpenId + '';
  307 +
  308 + let data = {
  309 + uid,
  310 + token,
  311 + openid,
  312 + temid: tmplId
  313 + };
  314 + let back = await SDKApiPlus.cancelSubscribe(data)
  315 + return back;
  316 + }
  317 + /**
  318 + * 自定义活动
  319 + * @param id 活动ID(后台的ID)
  320 + */
  321 + activityCustom(id?: string) {
  322 + return SDKApiPlus.activityCustom({ id });
  323 + }
  324 +
  325 + /**
  326 + * 添加排行榜
  327 + * @param typ 游戏端自定义排行标识
  328 + * @param fraction 分数 如果上报的分数小于以前上报的分数,则不会更新
  329 + * @param rankData 扩展字段
  330 + * @returns
  331 + */
  332 + rankAddV2(typ: string, fraction: number, rankData?: string) {
  333 + return SDKApiPlus.rankAddV2({ typ, fraction, rankData, uid: DataService.I.UserId, token: DataService.I.Token });
  334 + }
  335 + /**
  336 + * 排行榜列表
  337 + * @param percent percent等于1 的时候会返回排行榜总人数和自己的当前排名
  338 + */
  339 + rankListV2(typ: string, percent: number = 0) {
  340 + return SDKApiPlus.rankListV2({ typ, percent, uid: DataService.I.UserId, token: DataService.I.Token });
  341 + }
  342 + /**
  343 + * 活动排行榜配置
  344 + * @param name 游戏端自定义排行标识
  345 + */
  346 + activityRankConfig(name: string) {
  347 + return SDKApiPlus.activityRankConfig({ name, uid: DataService.I.UserId, token: DataService.I.Token });
  348 + }
  349 + /**
  350 + * 活动排行榜添加分数
  351 + * @param name 游戏端自定义排行标识
  352 + * @param score 分数
  353 + * @param extend 扩展
  354 + */
  355 + activityRankAdd(name: string, score: number, extend: string) {
  356 + return SDKApiPlus.activityRankAdd({ name, score, extend, uid: DataService.I.UserId, token: DataService.I.Token });
  357 + }
  358 + /**
  359 + * 活动排行榜
  360 + * @param name 游戏端自定义排行标识
  361 + */
  362 + activityRankList(name: string) {
  363 + return SDKApiPlus.activityRankList({ name, uid: DataService.I.UserId, token: DataService.I.Token });
  364 + }
  365 + /**
  366 + * 活动排行榜奖励
  367 + * @param name 游戏端自定义排行标识
  368 + */
  369 + activityRankReward(name: string) {
  370 + return SDKApiPlus.activityRankReward({ name, uid: DataService.I.UserId, token: DataService.I.Token });
  371 + }
  372 +
  373 + static instance: GameServicePlus;
  374 + static get I(): GameServicePlus {
  375 + return this.instance || (this.instance = new GameServicePlus());
  376 + }
  377 +}
0 378 \ No newline at end of file
... ...
sdk/Ge.ts 0 → 100644
... ... @@ -0,0 +1,50 @@
  1 +import { sys } from "cc";
  2 +import { GAMEDATA } from "../../framework/wxsdk/base/SDKConst";
  3 +import { SDKToolsPlus } from "./SDKToolsPlus";
  4 +
  5 +
  6 +
  7 +export class Ge {
  8 + private static _instance: GravityAnalyticsAPI;
  9 + static get I(): GravityAnalyticsAPI {
  10 + return this._instance;
  11 + }
  12 + constructor() {
  13 + }
  14 +
  15 + public static init() {
  16 + // console.log("ge初始化")
  17 + const config = {
  18 + accessToken: "ihcpiWLHTqDs5oZEGsnyxCrFXBaSeoju", // 项目通行证,在:网站后台-->管理中心-->应用列表中找到Access Token列 复制(首次使用可能需要先新增应用)
  19 + clientId: SDKToolsPlus.openId, // 用户唯一标识,如微信小程序的openid
  20 + autoTrack: {
  21 + appLaunch: true, // 自动采集 $MPLaunch
  22 + appShow: true, // 自动采集 $MPShow
  23 + appHide: true, // 自动采集 $MPHide
  24 + },
  25 + name: "ge", // 全局变量名称
  26 + // debugMode: "debug", // 是否开启测试模式,开启测试模式后,可以在 网站后台--管理中心--元数据--事件流中查看实时数据上报结果。(测试时使用,上线之后一定要关掉,改成none或者删除)
  27 + };
  28 + let ge = new GravityAnalyticsAPI(config);
  29 + ge.init();
  30 + let isFirst = sys.localStorage.getItem('tt_register');
  31 + if (!isFirst) {
  32 + // 首次注册
  33 + let arr = GAMEDATA.version.split(".");
  34 + let version = +(arr[0] + arr[1] + arr[2]);
  35 + ge.register({
  36 + name: SDKToolsPlus.uid,
  37 + version,
  38 + wx_openid: SDKToolsPlus.openId,
  39 + wx_unionid: "",
  40 + }).then((success) => {
  41 + // console.log("注册成功", success);
  42 + sys.localStorage.setItem('tt_register', "1")
  43 + }).catch((fail) => {
  44 + // console.error("注册失败", fail)
  45 + })
  46 + }
  47 + this._instance = ge;
  48 + }
  49 +
  50 +}
0 51 \ No newline at end of file
... ...
sdk/SDKApiPlus.ts 0 → 100644
... ... @@ -0,0 +1,144 @@
  1 +import { SDKApi } from "../../framework/wxsdk/http/SDKApi";
  2 +import DataService from "../../framework/wxsdk/service/DataService";
  3 +import SDKHttpPlus from "./SDKHttpPlus";
  4 +
  5 +export default class SDKApiPlus extends SDKApi {
  6 + //公告
  7 + public static notice = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.notice, ...args);
  8 + //订阅
  9 + public static sendsubscribe = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.sendsubscribe, ...args);
  10 + //取消订阅
  11 + public static cancelSubscribe = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.cancelSubscribe, ...args);
  12 + //邮件
  13 + public static mail = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.mail, ...args);
  14 + //邮件状态修改
  15 + public static mailStatus = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.mailStatus, ...args);
  16 + //群二维码
  17 + public static QRcode = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.QRcode, ...args);
  18 + //兑换码
  19 + public static cdkey = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.cdkey, ...args);
  20 + //删除存档
  21 + public static clearData = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.clearData, ...args);
  22 + //商品列表
  23 + public static goodsList = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.goodsList, ...args);
  24 + //生成订单
  25 + public static createOrder = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.createOrder, ...args);
  26 + //查询订单
  27 + public static queryOrder = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.queryOrder, ...args);
  28 + //确认订单
  29 + public static confirmOrder = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.confirmOrder, ...args);
  30 + //重置GM标识
  31 + public static setAup = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.setAup, ...args);
  32 + //获取分享图片
  33 + public static getShareImg = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getShareImg, ...args);
  34 + //获取今日分享
  35 + public static getShare = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getShare, ...args);
  36 + //获取分享信息
  37 + public static getShareInfo = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getShreInfo, ...args);
  38 + //领取好友分享
  39 + public static receiveShare = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.receiveShare, ...args);
  40 + //领取分享额外奖励
  41 + public static getProgressReward = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getProgressReward, ...args);
  42 + //保存副本
  43 + public static saveStory = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.saveStory, ...args);
  44 + //我的邀请详情
  45 + public static getInviteInfo = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getInviteInfo, ...args);
  46 + //领取邀请奖励
  47 + public static receiveInvite = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.receiveInvite, ...args);
  48 +
  49 + // 保存用户数据
  50 + public static memberSave = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.memberSave, ...args);
  51 + // 获取用户数据
  52 + public static memberGet = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.memberGet, ...args);
  53 + // 重置修改标识
  54 + public static memberSesetAup = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.memberSesetAup, ...args);
  55 + // 清除用户数据
  56 + public static memberClear = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.memberClear, ...args);
  57 + //心跳
  58 + public static heartbeat = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.memberXT, ...args);
  59 + //自定义活动
  60 + public static activityCustom = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.activityCustom, ...args);
  61 + public static rankAddV2 = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.rankAddV2, ...args);
  62 + public static rankListV2 = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.rankListV2, ...args);
  63 +
  64 + //周卡/月卡列表
  65 + public static recCardList = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recCardList, ...args);
  66 + //领取周卡/月卡奖励
  67 + public static recCardReward = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recCardReward, ...args);
  68 + //领取基金列表
  69 + public static recGrowthList = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recGrowthList, ...args);
  70 + //领取基金奖励
  71 + public static recGrowthReward = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recGrowthReward, ...args);
  72 + //获取无尽礼包数据
  73 + public static recEndlessList = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recEndlessList, ...args);
  74 + //领取无尽礼包
  75 + public static recEndlessReward = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recEndlessReward, ...args);
  76 + //获取新手礼包数据
  77 + public static getNewbieGiftData = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.getNewbieGiftData, ...args);
  78 + //领取新手礼包
  79 + public static recNewbieGift = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.recNewbieGift, ...args);
  80 +
  81 + // 活动排行榜相关
  82 + public static activityRankConfig = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.activityRankConfig, ...args);
  83 + public static activityRankAdd = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.activityRankAdd, ...args);
  84 + public static activityRankList = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.activityRankList, ...args);
  85 + public static activityRankReward = (...args) => SDKHttpPlus.httpPost(DataService.I.GameApi, HostKeysPlus.activityRankReward, ...args);
  86 +
  87 + //后台
  88 + public static getUserHistory = (...args) => SDKHttpPlus.backPost(DataService.I.GMApi, HostKeysPlus.getUserHistory, ...args);
  89 + public static saveUserHistory = (...args) => SDKHttpPlus.backPost(DataService.I.GMApi, HostKeysPlus.saveUserHistory, ...args);
  90 +}
  91 +
  92 +
  93 +export const HostKeysPlus = {
  94 + sendsubscribe: 'api/subscribe/event', //订阅
  95 + cancelSubscribe: 'api/subscribe/event/cancel', //取消订阅
  96 + notice: 'mods/notice/list', //公告
  97 + mail: 'mods/mail/list', //邮件
  98 + mailStatus: '/mods/mail/status/u', //修改邮件状态
  99 + QRcode: 'game/merge/system', //群二维码
  100 + cdkey: 'game/merge/cdkey', //兑换CDkey
  101 + clearData: 'game/merge/clear', //删除存档
  102 + goodsList: 'game/merge/goodslist', //商品列表
  103 + createOrder: 'game/merge/order/create', //生成订单
  104 + queryOrder: 'game/merge/order/query', //查询订单
  105 + confirmOrder: 'game/merge/order/give', //确认订单
  106 + setAup: 'game/merge/aup', //重置GM标识
  107 + getShareImg: 'game/merge/share/getimg', //分享图片
  108 + getShare: 'game/merge/share/get', //获取今日分享(自己的)
  109 + getShreInfo: 'game/merge/share/info', //获取分享详情(别人的)
  110 + receiveShare: 'game/merge/share/receive', //领取分享奖励
  111 + getProgressReward: 'game/merge/share/reward/progress', //获取分享奖励
  112 + saveStory: 'game/merge/cp/save', //保存副本
  113 + getInviteInfo: 'api/member/invite/info', //获取邀请信息
  114 + receiveInvite: 'api/member/invite/receive', //领取邀请奖励
  115 +
  116 + memberSave: 'yueliangdao/member/save', //存用户数据
  117 + memberGet: 'yueliangdao/member/get', //取用户数据
  118 + memberSesetAup: 'yueliangdao/member/reset/aup', //重置修改标识
  119 + memberClear: '3ad7e4ab92ae2249/member/clear', //清除用户数据 4.11改
  120 + memberXT: 'yueliangdao/member/xt', //心跳
  121 + activityCustom: 'mods/activity/custom', //自定义活动
  122 + rankListV2: 'mods/rank/permanent/list', //排行榜2023-4-24
  123 + rankAddV2: 'mods/rank/permanent/add', //更新排行榜2023-4-24
  124 +
  125 +
  126 + recCardList: '3ad7e4ab92ae2249/member/ship/info', //周卡/月卡列表
  127 + recCardReward: '3ad7e4ab92ae2249/member/ship/draw', //领取周卡/月卡奖励
  128 + recGrowthList: 'game/merge/growth/list', //领取基金列表
  129 + recGrowthReward: 'game/merge/growth/rec', //领取基金奖励
  130 + recEndlessList: '3ad7e4ab92ae2249/egift/show', //获取无尽礼包数据
  131 + recEndlessReward: '3ad7e4ab92ae2249/egift/draw', //领取无尽礼包
  132 + getNewbieGiftData: '3ad7e4ab92ae2249/novice/list', //获取新手礼包数据
  133 + recNewbieGift: '3ad7e4ab92ae2249/novice/draw', //领取新手礼包
  134 +
  135 + activityRankConfig: 'yueliangdao/activities/rank/config', //活动排行榜配置
  136 + activityRankAdd: 'yueliangdao/activities/rank/add', //活动排行榜添加分数
  137 + activityRankList: 'yueliangdao/activities/rank/top', //活动排行榜
  138 + activityRankReward: 'yueliangdao/activities/rank/draw', //活动排行榜奖励
  139 +
  140 +
  141 + //后台
  142 + getUserHistory: 'index/merge/history.html', //获取用户历史存档
  143 + saveUserHistory: 'index/merge/setdata.html', //覆盖用户数据
  144 +}
... ...
sdk/SDKHttpPlus.ts 0 → 100644
... ... @@ -0,0 +1,139 @@
  1 +import { DEBUG } from "cc/env";
  2 +import { GAMEDATA, sdkEnv } from "../../framework/wxsdk/base/SDKConst";
  3 +import SDKHttp from "../../framework/wxsdk/http/SDKHttp";
  4 +import { WxHelper } from "./WxHelper";
  5 +import LogService from "../../framework/wxsdk/service/LogService";
  6 +import DataService from "../../framework/wxsdk/service/DataService";
  7 +
  8 +sdkEnv.isDebug = DEBUG;
  9 +export default class SDKHttpPlus extends SDKHttp {
  10 +
  11 + public static async backRequest(url: string, method: string, data?: any, dataType: "json" | "string" = "json") {
  12 + return new Promise<IResult<any>>((resolve, reject) => {
  13 + data = {
  14 + ...data,
  15 + gameid: GAMEDATA.game_id,
  16 + }
  17 +
  18 + if (data && typeof data === "object") {
  19 + data = JSON.stringify(data);
  20 + }
  21 + data = data || "";
  22 + if (method == "GET" && data != "") {
  23 + data = JSON.parse(data);
  24 + let str = ''
  25 + for (let key in data) {
  26 + str = str + `${key}` + '=' + `${data[key]}&`
  27 + }
  28 + url += "?" + str;
  29 + data = "";
  30 + }
  31 + // let info = "[url:" + url + ", data:" + data + "]";
  32 + // console.error("info", info)
  33 + let xhr = new XMLHttpRequest();
  34 + xhr.onreadystatechange = function () {
  35 + if (xhr.readyState == 4) {
  36 + if (xhr.status >= 200 && xhr.status < 400) {
  37 + let responseText: any = xhr.responseText;
  38 + // cc.log("responseText", responseText)
  39 + try {
  40 + responseText = JSON.parse(responseText);
  41 + // cc.log("responseText22", responseText)
  42 + if (url.indexOf('.json') > -1) {
  43 + resolve({ code: 0, data: responseText, msg: responseText.msg });
  44 + } else {
  45 + resolve({ code: +responseText.code, data: responseText.data, msg: responseText.msg });
  46 + }
  47 + return
  48 + } catch (ex) {
  49 + // console.error("httpRequest[parseError]:responseText=" + xhr.responseText);
  50 + resolve({ msg: "JSON parse error:" + ex.message, code: -1 });
  51 + return;
  52 + }
  53 + } else {
  54 + console.error(xhr.status, '网络请求失败!');
  55 + resolve({ code: -2 });
  56 + }
  57 + }
  58 + };
  59 +
  60 + xhr.ontimeout = function (info): void {
  61 + console.error("info1", info)
  62 + resolve({ msg: `请求超时!`, code: -3 });
  63 + }
  64 + xhr.onerror = function (info): void {
  65 + console.error("info2", info)
  66 + resolve({ msg: `请求失败!`, code: -4 });
  67 + }
  68 + xhr.onabort = function (info): void {
  69 + console.error("info3", info)
  70 + resolve({ msg: `请求关闭!`, code: -5 });
  71 + }
  72 +
  73 + xhr.timeout = 30000;
  74 + xhr.open(method, url, true);
  75 +
  76 + if (method == "POST") {
  77 + xhr.setRequestHeader("Content-Type", "application/json;charset=utf-8")//application/x-www-form-urlencoded
  78 + // if (cc.sys.os === 'Android') {
  79 + // cc.error("http__uid", AppSdkData.I.uid);
  80 + // xhr.setRequestHeader('Uuid', `${AppSdkData.I.uid}`);
  81 + // } else {
  82 + // xhr.setRequestHeader('Uuid', `909`);
  83 + // }
  84 +
  85 + }
  86 + console.log("data", data)
  87 + xhr.send(data);
  88 + });
  89 + }
  90 +
  91 + public static async backGet(baseUrl: string, url: string, data?: any, dataType: "json" | "string" = "json") {
  92 + if (this.withMock(url)) {
  93 + return this.mockData(url);
  94 + }
  95 +
  96 + url = baseUrl + url;
  97 + return this.backRequest(url, "GET", data, dataType);
  98 + }
  99 +
  100 + public static backPost(baseUrl: string, url: string, data?: any, dataType: "json" | "string" = "json") {
  101 + if (this.withMock(url)) {
  102 + return this.mockData(url);
  103 + }
  104 +
  105 + url = baseUrl + url;
  106 + return this.backRequest(url, "POST", data, dataType);
  107 + }
  108 +}
  109 +
  110 +SDKHttp.onErrorResponse = async function (data: any) {
  111 + console.log("onErrorResponse", data)
  112 + if (data.code > 0) {
  113 + LogService.I.dot("errCode", { form: data.code + "_" + DataService.I?.Data?.userId })
  114 + } else {
  115 + LogService.I.dot("errCode", { form: data.code })
  116 + }
  117 + if (data.code == 1008) {
  118 + let ret = await WxHelper.showModal({
  119 + title: '登录验证失败,请重新登录',
  120 + content: data.msg,
  121 + showCancel: false,
  122 + confirmText: '重启'
  123 + })
  124 + if (ret) {
  125 + WxHelper.restartMiniProgram();
  126 + }
  127 + }
  128 + if (data.code == 1011000) {
  129 + let ret = await WxHelper.showModal({
  130 + title: '数据被修改',
  131 + content: data.msg,
  132 + showCancel: false,
  133 + confirmText: '重启'
  134 + })
  135 + if (ret) {
  136 + WxHelper.restartMiniProgram();
  137 + }
  138 + }
  139 +};
0 140 \ No newline at end of file
... ...
sdk/SDKTools.ts
1   -import { GAMEDATA } from "../wxsdk/base/SDKConst";
2   -import DateUtils from "../wxsdk/utils/DateUtils";
3   -import WXSDK from "../wxsdk/WXSDK";
  1 +import { GAMEDATA } from "../../framework/wxsdk/base/SDKConst";
  2 +import DateUtils from "../../framework/wxsdk/utils/DateUtils";
  3 +import WXSDK from "../../framework/wxsdk/WXSDK";
  4 +
4 5  
5 6 /*
6 7 * SDK工具类库;
... ... @@ -9,6 +10,9 @@ export class SDKTools {
9 10 static get isWx() {
10 11 return typeof wx !== 'undefined';
11 12 }
  13 + static get isZfb() {
  14 + return typeof my !== 'undefined';
  15 + }
12 16 static get isSupported() {
13 17 return typeof WXSDK === 'object';
14 18 }
... ... @@ -79,7 +83,7 @@ export class SDKTools {
79 83 * isOff:是否关闭默认显示banner
80 84 * }
81 85 */
82   - static createBanner(adUnitId: string = GAMEDATA.bannerId, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean }) {
  86 + static createBanner(adUnitId: string = GAMEDATA.bannerId, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean ,isCreate?:boolean}) {
83 87 if (!this.isWx) return
84 88 return WXSDK.ad.createBanner(adUnitId, opts);
85 89 }
... ... @@ -163,11 +167,12 @@ export class SDKTools {
163 167 /**
164 168 * 订阅
165 169 * @param template_ids 模板id eg['aaaaaaa','bbbbbbb']
166   - * @param ids 对应后台的id eg:['1','2']
  170 + * @param success 成功回调
  171 + * @param fail 失败回调
167 172 */
168   - static subScribe(template_ids: Array<string>, ids: Array<string>) {
169   - if (!this.isWx) return
170   - return WXSDK.game.subScribe(template_ids, ids)
  173 + static subScribe(template_ids: Array<string>, success: Function, fail: Function) {
  174 + if (!window['wx']) return;
  175 + return WXSDK.game.subScribe(template_ids, success, fail);
171 176 }
172 177  
173 178 /**
... ... @@ -348,6 +353,7 @@ export class SDKTools {
348 353 static checkmsg(scene: number, content: string, nickname?: string, title?: string, signature?: string) {
349 354 return WXSDK.game.checkmsg(scene, content, nickname, title, signature)
350 355 }
  356 +
351 357 /**
352 358 * 修改用户头像昵称
353 359 */
... ... @@ -355,6 +361,7 @@ export class SDKTools {
355 361 return WXSDK.game.updateNickname(nickname, headurl)
356 362 }
357 363  
  364 +
358 365 }
359 366  
360 367 /**
... ...
sdk/SDKToolsPlus.ts 0 → 100644
... ... @@ -0,0 +1,420 @@
  1 +import { sys } from "cc";
  2 +import { EventCenter } from "../../framework/core/utils/EventCenter";
  3 +import { EnvCode } from "../../framework/wxsdk/base/SDKEnum";
  4 +import DataService from "../../framework/wxsdk/service/DataService";
  5 +import { GameEvent } from "../../game/const/GameEvent";
  6 +import GameServicePlus from "./GameServicePlus";
  7 +import { SDKTools } from "./SDKTools";
  8 +
  9 +export class ServerError {
  10 + private static _errors = {
  11 + "0": { msg: "成功", desc: "接口调用成功" },
  12 + "1000": { msg: "操作失败", desc: "检查Hermes后台配置是否正确" },
  13 + "1001": { msg: "未知错误", desc: "联系开发人员排查错误" },
  14 + "1002": { msg: "参数错误", desc: "请参照接口文档对比参数和参数类型是否正确" },
  15 + "1003": { msg: "签名错误", desc: "检查appkey跟后台是否对应" },
  16 + "1004": { msg: "数据不存在", desc: "查询的数据不存在等" },
  17 + "1005": { msg: "解析参数失败,请检查参数合法性", desc: "参数中是否有危险字符,比如SQL注入等" },
  18 + "4500": { msg: "商品不存在", desc: "检查Hermes后台配置是否正确" },
  19 + "4501": { msg: "订单未支付", desc: "" },
  20 + "4502": { msg: "不能重复发放", desc: "" },
  21 + "4503": { msg: "兑换码不存在", desc: " " },
  22 + "4504": { msg: "兑换码不在有效期内", desc: " " },
  23 + "4505": { msg: "兑换码已失效", desc: " " },
  24 + "4506": { msg: "iv error", desc: "防止用户本地修改数据" },
  25 + "4507": { msg: "数据被修改", desc: "用户数据被GM工具修改,需重新登录重置" },
  26 + "4508": { msg: "此商品已达到最大购买限制", desc: "限购" },
  27 + "4509": { msg: "没有上传文件", desc: "检查文件name属性是否正确" },
  28 + "4510": { msg: "文件超出最大限制", desc: "最大1M" },
  29 + "4511": { msg: "请先授权获取微信头像信息", desc: "登录接口获取" },
  30 + "4513": { msg: "没有达到刷新条件", desc: "生成过一次且没有领取 才可刷新" },
  31 + "4514": { msg: "刷新次数超限", desc: "刷新次数达到 配置最大项" },
  32 + "4515": { msg: "分享失效", desc: "跨天失效等" },
  33 + "4516": { msg: "分享不存在", desc: "分享ID不存在等" },
  34 + "4517": { msg: "已被领取", desc: "被其他人领取" },
  35 + "4518": { msg: "今日领取次数超限", desc: "今天领取的次数达到配置最大项" },
  36 + "4519": { msg: "已领过其他选项", desc: "只能领取一个" },
  37 + "4520": { msg: "没有达到领取条件", desc: "领取进度是否完成" },
  38 + "4522": { msg: "只能领取自己的奖励", desc: "" },
  39 + "1009": { msg: "您的账号已因数据异常而被封禁,如需申诉可以向微信客服反馈。", desc: "" },
  40 + "3004": { msg: "活动已经结束", desc: "" },
  41 + }
  42 +
  43 + private static _unknownError = { msg: "未知错误", desc: "联系开发人员排查错误" };
  44 + static getError(code: string): { msg: string, desc: string } {
  45 + return this._errors[code] || this._unknownError;
  46 + }
  47 +
  48 + static this(key: string): string {
  49 + return (this._errors[key] || this._unknownError).msg;
  50 + }
  51 +}
  52 +
  53 +/*
  54 +* SDK工具类库;
  55 +*/
  56 +export class SDKToolsPlus extends SDKTools {
  57 + static get isTT() {
  58 + return sys.platform == sys.Platform.BYTEDANCE_MINI_GAME;
  59 + }
  60 +
  61 + //提交订单
  62 + static doPreorder(data, goodid: string, price: number, orderid: string) {
  63 + if (!data.code && data.data) {
  64 + let { config, paytype } = data.data;
  65 + // goodid = goodid + "";
  66 + // console.log("支付方式"+paytype);
  67 + switch (paytype) {
  68 + case "1"://H5 客服消息支付,游戏内调用发片消息接口 sendMessagePath:path
  69 + var { img, title, path } = config;
  70 + wx.openCustomerServiceConversation({
  71 + showMessageCard: true, //是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息
  72 + sendMessageTitle: title ? title : '我要充值!',//会话内消息卡片标题
  73 + sendMessagePath: path,//会话内消息卡片路径//channel=${SDKTools.ChannelId}&item=10&uid=${SDKTools.UserId}
  74 + sendMessageImg: img ? img : 'https://wxsdk-cdn.miso-lab.com/moon-island/share/fx_chongzhi.jpg',//会话内消息卡片图片路径
  75 + success: (ret) => {
  76 + //记录状态
  77 + //onshow检测状态,判断是否充值成功
  78 + console.log("支付成功:", ret);
  79 + EventCenter.I.emit(GameEvent.PAY_POLLING, true);
  80 + },
  81 + fail: (ret) => {
  82 + console.log("fail", ret);
  83 + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid);
  84 + }
  85 + })
  86 + break;
  87 + case "2":
  88 +
  89 +
  90 + break;
  91 + case "3"://米大师支付,游戏支付成功需要调用米大师订单上报接口
  92 + var { payid } = config;
  93 + SDKTools.pay({ payid, goodid, money: price, orderid: orderid }).then(res => {
  94 + if (!res.code) {
  95 + console.log("支付成功", res);
  96 + EventCenter.I.emit(GameEvent.PAY_CONFIRM, orderid, goodid);
  97 + } else {
  98 + console.log("支付失败", res);
  99 + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid);
  100 + }
  101 + }).catch(err => {
  102 + console.log("支付失败2:", err);
  103 + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid);
  104 + })
  105 + break;
  106 + case "4"://跳转小程序支付,游戏直接跳转返回的小程序路径
  107 + var { appid, page } = config;
  108 + wx.navigateToMiniProgram({
  109 + appId: appid,
  110 + path: page,
  111 + envVersion: DataService.I.EnvEnum === EnvCode.Prod ? 'release' : "trial",//opts.envVersion || 'release',
  112 + success(res: any) {
  113 + console.log("成功:", res)
  114 + // resolve(res);
  115 + EventCenter.I.emit(GameEvent.PAY_POLLING, true);
  116 + },
  117 + fail(err: any) {
  118 + console.log("失败", err)
  119 + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid);
  120 + // reject(err);
  121 + }
  122 + });
  123 + break;
  124 + case "5"://扫码小程序支付,imgurl为二维码地址,提示用户扫码即可
  125 + EventCenter.I.emit(GameEvent.PAY_POLLING, true);
  126 + var { imgurl } = config;
  127 + wx.previewImage({
  128 + current: imgurl, // 当前显示图片的http链接
  129 + urls: [imgurl] // 需要预览的图片http链接列表
  130 + })
  131 +
  132 + break;
  133 + case "6"://二维码支付,windows下需要调用扫码支付接口
  134 + EventCenter.I.emit(GameEvent.PAY_POLLING, true);
  135 + var { qrcode } = config;
  136 + wx.previewImage({
  137 + current: qrcode, // 当前显示图片的http链接
  138 + urls: [qrcode] // 需要预览的图片http链接列表
  139 + })
  140 +
  141 + break;
  142 + case "7"://抖音支付
  143 + var { payid } = config;
  144 + SDKTools.pay({ payid, goodid, money: price, orderid: orderid }).then(res => {
  145 + if (!res.code) {
  146 + console.log("支付成功", res);
  147 + EventCenter.I.emit(GameEvent.PAY_CONFIRM, orderid, goodid);
  148 + } else {
  149 + console.log("支付失败", res);
  150 + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid);
  151 + }
  152 + }).catch(err => {
  153 + console.log("支付失败", err);
  154 + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid);
  155 + })
  156 + break;
  157 + case "10"://支付宝支付
  158 + var { payid } = config;
  159 + SDKTools.pay({ payid, goodid, money: price, orderid: orderid }).then(res => {
  160 + if (!res.code) {
  161 + console.log("111tttttt"+Date.now());
  162 + EventCenter.I.emit(GameEvent.PAY_POLLING_NOW, true);
  163 + } else {
  164 + console.log("支付失败", JSON.stringify(res));
  165 + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid);
  166 + }
  167 + }).catch(err => {
  168 + console.log("支付失败", JSON.stringify(err));
  169 + EventCenter.I.emit(GameEvent.PAY_FAIL, orderid, goodid);
  170 + })
  171 + break;
  172 + default:
  173 + // utils.tips("出错!")
  174 + break;
  175 + }
  176 + } else {
  177 + // utils.tips("出错!")
  178 + }
  179 + }
  180 +
  181 + /**
  182 + * 获取群二维码
  183 + */
  184 + static QRcode() {
  185 + return GameServicePlus.I.getQRcode();
  186 + }
  187 +
  188 + /**
  189 + * 兑换CDK
  190 + */
  191 + static convertCDkey(cdkey: string) {
  192 + return GameServicePlus.I.convertCDkey(cdkey);
  193 + }
  194 +
  195 + /**
  196 + * 商品列表
  197 + */
  198 + static goodsList() {
  199 + return GameServicePlus.I.goodsList();
  200 + }
  201 +
  202 + /**
  203 + * 生成订单
  204 + */
  205 + static createOrder(goodid: string) {
  206 + return GameServicePlus.I.createOrder(goodid);
  207 + }
  208 +
  209 + /**
  210 + * 查询订单
  211 + */
  212 + static queryOrder(no: string) {
  213 + return GameServicePlus.I.queryOrder(no);
  214 + }
  215 +
  216 + /**
  217 + * 确认订单
  218 + */
  219 + static confirmOrder(no: string) {
  220 + return GameServicePlus.I.confirmOrder(no);
  221 + }
  222 +
  223 + /**
  224 + * 获取玩家历史存档
  225 + */
  226 + static getUserHistory(uid: string, token: string) {
  227 + return GameServicePlus.I.getUserHistory(uid, token);
  228 + }
  229 +
  230 + /**
  231 + * 获取玩家历史存档
  232 + * @param data //需要包含uid,token
  233 + */
  234 + static saveUserHistory(data: any) {
  235 + return GameServicePlus.I.saveUserHistory(data);
  236 + }
  237 +
  238 + /**
  239 + * 重置GM标识
  240 + */
  241 + static setAup(typ: number = 0) {
  242 + return GameServicePlus.I.setAup(typ);
  243 + }
  244 +
  245 + /**
  246 + * 获取分享图片
  247 + * @param items 2,1,0|3,1,1|3,1,1|3,1,1|3,1,1格式:2,1,0(类型,id,领取状态)领取状态:1已领取0未领取
  248 + * @param zoom 图片缩放比例
  249 + * @returns
  250 + */
  251 + static getShareImage(items: string, zoom = 1) {
  252 + return GameServicePlus.I.getShareImage(items, zoom);
  253 + }
  254 +
  255 + /**
  256 + * 获取今日分享
  257 + * @param refresh 是否刷新
  258 + */
  259 + static getShare(refresh?: number) {
  260 + return GameServicePlus.I.getShare(refresh);
  261 + }
  262 +
  263 + /**
  264 + * 获取分享详情
  265 + * @param id 分享id
  266 + * @param date 分享日期 格式:20220524
  267 + */
  268 + static getShareInfo(id: number, date: string) {
  269 + if (typeof id === "string") {
  270 + id = parseInt(id);
  271 + }
  272 + return GameServicePlus.I.getShareInfo(id, date);
  273 + }
  274 +
  275 + /**
  276 + * 领取好友分享
  277 + * @param id 分享id
  278 + * @param date 分享日期 格式:20220524
  279 + * @param itemid 分享选项ID
  280 + */
  281 + static getShareReward(id: number, date: string, itemid: number) {
  282 + if (typeof id === "string") {
  283 + id = parseInt(id);
  284 + }
  285 + return GameServicePlus.I.getShareReward(id, date, itemid);
  286 + }
  287 +
  288 + /**
  289 + * 领取额外进度奖励
  290 + * @param id 分享id
  291 + * @param date 分享日期 格式:20220524
  292 + */
  293 + static getProgressReward(id: number, date: string) {
  294 + if (typeof id === "string") {
  295 + id = parseInt(id);
  296 + }
  297 + return GameServicePlus.I.getProgressReward(id, date);
  298 + }
  299 +
  300 + static getInviteInfo() {
  301 + return GameServicePlus.I.getInviteInfo();
  302 + }
  303 +
  304 + static receiveInvite(id: number) {
  305 + return GameServicePlus.I.receiveInvite(id);
  306 + }
  307 +
  308 + static heartbeat() {
  309 + return GameServicePlus.I.beatheart();
  310 + }
  311 +
  312 + /**
  313 + * 领取列表
  314 + * @param status 类型1周卡2月卡
  315 + */
  316 + static recCardList() {
  317 + return GameServicePlus.I.recCardList();
  318 + }
  319 +
  320 + /**
  321 + * 领取列表
  322 + * @param typ 第几天 week周 month月
  323 + */
  324 + static recCardReward(typ: string) {
  325 + return GameServicePlus.I.recCardReward(typ);
  326 + }
  327 +
  328 + /**
  329 + * 领取基金列表
  330 + */
  331 + static recGrowthList() {
  332 + return GameServicePlus.I.recGrowthList();
  333 + }
  334 +
  335 + /**
  336 + * 领取基金列表
  337 + * @param goodid 购买的基金商品ID
  338 + * @param level 等级
  339 + */
  340 + static recGrowthReward(goodid: string, level: number) {
  341 + return GameServicePlus.I.recGrowthReward(goodid, level);
  342 + }
  343 +
  344 + /**
  345 + * 获取无尽礼包数据
  346 + */
  347 + static recEndlessList(groupId: string) {
  348 + return GameServicePlus.I.recEndlessList(groupId);
  349 + }
  350 +
  351 + /**
  352 + * 领取无尽礼包
  353 + * @param date 当前日期
  354 + */
  355 + static recEndlessReward(groupId: string, id: string, date: string) {
  356 + return GameServicePlus.I.recEndlessReward(groupId, id, date);
  357 + }
  358 +
  359 + /**
  360 + * 获取新手礼包数据
  361 + */
  362 + static getNewbieGiftData() {
  363 + return GameServicePlus.I.getNewbieGiftData();
  364 + }
  365 +
  366 + /**
  367 + * 领取新手礼包
  368 + * @param days 当前天
  369 + */
  370 + static recNewbieGift(days: string) {
  371 + return GameServicePlus.I.recNewbieGift(days);
  372 + }
  373 +
  374 +
  375 + /**
  376 + * 订阅消息
  377 + * @param tmplId 订阅ID
  378 + * @param message 订阅内容
  379 + * @param sendtime 订阅发送时间s二选一参数
  380 + * @param times 订阅延迟时间s二选一参数
  381 + * @param status 1取消以前相同模板信息,默认为0不取消
  382 + */
  383 + static async sendSubScribe(tmplId: string, message: string, sendtime: number, times: number = 0, status = 1) {
  384 + return GameServicePlus.I.sendSubScribe(tmplId, message, sendtime, times, status);
  385 + }
  386 +
  387 + /**
  388 + * 取消订阅消息
  389 + * @param tmplId 订阅ID
  390 + */
  391 + static async cancelSubscribe(tmplId: string) {
  392 + return GameServicePlus.I.cancelSubscribe(tmplId);
  393 + }
  394 + /**
  395 + * 自定义活动
  396 + * @param id 活动ID(后台的ID)
  397 + */
  398 + static activityCustom(id?: string) {
  399 + return GameServicePlus.I.activityCustom(id);
  400 + }
  401 + /**
  402 + * 添加排行榜
  403 + * @param typ 游戏端自定义排行标识
  404 + * @param fraction 分数 如果上报的分数小于以前上报的分数,则不会更新
  405 + * @param rankData 扩展字段
  406 + * @returns
  407 + */
  408 + static rankAddV2(typ: string, fraction: number, rankData?: string) {
  409 + return GameServicePlus.I.rankAddV2(typ, fraction, rankData);
  410 + }
  411 + /**
  412 + * 排行榜列表
  413 + * @param typ 游戏端自定义排行标识
  414 + * @param percent percent等于1 的时候会返回排行榜总人数和自己的当前排名
  415 + */
  416 + static rankListV2(typ: string, percent: number = 0) {
  417 + return GameServicePlus.I.rankListV2(typ, percent);
  418 + }
  419 +
  420 +}
0 421 \ No newline at end of file
... ...
sdk/WxHelper.ts 0 → 100644
... ... @@ -0,0 +1,534 @@
  1 +
  2 +// import UserManager from "../manager/UserManager";
  3 +
  4 +import { Node, UITransform, game, view } from "cc";
  5 +import { ALIPAY } from "cc/env";
  6 +
  7 +/** WXapi */
  8 +export class WxHelper {
  9 +
  10 + /** 手机设备信息 */
  11 + public static SystemInfo: SystemInfoSyncReturnValue;
  12 +
  13 + /** 微信用户信息 */
  14 + public static userInfo: WxUserInfo;
  15 + static get isWx() {
  16 + return typeof wx !== 'undefined';
  17 + }
  18 +
  19 + /** 获取设备信息 */
  20 + public static getSystemInfo() {
  21 + if (this.isWx) this.SystemInfo = wx.getSystemInfoSync();
  22 + }
  23 +
  24 + /** 像开放数据域发送信息 */
  25 + public static postMessage(eventType: string, data?: any): void {
  26 + if (!this.isWx || !this.checkVerison('1.9.92')) return;
  27 + wx.getOpenDataContext().postMessage({
  28 + eventType: eventType,
  29 + data: data
  30 + });
  31 +
  32 + }
  33 +
  34 + /** 更新微信开放数据榜单数据 */
  35 + public static updateWxRank(key: string, value: number) {
  36 + if (typeof my != 'undefined') {
  37 + return;
  38 + }
  39 + if (!this.isWx || !this.checkVerison('1.9.92')) return;
  40 + let data = {
  41 + value,
  42 + }
  43 + wx.setUserCloudStorage({
  44 + KVDataList: [{
  45 + key,
  46 + value: JSON.stringify(data)
  47 + }]
  48 + })
  49 +
  50 + }
  51 +
  52 + /** 创建用户反馈按钮 */
  53 + public static createFeedbackButton(target: Node) {
  54 +
  55 + let data = this.computWxPosition(target);
  56 + return wx.createFeedbackButton({
  57 + type: 'text',
  58 + text: ' ',
  59 + style: {
  60 + left: data.left,
  61 + top: data.top,
  62 + width: data.width,
  63 + height: data.height,
  64 + borderRadius: 5,
  65 + // backgroundColor: '#69c66d',
  66 + }
  67 + })
  68 +
  69 + }
  70 +
  71 +
  72 + /** 获取用户信息按钮 */
  73 + public static userInfoButton: any;
  74 + /** 创建一个获取用户信息按钮 */
  75 + public static createUserInfoButton(target: Node) {
  76 + let data = this.computWxPosition(target);
  77 + // console.log("data", data)
  78 + return wx.createUserInfoButton({
  79 + type: 'text',
  80 + text: ' ',
  81 + style: {
  82 + left: data.left,
  83 + top: data.top,
  84 + width: data.width,
  85 + height: data.height,
  86 + borderRadius: 5,
  87 + // color: '#ffffff',
  88 + // backgroundColor: '#69c66d',
  89 + // textAlign: 'center',
  90 + // fontSize: 20,
  91 + // lineHeight: 45,
  92 + },
  93 + withCredentials: true
  94 + })
  95 +
  96 + }
  97 +
  98 + /** 计算微信坐标 */
  99 + public static computWxPosition(target: Node): { left: number, top: number, width: number, height: number } {
  100 +
  101 + let data = { left: 0, top: 0, width: 0, height: 0 }
  102 + let pos = target.worldPosition;
  103 + let width = target.getComponent(UITransform).width;
  104 + let height = target.getComponent(UITransform).height;
  105 + let ratio = view.getDevicePixelRatio();
  106 + let scale = view.getScaleX();
  107 + let factor = scale / ratio;
  108 + // let point = cc.v2(rect.x, rect.y);
  109 + // point.mulSelf(scale);
  110 + data.left = (pos.x - width / 2) * factor;
  111 + data.top = wx.getSystemInfoSync().screenHeight - (pos.y + height / 2) * factor;
  112 + data.width = width * factor;
  113 + data.height = height * factor;
  114 +
  115 + // let btnSize = cc.size(target.width + 10, target.height + 10);
  116 + // let frameSize = cc.view.getFrameSize();
  117 + // let winSize = cc.director.getWinSize();
  118 + // // cc.log("winSize: ",winSize);
  119 + // // cc.log("frameSize: ",frameSize);
  120 + // //适配不同机型来创建微信按钮
  121 + // data.left = (winSize.width * 0.5 + target.x - btnSize.width * 0.5) / winSize.width * frameSize.width;
  122 + // data.top = (winSize.height * 0.5 - target.y - btnSize.height * 0.5) / winSize.height * frameSize.height;
  123 + // data.width = btnSize.width / winSize.width * frameSize.width;
  124 + // data.height = btnSize.height / winSize.height * frameSize.height;
  125 + // cc.log("button pos: ",cc.v2(left,top));
  126 + // cc.log("button size: ",cc.size(width,height));
  127 +
  128 + // cc.log(data)
  129 + return data;
  130 +
  131 + }
  132 +
  133 +
  134 + /** 兼容方式 - 版本比较 */
  135 + public static compareVersion(versionA: any, versionB: any) {
  136 + versionA = versionA.split('.');
  137 + versionB = versionB.split('.');
  138 + let len = Math.max(versionA.length, versionB.length);
  139 +
  140 + while (versionA.length < len) {
  141 + versionA.push('0');
  142 + }
  143 + while (versionB.length < len) {
  144 + versionB.push('0');
  145 + }
  146 +
  147 + for (let i = 0; i < len; i++) {
  148 + let num1 = parseInt(versionA[i]);
  149 + let num2 = parseInt(versionB[i]);
  150 +
  151 + if (num1 > num2) {
  152 + return 1;
  153 + } else if (num1 < num2) {
  154 + return -1;
  155 + }
  156 + }
  157 +
  158 + return 0;
  159 + }
  160 +
  161 + /** 当前版本是否能使用接口 */
  162 + public static checkVerison(version: string): boolean {
  163 + return this.compareVersion(this.SystemInfo.SDKVersion, version) >= 0;
  164 + }
  165 +
  166 + /** 显示一个对话框 */
  167 + public static showModal(data: ShowModalType) {
  168 + if (typeof my != 'undefined') {
  169 + return new Promise((resolve, reject) => {
  170 + wx.confirm({
  171 + ...data,
  172 + success: (res: { confirm: boolean, cancel: boolean }) => {
  173 + if (res.confirm) {
  174 + resolve(true);
  175 + } else {
  176 + resolve(false);
  177 + }
  178 + },
  179 + fail: () => {
  180 + reject();
  181 + }
  182 +
  183 + });
  184 +
  185 + });
  186 + }
  187 +
  188 + return new Promise((resolve, reject) => {
  189 +
  190 + if (typeof wx !== 'undefined') {
  191 + wx.showModal({
  192 + ...data,
  193 + success: (res: { confirm: boolean, cancel: boolean }) => {
  194 + if (res.confirm) {
  195 + resolve(true);
  196 + } else {
  197 + resolve(false);
  198 + }
  199 + },
  200 + fail: () => {
  201 + reject();
  202 + }
  203 +
  204 + });
  205 + } else {
  206 + console.log(JSON.stringify(data));
  207 + }
  208 +
  209 + });
  210 +
  211 + }
  212 +
  213 + /**
  214 + * 显示一个提示层
  215 + * @param msg 显示信息
  216 + * @param time 关闭时间
  217 + */
  218 + public static showToast(msg: string, time: number = 1500) {
  219 + if (!this.isWx) return;
  220 + if (typeof my != 'undefined') {
  221 + my.showToast({
  222 + type: 'none',
  223 + content: msg,
  224 + duration: time,
  225 + });
  226 + return;
  227 + }
  228 + wx.showToast({
  229 + title: msg,
  230 + icon: 'none',
  231 + duration: time
  232 + })
  233 +
  234 + }
  235 +
  236 + /** 设置系统剪贴板的内容 */
  237 + public static copy(str: string) {
  238 + if (!this.checkVerison('1.1.0')) return Promise.reject('');
  239 + if (typeof my != 'undefined') {
  240 + return new Promise((resolve, reject) => {
  241 + wx.setClipboard({
  242 + text: str,
  243 + success: (res: any) => {
  244 + resolve(res);
  245 + },
  246 + fail: () => {
  247 + resolve('');
  248 + }
  249 + });
  250 + });
  251 + }
  252 + return new Promise((resolve, reject) => {
  253 + wx.setClipboardData({
  254 + data: str,
  255 + success: (res: any) => {
  256 + resolve(res);
  257 + },
  258 + fail: () => {
  259 + resolve('');
  260 + }
  261 + });
  262 + });
  263 + }
  264 +
  265 + /** 手机发生较长时间的振动(400 ms) */
  266 + public static vibrateLong() {
  267 + if (!this.checkVerison('1.2.0')) return Promise.reject(null);
  268 +
  269 + return new Promise((resolve, reject) => {
  270 + wx.vibrateLong({
  271 + success: () => {
  272 + resolve(1);
  273 + },
  274 + fail: () => {
  275 + resolve(0);
  276 + }
  277 + });
  278 + });
  279 + }
  280 +
  281 + /** 手机发生较短时间的振动(15 ms) */
  282 + public static vibrateShort() {
  283 + if (!this.checkVerison('1.2.0')) return Promise.reject(null);
  284 +
  285 + return new Promise<IResult<any>>((resolve, reject) => {
  286 + wx.vibrateShort({
  287 + success: () => {
  288 + resolve({ code: 0 });
  289 + },
  290 + fail: () => {
  291 + resolve({ code: 1 });
  292 + }
  293 + });
  294 + });
  295 + }
  296 +
  297 + /**
  298 + * 检测更新
  299 + */
  300 + public static checkUpdate(bol: boolean = true) {
  301 + if (!this.checkVerison('1.9.90')) return;
  302 + const updateManager = wx.getUpdateManager();
  303 + updateManager.onCheckForUpdate(function (res) {
  304 + console.log('updateManager', res.hasUpdate);
  305 + });
  306 +
  307 + updateManager.onUpdateReady(function () {
  308 + wx.showModal({
  309 + title: '更新提示',
  310 + content: '新版本已经准备好,请重启应用!',
  311 + showCancel: bol,
  312 + success: function (res) {
  313 + if (res.confirm) {
  314 + updateManager.applyUpdate()
  315 + }
  316 + }
  317 + });
  318 + });
  319 + updateManager.onUpdateFailed(function () {
  320 + // 新的版本下载失败
  321 + });
  322 + }
  323 +
  324 + /** 发送客服信息 */
  325 + public static openCustomerServiceConversation() {
  326 +
  327 + return new Promise<IResult<any>>((resolve, reject) => {
  328 + if (!this.checkVerison('2.0.3')) resolve({ code: 1 });
  329 + wx.openCustomerServiceConversation({
  330 + showMessageCard: true,
  331 + sendMessageTitle: '我要更多好玩!',
  332 + sendMessageImg: 'http://dep.miso-lab.com/tetrischangeskin/bin/share/concat.png',
  333 + success: () => {
  334 + resolve({ code: 0 });
  335 + },
  336 + fail: () => {
  337 + resolve({ code: 1 });
  338 + }
  339 + });
  340 + });
  341 +
  342 + }
  343 +
  344 + /** 发送客服信息 */
  345 + public static openConversation() {
  346 +
  347 + return new Promise<IResult<any>>((resolve, reject) => {
  348 + if (!this.checkVerison('2.0.3')) resolve({ code: 1 });
  349 + wx.openCustomerServiceConversation({
  350 + success: () => {
  351 + resolve({ code: 0 });
  352 + },
  353 + fail: () => {
  354 + resolve({ code: 1 });
  355 + }
  356 + });
  357 + });
  358 +
  359 + }
  360 +
  361 + /** 回到前台 */
  362 + public static onShow(callback: () => void) {
  363 + if (!this.isWx) return;
  364 + wx.onShow(callback);
  365 + // return new Promise<IResult<any>>((resolve, reject) => {
  366 + // wx.onShow((res: any) => {
  367 + // resolve({ code: 1 });
  368 + // });
  369 + // });
  370 +
  371 + }
  372 +
  373 + /** 切换到后台 */
  374 + public static onHide(callback: () => void) {
  375 +
  376 + if (!this.isWx) return;
  377 + wx.onHide(callback);
  378 +
  379 + }
  380 +
  381 + public static updateShareMenu(value) {
  382 + if (!this.isWx) return;
  383 + wx.updateShareMenu({
  384 + withShareTicket: value
  385 + });
  386 + }
  387 +
  388 + /**
  389 + * 检查授权
  390 + */
  391 + public static getSetting(scope: string = 'scope.userInfo') {
  392 + if (!this.isWx) return Promise.resolve(1);
  393 + return new Promise((resolve, reject) => {
  394 + wx.getSetting({
  395 + success(res) {
  396 + if (res.authSetting[scope]) {
  397 + resolve(1)
  398 + } else {
  399 + reject()
  400 + }
  401 + }
  402 + })
  403 + })
  404 + }
  405 + /**
  406 + * 打开授权设置
  407 + */
  408 + public static openSetting(scope: string = 'scope.userInfo') {
  409 + if (!this.isWx) return Promise.resolve(1);
  410 + return new Promise((resolve, reject) => {
  411 + wx.openSetting({
  412 + success(res) {
  413 + if (res.authSetting[scope]) {
  414 + resolve(1)
  415 + } else {
  416 + reject()
  417 + }
  418 + }
  419 + })
  420 + })
  421 + }
  422 + /**
  423 + * 打开授权窗口
  424 + */
  425 + public static authorize(scope: string = 'scope.userInfo') {
  426 + if (!this.isWx) return;
  427 + wx.authorize({
  428 + scope: scope,
  429 + success(suc) {
  430 + console.log("suc", suc)
  431 + },
  432 + fail(err) {
  433 + console.log("err", err)
  434 + }
  435 + })
  436 + }
  437 + /**
  438 + * 获取用户信息
  439 + */
  440 + public static getUserInfo(callback) {
  441 + wx.getUserInfo({
  442 + success: function (res) {
  443 + // console.log(res)
  444 + callback(res)
  445 + },
  446 + fail: function (err) {
  447 + callback(err)
  448 + }
  449 + })
  450 + }
  451 + /**
  452 + * 获取用户信息 自动弹出
  453 + */
  454 + public static getUserProfile(callback) {
  455 + if (!this.isWx) {
  456 + callback({ userInfo: "" })
  457 + return
  458 + };
  459 + wx.getUserProfile({
  460 + desc: '补充用户资料',
  461 + success: function (res) {
  462 + // console.log(res)
  463 + callback(res)
  464 + },
  465 + fail: function (err) {
  466 + console.log("获取用户信息", err);
  467 + callback(err)
  468 + }
  469 + })
  470 + }
  471 + /** 游戏圈 */
  472 + public static createGameClubButton(target: Node) {
  473 + let data = this.computWxPosition(target);
  474 + //@ts-ignore
  475 + return wx.createGameClubButton({
  476 + icon: 'white',
  477 + style: {
  478 + left: data.left,
  479 + top: data.top,
  480 + width: data.width,
  481 + height: data.height,
  482 + }
  483 + })
  484 +
  485 + }
  486 +
  487 + /** 抖音创建客服按钮 */
  488 + public static createContactButton(target: Node) {
  489 +
  490 + let data = this.computWxPosition(target);
  491 + return wx.createContactButton({
  492 + type: "text", // image | text
  493 + // image: "../resources/prefab/loading/mask",
  494 + text: ' ',
  495 + style: {
  496 + left: data.left,
  497 + top: data.top,
  498 + width: data.width,
  499 + height: data.height,
  500 + // lineHeight: 40,
  501 + backgroundColor: "#00000000",
  502 + // textAlign: "center",
  503 + // fontSize: 16,
  504 + // borderRadius: 5,
  505 + borderColor: "#00000000",
  506 + // borderWidth: 1,
  507 + // textColor: "#ffffff",
  508 + },
  509 + success(res) {
  510 + console.log("createContactButton success", res);
  511 + },
  512 + fail(res) {
  513 + console.log("createContactButton fail", res);
  514 + },
  515 + complete(res) {
  516 + console.log("createContactButton complete", res);
  517 + },
  518 + });
  519 + }
  520 +
  521 + public static restartMiniProgram() {
  522 + if (typeof my != 'undefined') {
  523 + game.restart();
  524 + return;
  525 + }
  526 + if (!this.isWx) {
  527 + return
  528 + };
  529 + if (!wx.restartMiniProgram) {
  530 + this.showToast("自动重启失败,请手动重启!", 10000);
  531 + }
  532 + wx.restartMiniProgram();
  533 + }
  534 +}
0 535 \ No newline at end of file
... ...
sdk/shareTools.ts
1   -import WXSDK from "../wxsdk/WXSDK";
  1 +import { UIManager } from "../../framework/core/view/UIManager";
  2 +import { AudioManager } from "../../framework/mananger/AudioManager";
  3 +import TAMgr from "../../framework/ta/TAMgr";
  4 +import WXSDK from "../../framework/wxsdk/WXSDK";
  5 +import { EventModels, EventPool } from "../const/EventModels";
  6 +import { GameConst } from "../const/GameConst";
  7 +import { EActivitySubTaskType, EWindowExitCode, WindowType } from "../const/types";
  8 +import { mapController } from "../modules/map/MapController";
  9 +import { PayShopManager } from "../modules/server/manager/PayShopManager";
  10 +import { shopController } from "../modules/shop/ShopController";
  11 +import { Utils } from "../utils/Utils";
  12 +import MaskView from "../view/common/MaskView";
  13 +import { Analytics } from "./Analytics";
  14 +import { Ge } from "./Ge";
  15 +import { SDKTools } from "./SDKTools";
  16 +import { WxHelper } from "./WxHelper";
  17 +
2 18 /*
3 19 * 分享与视频工具类;
4 20 */
... ... @@ -9,43 +25,126 @@ export class ShareTools {
9 25 public static onShowAd: boolean = false;
10 26  
11 27 public static isTest: boolean = false;
  28 +
  29 + // private static getAdCount() {
  30 + // try {
  31 + // let adCount = SDKTools.getParamsString("ad_count", '10,10');
  32 + // let arr = adCount.split(',').map(Number);
  33 + // if (SDKTools.isnew) {
  34 + // return +arr[0];
  35 + // } else {
  36 + // return +arr[1];
  37 + // }
  38 + // } catch (error) {
  39 + // return 10;
  40 + // }
  41 + // }
12 42 /**
13 43 * 验证分享:可处理成功、失败
14 44 * @param shareKey
15 45 * @param params params.fail 有就不处理,没有自动处理
16   - * @param opts 目前支持5个key 1,title自定义分享标题 2,img_url自定义分享图片 3,share_type(不走后台配置写死走视频or分享。1分享2视频3无视频则分享)4,closeSimulate是否关闭模拟分享 5:multiton重新创建视频实例
  46 + * @param opts 目前支持4个key 1,title自定义分享标题 2,img_url自定义分享图片 3,share_type(不走后台配置写死走视频or分享。1分享2视频3无视频则分享)4,closeSimulate是否关闭模拟分享
17 47 */
18   - static share(shareKey: string, params?: { success?: Function, fail?: Function, context?: any }, opts?: any) {
19   - if (typeof wx === 'undefined' || this.isTest) {
  48 + static async share(shareKey: string, params?: { success?: Function, fail?: Function, context?: any }, opts?: any) {
  49 + const type = this.getShareType(shareKey);
  50 + // 免广告卡、体验卡
  51 + if ((type == 2 && (!opts || opts.share_type != 1)) || (opts && opts.share_type == 2)) {
  52 + if (PayShopManager.I.isExperienceOrNoAd()) {
  53 + Analytics.I.dot("video_no_ad", { form: shareKey });
  54 + params && params.success && params.success();
  55 + return;
  56 + } else {
  57 + // 非免广告卡、体验卡用户 检查是否买过体验卡
  58 + if (PayShopManager.I.checkShowExperience()) {
  59 + if (shopController.buyExperienceTips != Utils.getDayTime(0)) {
  60 + shopController.buyExperienceTips = Utils.getDayTime(0);;
  61 + UIManager.instance.showWindow2(WindowType.ExperienceGiftWindow);
  62 + params && params.fail && params.fail();
  63 + return;
  64 + }
  65 + }
  66 + }
  67 + }
  68 + // 广告卡
  69 + if (((type == 2 && (!opts || opts.share_type != 1)) || (opts && opts.share_type == 2)) && mapController.getPackageItemNum(GameConst.ITEM_ADCARD_ID) > 0) {
  70 + const ret = await UIManager.instance.waitWindow2(WindowType.AdCardWindow);
  71 + if (ret == EWindowExitCode.Yes) {
  72 + Analytics.I.dot("ad_card", { ad_card: shareKey });
  73 + params && params.success && params.success();
  74 + return;
  75 + }
  76 + }
  77 +
  78 + if ((typeof wx == 'undefined'&&typeof my == 'undefined') || this.isTest) {
20 79 params && params.success && params.success();
  80 + // 分享
  81 + const evt = EventPool.get(EventModels.AcitvitySubTaskEvent);
  82 + evt.type = EActivitySubTaskType.Share;
  83 + evt.centerEmit();
21 84 return
22 85 }
  86 +
  87 + // // 看广告n次后处理为分享
  88 + // let count = this.getAdCount();
  89 + // let isClear = false;
  90 + // // console.log("改为分享前:", settingsController.videoCount, count);
  91 + // if (settingsController.videoCount >= count) {
  92 + // if (type != 1 || (opts && opts.share_type == 2)) {// 视频 or // 强制视频
  93 + // opts = {
  94 + // ...opts,
  95 + // share_type: 1,//强制改为分享
  96 + // };
  97 + // isClear = true;
  98 + // // console.log("改为分享了");
  99 + // }
  100 + // }
  101 +
23 102 this.onShowAd = true;
  103 + AudioManager.I.pauseAll();
  104 + if (!opts || !opts.closeSimulate) {
  105 + MaskView.Show()
  106 + }
24 107 WXSDK.share.share(shareKey.toString(), params, opts).then(async res => {
25 108 this.onShowAd = false;
  109 + // if (isClear) {
  110 + // settingsController.videoCount = 0;
  111 + // }
  112 + if (res.type == 2) {
  113 + // 视频
  114 + // settingsController.videoCount++;
  115 + Ge.I.adShowEvent("video", shareKey.toString());
  116 + TAMgr.Ins.userAdd({ total_ad_num: 1 });
  117 + } else {
  118 + // 分享
  119 + const evt = EventPool.get(EventModels.AcitvitySubTaskEvent);
  120 + evt.type = EActivitySubTaskType.Share;
  121 + evt.centerEmit();
  122 + TAMgr.Ins.dot('share_source', { from: shareKey });
  123 + }
26 124 params && params.success && params.success(res);
  125 + AudioManager.I.resumeAll();
  126 + MaskView.Hide();
27 127 }).catch(async err => {
  128 + AudioManager.I.resumeAll();
  129 + MaskView.Hide();
28 130 this.onShowAd = false;
29 131 if (!params || !params.fail) {
30   - wx.showToast({
31   - title: err.msg,
32   - icon: 'none',
33   - duration: 1500
34   - })
  132 + if (err && err.msg) {
  133 + WxHelper.showToast(err.msg)
  134 + }
35 135 } else {
36 136 params && params.fail && params.fail(err);
37 137 }
38   - })//this.buildParams(params)
  138 + })
39 139 }
40 140  
41 141 /**
42   - * 重新创建视频实例
  142 + * 必定视频 不走后台配置
43 143 * @param shareKey
44 144 * @param params
45   - * @param opts multiton重新创建视频实例
46 145 */
47   - static multitonShare(shareKey: string, params?: { success?: Function, fail?: Function, context?: any }, opts?: any) {
48   - this.share(shareKey, params, { multiton: true, ...opts });
  146 + static video(shareKey: string, params?: { success?: Function, fail?: Function, context?: any }, opts?: any) {
  147 + this.share(shareKey, params, { ...opts, share_type: 2 });
49 148 }
50 149 /**
51 150 * 纯净分享 不处理回调
... ... @@ -76,4 +175,11 @@ export class ShareTools {
76 175 }
77 176 }
78 177  
  178 + /**
  179 + * 分享到朋友圈 bate 只支持安卓
  180 + */
  181 + static onShareTimeline(title: string, imageUrl: string, imagePreviewUrl?: string, query?: string) {
  182 + WXSDK.share.onShareTimeline(title, imageUrl, imagePreviewUrl, query);
  183 + }
  184 +
79 185 }
... ...
wxsdk/WXSDK.ts
... ... @@ -7,9 +7,10 @@ import LogService from &quot;./service/LogService&quot;;
7 7 import AdService from "./service/AdService";
8 8 import OnlineService from "./service/OnlineService";
9 9 import WxInterstitial from "./wx/WxInterstitial";
  10 +import { sys } from "cc";
10 11 export default class WXSDK {
11 12 public static get isWx(): boolean {
12   - return typeof (wx) != "undefined"
  13 + return typeof wx != "undefined"
13 14 }
14 15 public static get data(): SdkData {
15 16 return DataService.I.Data;
... ... @@ -38,10 +39,10 @@ export default class WXSDK {
38 39 public static async init() {
39 40 if (this.isWx) {
40 41 WxInit.I.init();
41   - // 视频预加载 启动预加载视频会闪屏
42   - if (cc.sys.platform === cc.sys.WECHAT_GAME && typeof qq == 'undefined') {
  42 + //视频预加载 启动预加载视频会闪屏
  43 + if (typeof wx !='undefined') {
43 44 setTimeout(() => {
44   - WxInterstitial.initInterstitialAd();//插屏预加载
  45 + // WxInterstitial.initInterstitialAd();//插屏预加载
45 46 ShareVideoService.I.preloadVideo();
46 47 }, 2000);
47 48 }
... ...
wxsdk/alipay/AlipayApi.ts 0 → 100644
... ... @@ -0,0 +1,482 @@
  1 +import SDKUtils from "../utils/SDKUtils";
  2 +
  3 +import { __LOG__ } from "../base/SDKConst";
  4 +import { NetworkType } from "../base/SDKEnum";
  5 +import DataService from "../service/DataService";
  6 +import Version from "../wx/Version";
  7 +import WxApi from "../wx/WxApi";
  8 +import WxSystem from "../wx/WxSystem";
  9 +import { SDKApi } from "../http/SDKApi";
  10 +
  11 +export default class AlipayApi {
  12 + private getVersionError(version: string): { errMsg: string; errCode: number } {
  13 + return { errMsg: `支持最低版本:${version}`, errCode: -1 };
  14 + }
  15 +
  16 + canIUse(version: string): boolean {
  17 + return SDKUtils.compareVersion(WxSystem.I.SDKVersion, version) >= 0;
  18 + }
  19 +
  20 + // 注意
  21 + // Android 6.7.2 以下版本,点击取消或蒙层时,回调 fail, errMsg 为 "fail cancel";
  22 + // Android 6.7.2 及以上版本 和 iOS 点击蒙层不会关闭模态弹窗,所以尽量避免使用「取消」分支中实现业务逻辑
  23 + showModal(data: any) {
  24 + wx.showModal(data);
  25 + }
  26 +
  27 + subscribeMessage(tmplIds: Array<string>) {
  28 + let version = Version.I.getVSubscribeMessage();
  29 + if (!this.canIUse(version)) return Promise.reject(this.getVersionError(version));
  30 + // console.log("tmplIds", tmplIds)
  31 + return new Promise((resolve, reject) => {
  32 + wx.requestSubscribeMessage({
  33 + tmplIds,
  34 + success: (ret: { errMsg: string }) => {
  35 + resolve(ret);
  36 + },
  37 + fail: (err: { errMsg: string; errCode: number }) => {
  38 + reject(err);
  39 + }
  40 + });
  41 + });
  42 + }
  43 +
  44 + /**
  45 + * 创建banner广告
  46 + */
  47 + createBannerAd(adUnitId: string, style: _StyleObject, adIntervals?: number) {
  48 + if (!this.canIUse(Version.I.getVBannerAd())) return null;
  49 +
  50 + adIntervals = adIntervals || 30;
  51 + return my.createBannerAd({
  52 + adUnitId,
  53 + style
  54 + });
  55 + }
  56 +
  57 + /**
  58 + * 创建小游戏推荐banner
  59 + */
  60 + createGameBanner(adUnitId: string, style: _StyleGameObject) {
  61 + if (!this.canIUse(Version.I.getVGameBanner())) return null;
  62 +
  63 + return my.createGameBanner({
  64 + adUnitId,
  65 + style
  66 + });
  67 + }
  68 +
  69 + /**
  70 + * 创建插屏广告组件
  71 + */
  72 + createInterstitialAd(adUnitId: string) {
  73 + if (!this.canIUse(Version.I.getVInterstitialAd())) return null;
  74 + return my.createInterstitialAd({
  75 + adUnitId
  76 + });
  77 + }
  78 +
  79 + /**
  80 + * 创建小游戏推荐icon组件
  81 + */
  82 + createGameIcon(adUnitId: string, opts: { count: number; style: Array<_GameIconStyleItem> }) {//
  83 + if (!this.canIUse(Version.I.getVGameIcon())) return null;
  84 +
  85 + return wx.createGameIcon({ adUnitId, ...opts });
  86 + }
  87 +
  88 + /**
  89 + * 创建小游戏推荐弹窗组件
  90 + */
  91 + createGamePortal(adUnitId: string) {
  92 + if (!this.canIUse(Version.I.getVGamePortal())) return null;
  93 +
  94 + return wx.createGamePortal({
  95 + adUnitId
  96 + });
  97 + }
  98 +
  99 + /**
  100 + * 创建激励视频广告组件
  101 + */
  102 + createRewardedVideoAd(adUnitId: string) {
  103 + // if (!this.canIUse(Version.I.getVRewardedVideoAd())) return null;
  104 + return my.createRewardedAd({
  105 + adUnitId: adUnitId,
  106 + });
  107 + }
  108 +
  109 + /**
  110 + * 创建打开意见反馈页面的按钮
  111 + */
  112 + createFeedbackButton(data: _FeedbackButtonObject) {
  113 + if (!this.canIUse(Version.I.getVFeedbackButton())) return null;
  114 +
  115 + return wx.createFeedbackButton(data);
  116 + }
  117 +
  118 + /**
  119 + * 创建用户信息按钮
  120 + */
  121 + createUserInfoButton(data: _UserInfoButtonObject): _UserInfoButton | null {//
  122 + if (!this.canIUse(Version.I.getVUserInfoButton())) return null;
  123 + return wx.createUserInfoButton(data);
  124 + }
  125 +
  126 + /**
  127 + * 进入客服会话。要求在用户发生过至少一次 touch 事件后才能调用
  128 + */
  129 + openCustomerServiceConversation(params: _CustomerServiceConversationObject) {//
  130 + if (!this.canIUse(Version.I.getVCustomerService())) return -1;
  131 + wx.openCustomerServiceConversation({ ...params });
  132 + return 1;
  133 + }
  134 +
  135 + vibrateLong() {
  136 + // if (!this.canIUse(Version.I.getVVibrate())) return Promise.reject(null);
  137 +
  138 + return new Promise((resolve, reject) => {
  139 + my.vibrateLong({
  140 + success: () => {
  141 + resolve(1);
  142 + },
  143 + fail: () => {
  144 + resolve(0);
  145 + }
  146 + });
  147 + });
  148 + }
  149 +
  150 + vibrateShort() {
  151 + // if (!this.canIUse(Version.I.getVVibrate())) return Promise.reject(null);
  152 + return new Promise((resolve, reject) => {
  153 + my.vibrateShort({
  154 + success: () => {
  155 + resolve(1);
  156 + },
  157 + fail: () => {
  158 + resolve(0);
  159 + }
  160 + });
  161 + });
  162 + }
  163 +
  164 + /**
  165 + * 更新转发属性
  166 + */
  167 + updateShareMenu(value: boolean) {
  168 + if (!this.canIUse(Version.I.getVUpdateShareMenu())) return;
  169 + wx.updateShareMenu({
  170 + withShareTicket: value
  171 + });
  172 + }
  173 +
  174 + /**
  175 + * 检测更新
  176 + */
  177 + checkUpdate(data: _ShowModalObject): void {//
  178 + if (!this.canIUse(Version.I.getVUpdateManager())) return;
  179 +
  180 + data = data || {};
  181 + // tslint:disable-next-line: no-this-assignment
  182 + let that = this;
  183 + // 默认参数
  184 + let params: _ShowModalObject = {//
  185 + title: data.title || '更新提示',
  186 + content: data.content || '新版本已经准备好,是否重启应用?',
  187 + showCancel: false,
  188 + success: (res: _ShowModalSuccessObject) => {//
  189 + data.success && data.success(res);
  190 + if (res.confirm) {
  191 + updateManager.applyUpdate();
  192 + }
  193 + },
  194 + fail: (err: any) => data.fail && data.fail(err),
  195 + complete: () => data.complete && data.complete()
  196 + };
  197 + // 合并参数
  198 + let keys = ['cancelText', 'cancelColor', 'confirmText', 'confirmColor'];
  199 + keys.forEach(key => SDKUtils.hasProperty(data, key) && (params = { ...params, [key]: data[key] }));
  200 +
  201 + let updateManager = wx.getUpdateManager();
  202 + updateManager.onCheckForUpdate((res: any) => {
  203 + __LOG__ && console.warn('====> PCSDK AlipayApi updateManager onCheckForUpdate', res.hasUpdate);
  204 + });
  205 + updateManager.onUpdateReady(function () {
  206 + that.showModal(params);
  207 + });
  208 + updateManager.onUpdateFailed(function () {
  209 + // 新的版本下载失败
  210 + __LOG__ && console.warn('SDK WxApi updateManager onUpdateFailed');
  211 + });
  212 + }
  213 +
  214 + /**
  215 + * 显示当前页面的转发按钮
  216 + */
  217 + showShareMenu(shareApp: _ShareAppMessageObject, shareMenu: _UpdateShareMenuObject) {
  218 + if (!this.canIUse(Version.I.getVShowShareMenu())) return;
  219 + __LOG__ && console.error('showShareMenu shareApp');
  220 + __LOG__ && console.error('showShareMenu shareMenu');
  221 + my.onShareAppMessage(() => shareApp);
  222 + // my.showShareMenu(shareMenu);
  223 + }
  224 +
  225 + /**
  226 + * 主动拉起转发,进入选择通讯录界面。
  227 + */
  228 + shareAppMessage(data: _ShareAppMessageObject, callback: { success: Function, fail: Function, cancel: Function }) {
  229 + my.onShareAppMessage = function () {
  230 + return {
  231 + title: data.title,
  232 + bgImgUrl:'https://wxsdk-cdn.miso-lab.com/moon-island/share/zfbshare.jpeg',
  233 + // desc: ,
  234 + scImgUrl: data.imageUrl,
  235 + success: function (res) {
  236 + console.log(res);
  237 + },
  238 + fail: function (e) {
  239 + console.log(e);
  240 + },
  241 + complete: function (e) {
  242 +
  243 + }
  244 + }
  245 + }
  246 +
  247 + return my.showSharePanel({
  248 + success: () => {
  249 + callback.success();
  250 +
  251 + },
  252 + fail: () => {
  253 + callback.fail();
  254 + },
  255 + complete: (e) => {
  256 +
  257 + },
  258 + });
  259 +
  260 + }
  261 +
  262 + previewImage(imgList: Array<string>, index: number) {
  263 + return new Promise((suc, fail) => {
  264 + if (!imgList || imgList.length === 0) {
  265 + fail();
  266 + return;
  267 + }
  268 + wx.previewImage({
  269 + current: imgList[index], // 当前显示图片的http链接
  270 + urls: imgList, // 需要预览的图片http链接列表
  271 + success(res: any) {
  272 + suc({ ...res, qrcode: 1 });
  273 + },
  274 + fail(err: any) {
  275 + fail(err);
  276 + }
  277 + });
  278 + });
  279 + }
  280 +
  281 + getNetworkType(): Promise<_NetworkTypeSuccessObject> {
  282 + return new Promise((resolve, reject) => {
  283 + wx.getNetworkType({
  284 + success(res: _NetworkTypeSuccessObject) {
  285 + resolve(res);
  286 + },
  287 + fail(err: any) {
  288 + reject({ networkType: NetworkType.Unknown });
  289 + }
  290 + });
  291 + });
  292 + }
  293 +
  294 + navigateToMiniProgram(appId: string, path: string, opts: any = {}) {
  295 + return new Promise((resolve, reject) => {
  296 + wx.navigateToMiniProgram({
  297 + appId,
  298 + path,
  299 + extraData: opts.extraData || {},
  300 + envVersion: opts.envVersion || 'release',
  301 + success(res: any) {
  302 + resolve(res);
  303 + },
  304 + fail(err: any) {
  305 + reject(err);
  306 + }
  307 + });
  308 + });
  309 + }
  310 +
  311 + /**
  312 + * login获取code接口
  313 + */
  314 + login(): Promise<any> {
  315 + return new Promise((resolve, reject) => {
  316 + my.getAuthCode({
  317 + scopes: 'auth_base',
  318 + success: (res) => {
  319 + resolve(res.authCode);
  320 + },
  321 + fail: (err: any) => {
  322 + reject(err);
  323 + }
  324 + });
  325 + });
  326 + }
  327 +
  328 + /**
  329 + * 用户信息授权接口
  330 + */
  331 + getUserinfo(): Promise<any> {
  332 + return new Promise((resolve, reject) => {
  333 + my.getAuthUserInfo({
  334 + success: (ret: any) => {
  335 + if (!ret) {
  336 + console.log('getUserinfo success', ret)
  337 + reject(ret);
  338 + return AlipayApi.I.setAuthorize({
  339 + errorTip: 'getUserInfo Success result is null',
  340 + ...ret
  341 + });
  342 + }
  343 + console.log('getUserinfo success', ret)
  344 + resolve(ret);
  345 + },
  346 + fail: (err: any) => {
  347 + console.log('getUserinfo fail', err)
  348 + reject(err);
  349 + AlipayApi.I.setAuthorize({
  350 + errorTip: 'getUserInfo Fail',
  351 + ...err
  352 + });
  353 + },
  354 + complete: (res) => {
  355 + console.log('getUserinfo complete', res)
  356 + }
  357 + });
  358 + });
  359 + }
  360 +
  361 + /**
  362 + * 分享接口
  363 + * @param shareTicket
  364 + */
  365 + getShareInfo(shareTicket: string): Promise<any> {
  366 + if (!this.canIUse(Version.I.getVShareInfo())) return Promise.reject(null);
  367 +
  368 + return new Promise((resolve, reject) => {
  369 + wx.getShareInfo({
  370 + shareTicket,
  371 + success: (ret: _getShareInfoSuccessObject) => {
  372 + let { errMsg } = ret;
  373 + if (errMsg === 'getShareInfo:ok') {
  374 + resolve(ret);
  375 + } else {
  376 + reject(ret);
  377 + }
  378 + },
  379 + fail: (err: any) => {
  380 + reject(err);
  381 + }
  382 + });
  383 + });
  384 + }
  385 +
  386 + /**
  387 + * 米大师充值
  388 + */
  389 + requestMidasPayment(params: { mode: string; env: number; offerId: string; currencyType: string; platform: string; buyQuantity: number; zoneId: string }): Promise<any> {
  390 + let { mode, env, offerId, currencyType, platform, buyQuantity, zoneId } = params;
  391 + console.warn('====> PCSDK AlipayApi requestMidasPayment 支付参数', {
  392 + mode,
  393 + env,
  394 + offerId,
  395 + currencyType,
  396 + platform,
  397 + buyQuantity,
  398 + zoneId
  399 + });
  400 + return new Promise((resolve, reject) => {
  401 + wx.requestMidasPayment({
  402 + mode,
  403 + env,
  404 + offerId,
  405 + currencyType,
  406 + platform,
  407 + buyQuantity,
  408 + zoneId,
  409 + success: ret => {
  410 + if (ret && ret.errMsg === 'requestMidasPayment:ok')
  411 + resolve(ret);
  412 + else
  413 + reject(ret);
  414 + },
  415 + fail: err => {
  416 + reject(err);
  417 + }
  418 + });
  419 + });
  420 + }
  421 +
  422 + private setAuthorize(error: any) {
  423 + DataService.I.setAuthorize(false);
  424 + }
  425 +
  426 + canIncrementGameaction(): boolean {
  427 + if (window['my'] == undefined) return false;
  428 + return true;
  429 + }
  430 + /**
  431 + * 玩一玩增量行为
  432 + */
  433 + incrementGameaction(action_code: string) {
  434 + return new Promise((resolve, reject) => {
  435 + if (window['my'] == undefined) return reject(null);
  436 + let channel = 'other';
  437 + let info = my.getLaunchOptionsSync();
  438 + if (info.query.channel == undefined) {
  439 + channel = 'other';
  440 + } else {
  441 + if (info.query.channel.length <= 0 || info.query.channel == null) {
  442 + channel = 'other';
  443 + } else {
  444 + channel = info.query.channel;
  445 + }
  446 + }
  447 + // my.alert({
  448 + // title: '增加量行为',
  449 + // content:`${action_code}`
  450 + // });
  451 + let uid = DataService.I.UserId;
  452 + let token = DataService.I.Token;
  453 + let openid = DataService.I.OpenId;
  454 + let action_finish_channel = channel
  455 + let params = {
  456 + uid,
  457 + token,
  458 + openid,
  459 + action_code,
  460 + action_finish_channel
  461 + };
  462 + return SDKApi.incrementGameaction(params).then(() => {
  463 + // my.confirm({
  464 + // title: '增加量行为',
  465 + // content: `${action_code}`,
  466 + // confirmButtonText: ``,
  467 + // cancelButtonText: '暂不需要',
  468 + // success: (result) => {
  469 + // },
  470 + // });
  471 + resolve(null)
  472 + })
  473 + })
  474 + }
  475 +
  476 +
  477 + private static _instance: AlipayApi;
  478 + static get I(): AlipayApi {
  479 + return this._instance || (this._instance = new AlipayApi);
  480 + }
  481 +
  482 +}
... ...
wxsdk/alipay/AlipayBanner.ts 0 → 100644
... ... @@ -0,0 +1,238 @@
  1 +
  2 +// import SDKUtils from "../utils/SDKUtils";
  3 +// import { BannerError, __LOG__ } from "../base/SDKConst";
  4 +// import LogService from "../service/LogService";
  5 +// import { DOT_AD_STATUS, DOT_AD_TYPE } from "../base/SDKEnum";
  6 +// import WxSystem from "../wx/WxSystem";
  7 +// import AlipayApi from "./AlipayApi";
  8 +
  9 +
  10 +// /*
  11 +// * banner
  12 +// */
  13 +// export default class AlipayBanner {
  14 +// private static instance: AlipayBanner;
  15 +// static get I(): AlipayBanner {
  16 +// return this.instance || (this.instance = new AlipayBanner(750, 750));
  17 +// }
  18 +// private designWidth: number;
  19 +// private bannerWidth: number;
  20 +// private bannerHeight: number;
  21 +// private bannerScale: number;
  22 +// private bannerParams: any;
  23 +// private _isErrored: boolean;
  24 +// private adUnitId: string;
  25 +// private bannerAd: any;
  26 +// private resolve: any;
  27 +// private reject: any;
  28 +
  29 +// constructor(designWidth: number, bannerWidth: number) {
  30 +// designWidth = designWidth || 750;
  31 +// bannerWidth = bannerWidth || 750;
  32 +
  33 +// this.adUnitId = '';
  34 +// this._isErrored = false;
  35 +// this.designWidth = designWidth;
  36 +// this.bannerScale = WxSystem.I.winWidth / this.designWidth;
  37 +// this.bannerWidth = Math.max(this.bannerScale * bannerWidth, 300);
  38 +// this.bannerHeight = WxSystem.I.winHeight / this.bannerScale;
  39 +// }
  40 +
  41 +// get isErrored() {
  42 +// return this._isErrored;
  43 +// }
  44 +
  45 +// private queue: Function[] = [];
  46 +// private isEnd: boolean = false;
  47 +
  48 +// create(adUnitId: string, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean }) {
  49 +// // console.log('wxbanner can not')
  50 +// if (SDKUtils.compareVersion(my.env.clientVersion, '10.3.66') < 0) return null;
  51 +// // if (!WxApi.I.canIUse(Version.I.getVBannerAd()))
  52 +// // console.log('wxbanner can', adUnitId)
  53 +
  54 +// this.bannerParams = opts || {};
  55 +// if (opts && opts.bannerWidth) {
  56 +// this.bannerWidth = opts.bannerWidth;
  57 +// }
  58 +// this.isEnd = true;
  59 +// this.bannerParams.type = this.bannerParams.type || 1;
  60 +// this.bannerParams.offsetY = -this.bannerParams.offsetY || 0;
  61 +// this.bannerParams.adIntervals = this.bannerParams.adIntervals || 120;
  62 +// return new Promise((resolve, reject) => {
  63 +// this.resolve = resolve;
  64 +// this.reject = reject;
  65 +// this._isErrored = false;
  66 +// this.adUnitId = adUnitId;
  67 +
  68 +// if (SDKUtils.isEmpty(adUnitId)) {
  69 +// AlipayBanner.I.handleQueue();
  70 +// return this.reject({ ...BannerError.BannerInvalid, adUnitId: this.adUnitId });
  71 +// }
  72 +
  73 +// // 设置样式(hack:修复qq版本)
  74 +// this.bannerParams.type === 2 && (this.bannerWidth = WxSystem.I.winWidth);
  75 +// let style = { top: 0, left: (WxSystem.I.winWidth - this.bannerWidth) / 2, width: this.bannerWidth };
  76 +// style = {
  77 +// ...style,
  78 +// top: WxSystem.I.winHeight - 100,
  79 +// };
  80 +// // 创建并判断是否存在
  81 +// // if (this.bannerParams.type === 2)
  82 +// // this.bannerAd = wx.createGameBanner({ adUnitId, style: { left: style.left, top: this.bannerHeight } });
  83 +// // else
  84 +// if (this.bannerAd) {
  85 +// if (!opts || (opts && !opts.isOff)) {
  86 +// this.show(false);
  87 +// }
  88 +// return
  89 +// }
  90 +// this.bannerAd = AlipayApi.I.createBannerAd(adUnitId, style);
  91 +// LogService.I.adStat('banner', this.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.request)
  92 +// if (!this.bannerAd) {
  93 +// AlipayBanner.I.handleQueue();
  94 +// return this.reject({ ...BannerError.BannerNotOpen, adUnitId: this.adUnitId });
  95 +// }
  96 +// this.bannerAd.onLoad(this.onLoad);
  97 +// this.bannerAd.onError(this.onError);
  98 +// //支付宝无这个方法!!!
  99 +// // this.bannerAd.onResize(this.onResize);
  100 +// if (!opts || (opts && !opts.isOff)) {
  101 +// this.show(false);
  102 +// }
  103 +// });
  104 +// }
  105 +
  106 +// /**
  107 +// *
  108 +// * @param bol
  109 +// */
  110 +// show(bol: boolean = true): boolean {
  111 +// if (AlipayBanner.I.isEnd && bol) {
  112 +// AlipayBanner.I.queue.push(AlipayBanner.I.show.bind(AlipayBanner.I))
  113 +// return
  114 +// }
  115 +// AlipayBanner.I.isEnd = true
  116 +// if (this.bannerAd) {
  117 +// if (this.bannerAd.style.realHeight)
  118 +// this.bannerAd.style.top = WxSystem.I.winHeight - this.bannerAd.style.realHeight + this.bannerParams.offsetY;
  119 +// if (this.bannerParams.type === 2) {
  120 +// if (this.bannerAd.style.width)
  121 +// this.bannerAd.style.left = (WxSystem.I.winWidth - this.bannerAd.style.width) / 2;
  122 +// else
  123 +// this.bannerAd.style.left = (WxSystem.I.winWidth - this.bannerWidth) / 2;
  124 +// } else
  125 +// this.bannerAd.style.left = (WxSystem.I.winWidth - this.bannerWidth) / 2;
  126 +
  127 +// LogService.I.adStat('banner', this.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.show)
  128 +// this.bannerAd.show().catch((err: any) => this.handleShowError(err));
  129 +// __LOG__ && console.error('wxBanner - show: ' + this.adUnitId, this.bannerAd.style);
  130 +// AlipayBanner.I.handleQueue()
  131 +// return true;
  132 +// }
  133 +// AlipayBanner.I.handleQueue()
  134 +// return false;
  135 +// }
  136 +
  137 +// hide() {
  138 +// let that = AlipayBanner.I;
  139 +// if (that.isEnd) {
  140 +// that.queue.push(that.hide.bind(that))
  141 +// return
  142 +// }
  143 +// that.isEnd = true
  144 +// if (this.bannerAd) {
  145 +// this.bannerAd.style.left = -9999;
  146 +// this.bannerAd.hide();
  147 +// LogService.I.adStat('banner', that.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.interrupt)
  148 +// __LOG__ && console.error('wxBanner - hide: ' + this.adUnitId);
  149 +// }
  150 +// that.handleQueue()
  151 +// }
  152 +
  153 +// toggle(isshow: boolean) {
  154 +// isshow ? this.show() : this.hide();
  155 +// }
  156 +
  157 +// destory() {
  158 +// if (this.bannerAd) {
  159 +// this.bannerAd.style.left = -9999;
  160 +// this.bannerAd.destroy();
  161 +// this.bannerAd = null;
  162 +// LogService.I.adStat('banner', this.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.interrupt)
  163 +// __LOG__ && console.error('wxBanner - destory: ' + this.adUnitId);
  164 +// }
  165 +// }
  166 +
  167 +// private onLoad() {
  168 +// let that = AlipayBanner.I;
  169 +// let bannerAd = that.bannerAd;
  170 +// if (!bannerAd) return;
  171 +// // Platform.IsQQ && that.show();
  172 +// __LOG__ && console.error('wxBanner - onLoad: ' + that.adUnitId);
  173 +// if (bannerAd.style.realHeight)
  174 +// bannerAd.style.top = WxSystem.I.winHeight - bannerAd.style.realHeight + that.bannerParams.offsetY;
  175 +// that.unbind();
  176 +// that.handleQueue();
  177 +// that.resolve && that.resolve({
  178 +// adUnitId: that.adUnitId,
  179 +// scale: that.bannerScale,
  180 +// width: bannerAd.style.realWidth / that.bannerScale,
  181 +// height: bannerAd.style.realHeight / that.bannerScale
  182 +// });
  183 +// }
  184 +
  185 +// private onError(err: any, ...params) {
  186 +// __LOG__ && console.error('wxBanner - onError', err, JSON.stringify(err), params);
  187 +// let that = AlipayBanner.I;
  188 +// !that._isErrored && that.handleError(err, { ...BannerError.BannerFail, adUnitId: that.adUnitId });
  189 +// }
  190 +
  191 +// private onResize() {
  192 +// let that = AlipayBanner.I;
  193 +// let bannerAd = that.bannerAd;
  194 +// if (!bannerAd) return;
  195 +// bannerAd.style.top = WxSystem.I.winHeight - bannerAd.style.realHeight + that.bannerParams.offsetY;
  196 +// bannerAd.style.left = (WxSystem.I.winWidth - bannerAd.style.realWidth) / 2;
  197 +// }
  198 +
  199 +// private handleShowError(ret: { errCode: number; errMsg: string }) {
  200 +// __LOG__ && console.error('wxBanner - handleShowError', ret);
  201 +// let that = AlipayBanner.I;
  202 +// let { errCode, errMsg } = ret;
  203 +// !that.isErrored && that.handleError(ret, { code: errCode, msg: errMsg });
  204 +// }
  205 +
  206 +// private handleError(ret: any, err: any) {
  207 +// let that = AlipayBanner.I;
  208 +// that.unbind();
  209 +// that._isErrored = true;
  210 +// that.bannerAd = null;
  211 +// that.handleQueue()
  212 +// LogService.I.adStat('banner', that.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.fail)
  213 +// that.reject && that.reject({ ...err, adUnitId: that.adUnitId });
  214 +// __LOG__ && console.error('wxBanner - onError: ' + that.adUnitId, ret, err);
  215 +// }
  216 +
  217 +// private unbind() {
  218 +// if (this.bannerAd) {
  219 +// // this.bannerAd.offLoad(this.onLoad);
  220 +// // this.bannerAd.offError(this.onError);
  221 +// // this.bannerAd.offResize(this.onResize);
  222 +// }
  223 +// }
  224 +
  225 +// /**
  226 +// * 处队列
  227 +// */
  228 +// handleQueue() {
  229 +// let that = AlipayBanner.I;
  230 +// if (that.queue.length > 0) {
  231 +// that.isEnd = false;
  232 +// let fn = that.queue.shift();
  233 +// fn();
  234 +// } else {
  235 +// that.isEnd = false;
  236 +// }
  237 +// }
  238 +// }
0 239 \ No newline at end of file
... ...
wxsdk/alipay/AlipayInterstitial.ts 0 → 100644
... ... @@ -0,0 +1,68 @@
  1 +// import { GAMEDATA } from "../base/SDKConst";
  2 +// import { DOT_AD_STATUS, DOT_AD_TYPE } from "../base/SDKEnum";
  3 +// import LogService from "../service/LogService";
  4 +// import AlipayApi from "./AlipayApi";
  5 +
  6 +// export default class AlipayInterstitial {
  7 +// /** 插屏广告ID */
  8 +// private static interstitialAdId: string = GAMEDATA.interstitialAdId;
  9 +// /** 插屏广告实例 */
  10 +// public static interstitialAd: any;
  11 +// /** 插屏广告是否加载完成 */
  12 +// private static interstitialSuccell: boolean = false;
  13 +// /** 初始化插屏广告 */
  14 +// public static initInterstitialAd(adUnitId: string = GAMEDATA.interstitialAdId) {
  15 +// this.interstitialAdId = adUnitId;
  16 +// this.createInterstitial();
  17 +// }
  18 +
  19 +// /** 显示插屏广告 */
  20 +// public static showInterstitialAd(adUnitId: string = GAMEDATA.interstitialAdId) {
  21 +// return new Promise(async (resolve, reject) => {
  22 +// this.interstitialAdId = adUnitId;
  23 +// if (!this.interstitialSuccell) {
  24 +// this.createInterstitial(true, resolve);
  25 +// return;
  26 +// }
  27 +// this.interstitialAd.show().then(suc => {
  28 +// resolve && resolve({ code: 0, msg: "展示成功!" });
  29 +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.show)
  30 +// }).catch((err) => {
  31 +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.fail)
  32 +// resolve && resolve({ code: err.errCode, msg: err.errMsg });
  33 +// })
  34 +// })
  35 +// }
  36 +
  37 +// /** 创建插屏广告 */
  38 +// private static createInterstitial(isShow: boolean = false, resolve?) {
  39 +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.request)
  40 +// this.interstitialAd = AlipayApi.I.createInterstitialAd(this.interstitialAdId);
  41 +// this.interstitialAd.onLoad(async () => {
  42 +// AlipayInterstitial.interstitialSuccell = true;
  43 +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.rt)
  44 +// if (isShow) {
  45 +// this.interstitialAd.show().then(suc => {
  46 +// resolve && resolve({ code: 0, msg: "展示成功!" });
  47 +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.show)
  48 +// }).catch((err) => {
  49 +// AlipayInterstitial.interstitialSuccell = false;
  50 +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.fail)
  51 +// resolve && resolve({ code: err.errCode, msg: err.errMsg });
  52 +// })
  53 +// }
  54 +// })
  55 +// this.interstitialAd.onError(err => {
  56 +// LogService.I.adStat('InterstitialAd', this.interstitialAdId, DOT_AD_TYPE.interstitial, DOT_AD_STATUS.fail)
  57 +// AlipayInterstitial.interstitialSuccell = false;
  58 +// resolve && resolve({ code: err.errCode, msg: err.errMsg });
  59 +// })
  60 +
  61 +// this.interstitialAd.onClose(call => {
  62 +// this.createInterstitial(false);
  63 +// })
  64 +// // }).bind(this), 200);
  65 +
  66 +
  67 +// }
  68 +// }
0 69 \ No newline at end of file
... ...
wxsdk/alipay/zfbPay.ts 0 → 100644
... ... @@ -0,0 +1,183 @@
  1 +import { WxHelper } from '../../../game/sdk/WxHelper';
  2 +import { GAMEDATA } from '../base/SDKConst';
  3 +import { EnvCode } from '../base/SDKEnum';
  4 +import { SDKApi } from '../http/SDKApi';
  5 +import DataService from '../service/DataService';
  6 +import WxSystem from '../wx/WxSystem';
  7 +
  8 +export default class ZfbPay {
  9 + /**
  10 + * 发起支付
  11 + */
  12 + pay(params: { payid: string, goodid: string, money: number; orderid: string }, opts: any = {}): Promise<any> {
  13 + return new Promise((resolve, reject) => {
  14 + let { Mode, OfferId, ZoneId, CurrencyType, Platform } = GAMEDATA.MidasPay;
  15 + // 环境配置,0:米大师正式环境 1:米大师沙箱环境
  16 + let env = DataService.I.EnvEnum === EnvCode.Prod ? 0 : 1;
  17 + // 平台类型,android or ios,config.js有配置走配置,否则判断系统id
  18 + let platform = DataService.I.Platform;
  19 + let pms = {
  20 + mode: Mode,
  21 + env,
  22 + platform,
  23 + offerId: OfferId,
  24 + currencyType: CurrencyType,
  25 + buyQuantity: params.money / 10,
  26 + zoneId: ZoneId
  27 + };
  28 + let extend = "";
  29 + for (let key in opts) {
  30 + extend += (`${key}=${opts[key]}&`)
  31 + }
  32 + extend = extend.substring(0, extend.length - 1);
  33 + extend = encodeURIComponent(extend);
  34 +
  35 + let payParams = {
  36 + ...this.buildParams(),
  37 + extend,
  38 + orderid: params.orderid,
  39 + // payid: params.payid,
  40 + goodid: params.goodid,
  41 + money: params.money,
  42 + platform
  43 + };
  44 + SDKApi.zfbOrderReport(payParams).then(res => {
  45 + console.log("res:" + JSON.stringify(res));
  46 + console.log("调用函数成功00");
  47 + if (!res.code) {
  48 + let { customId, buyQuantity, extraInfo } = res.data;
  49 + my.requestGamePayment({
  50 + customId,
  51 + buyQuantity,
  52 + extraInfo,
  53 + success(res) {
  54 + console.log("调用函数成功");
  55 + resolve({ code: 0, msg: '支付成功!' })
  56 + },
  57 + fail(err) {
  58 + console.log("调用函数失败");
  59 + if (err && err.error) {
  60 + if ("" + err.error == '15215') {
  61 + my.alert({
  62 + title: '您好,基于国家新闻出版署《关于防止未成年人沉迷网络游戏的通知》的规定,支付宝限制未成年人游戏充值哦',
  63 + });
  64 + } else if ("" + err.error == '15204') {
  65 + my.alert({
  66 + title: '非常抱歉,充值功能暂不可用,请稍后再试',
  67 + });
  68 + }
  69 + }
  70 + resolve({ code: err.errCode, msg: '支付失败' });
  71 + },
  72 + complete(res) {
  73 + try {
  74 + console.log(JSON.stringify(res));
  75 + } catch (error) {
  76 +
  77 + }
  78 + console.log(res)
  79 + console.log("调用完成");
  80 + },
  81 + })
  82 + } else {
  83 + console.log("调用函数成功222");
  84 + reject(res);
  85 + }
  86 + })
  87 + });
  88 + }
  89 +
  90 + private async handlePaySuccess(data: { payid: string, goodid: string, money: number; orderid: string, platform: string }, opts: any, resolve: any, reject: any, t = 1000) {
  91 + let extend = "";
  92 + for (let key in opts) {
  93 + extend += (`${key}=${opts[key]}&`)
  94 + }
  95 + extend = extend.substring(0, extend.length - 1);
  96 + extend = encodeURIComponent(extend);
  97 + let params = {
  98 + ...this.buildParams(),
  99 + extend,
  100 + midasenv: DataService.I.EnvEnum === EnvCode.Prod ? 0 : 1,
  101 + orderid: data.orderid,
  102 + payid: data.payid, goodid: data.goodid,
  103 + type: 1,
  104 + money: data.money,
  105 + platform: data.platform
  106 + };
  107 + var that = this;
  108 + SDKApi.zfbOrderReport(params)
  109 + .then(res => {
  110 + if (!res.code) {
  111 + resolve(res);
  112 + } else {
  113 + t = Math.min(t * 2, 60000)
  114 + setTimeout(() => {
  115 + that.handlePaySuccess(data, opts, resolve, reject, t)
  116 + }, t);
  117 + }
  118 + })
  119 + }
  120 +
  121 + private handlePayError(data: { payid: string, goodid: string, money: number; orderid: string, platform: string }, opts, err: any, reject: any) {
  122 + console.log("支付失败", JSON.stringify(err));
  123 + let type = 2;
  124 + if (err.errCode + '' == '1') {
  125 + type = 3;
  126 + }
  127 + let extend = "";
  128 + for (let key in opts) {
  129 + extend += (`${key}=${opts[key]}&`)
  130 + }
  131 + extend = extend.substring(0, extend.length - 1);
  132 + extend = encodeURIComponent(extend);
  133 + let params = {
  134 + ...this.buildParams(),
  135 + extend,
  136 + midasenv: DataService.I.EnvEnum === EnvCode.Prod ? 0 : 1,
  137 + orderid: data.orderid,
  138 + payid: data.payid, goodid: data.goodid,
  139 + type,
  140 + money: data.money,
  141 + platform: data.platform
  142 + };
  143 + SDKApi.zfbOrderReport(params)
  144 + reject(err);
  145 + }
  146 +
  147 + /**
  148 + * 构建支付公用参数
  149 + */
  150 + private buildParams() {
  151 + let gameid = GAMEDATA.game_id;
  152 + let channel = DataService.I.ChannelId;
  153 + let openid = DataService.I.OpenId;
  154 + let brand = WxSystem.I.brand;
  155 + let model = WxSystem.I.model;
  156 + let version = WxSystem.I.version;
  157 + let system = WxSystem.I.system;
  158 + let sdkversion = WxSystem.I.SDKVersion;
  159 + let scene = DataService.I.Scene + '';
  160 + let uid = DataService.I.UserId;
  161 + let token = DataService.I.Token;
  162 + let env = DataService.I.EnvEnum === 1 ? 'pre' : 'prod';
  163 + return {
  164 + gameid,
  165 + openid,
  166 + channel,
  167 + brand,
  168 + model,
  169 + version,
  170 + system,
  171 + sdkversion,
  172 + scene,
  173 + uid,
  174 + token,
  175 + env
  176 + };
  177 + }
  178 +
  179 + private static _instance: ZfbPay;
  180 + static get I(): ZfbPay {
  181 + return this._instance || (this._instance = new ZfbPay);
  182 + }
  183 +}
0 184 \ No newline at end of file
... ...
wxsdk/base/SDKBaseData.ts
1 1 export default class SDKBaseData{
2   - public static SimulateShareTime:number = 3000;
  2 + public static SimulateShareTime:number = 1000;
3 3 }
4 4 \ No newline at end of file
... ...
wxsdk/base/SDKConst.ts
1 1 // 游戏配置数据 只需要改动这里的配置信息
2   -// 游戏配置数据 只需要改动这里的配置信息
3   -
4 2 export const GAMEDATA = {
5   - game_id: '10001',//游戏id
6   - channel_id: '10001',//渠道id 暂时和游戏id一致
7   - version: '1.0.1', //版本号 中台控制正式还是测试服,尽量保持和小游戏版本一致
8   - appkey: 'd959274a83ea3b95bd1d9b765683e777',//中台appkey
  3 + game_id: '10110',//游戏id
  4 + isDebug: false,
  5 + channel_id: '10110',//渠道id 暂时和游戏id一致
  6 + version: '1.0.0', //版本号 中台控制正式还是测试服,尽量保持和小游戏版本一致
  7 + appkey: '48ef655c48f53f1e75f2108cf65d394e',//中台appkey
9 8 interstitialAdId: 'adunit-4bd19de3c351233e',//插屏ID
10   - bannerId: 'adunit-25341fff11681315',//banner
  9 + bannerId: 'adunit-6145b17777e308a8',//banner
11 10 customId: 'adunit-193590de82ede6a4',//原生模板单个
12   - videoAd: 'adunit-638f9158bce2c31e',//初始化视频广告id
  11 + videoAd: 'adunit-59404ef14e6c32ed',//初始化视频广告id
13 12 shareMessageToFriend: { // 暂时只支持一个场景值
14 13 scene: 0, //定向分享场景值1-50 配>0的会初始化
15 14 sharekey: 'shareMessageToFriendScene',//定向分享对应后台的分享key
16 15 share_id: 26,//定向分享对应后台的分享key
17 16 },
18 17 default_share: { //默认分享数据在拉取不到中台分享数据的时候用
19   - content: '全新版本的连连消,等你来玩!',//分享标题 *找运营提供
20   - icon: 'xxxx',//分享图链接 *找运营提供
  18 + content: '惊喜世界合不停',//分享标题 *找运营提供
  19 + icon: 'https://cdn-wxsdk.miso-lab.com/7d/da1ed3fb6073ddd43f156f98c625e3.jpg',//分享图链接 *找运营提供
21 20 id: '9999',//默认id 写死9999
22 21 key: 'default',//默认分享key 写死default
23 22 title: '默认',//无需修改
24 23 typ: 1,//分享类型 写死1
25 24 videoid: '',//默认的视频广告id 填空就行
26 25 },
27   - MidasPay: { // 米大师虚拟支付配置
28   - OfferId: "xxxx", // 在米大师申请的应用id
  26 + MidasPay: { // 米大师虚拟支付配置 *找运营提供
  27 + OfferId: "1450051274", // 在米大师申请的应用id *找运营提供
29 28 ZoneId: "1", // 分区ID,默认:1
30 29 Mode: "game", // 默认:game
31 30 CurrencyType: "CNY", // 默认:CNY
... ... @@ -33,9 +32,8 @@ export const GAMEDATA = {
33 32 }
34 33 }
35 34  
36   -
37 35 // sdk版本
38   -export const SDKVersion = 'v1.0.16';
  36 +export const SDKVersion = 'v1.0.15';
39 37 // 是否打印
40 38 export const __LOG__ = false;
41 39 // 是否mock
... ... @@ -43,8 +41,6 @@ export var sdkEnv = {
43 41 isDebug: false
44 42 };
45 43  
46   -
47   -
48 44 //游戏基础信息
49 45 export const VersionHost = 'https://wxsdk-ver.d3games.com/version';
50 46  
... ... @@ -106,7 +102,7 @@ export const HostKeys = {
106 102 rankAdd: 'api/rank/add', //排行榜添加分数 517废弃
107 103 rankList: 'api/rank/list', //世界排行榜 517废弃
108 104 totalrankAdd: 'game/totalrank/add', //排行榜添加分数
109   - totalrankList: 'game/totalrank/list', //世界排行榜
  105 + totalrankList: 'game/totalrank/list', //世界排行榜
110 106 adList: 'api/adplan/list', //广告计划列表
111 107 behavior: 'api/douyin/behavior', //抖音投放关键行为
112 108 attribute: 'api/member/attribute/set', //修改用户属性
... ... @@ -120,8 +116,13 @@ export const HostKeys = {
120 116 preorder: 'api/order/v2/preorder', //获取支付方式
121 117 bytedanceOrderReport: 'api/order/v2/bytedance', //字节订单信息上报
122 118 qqOrderReport: 'api/order/v2/qq', //qq订单信息上报
  119 + zfbOrderReport:'api/order/v2/zfb/add', //支付宝小游戏订单上报
123 120 //
124 121 goodslist: 'api/v2/goodslist', //商品列表
  122 +
  123 +
  124 + //支付宝
  125 + AlipayIncrementGameaction: 'api/ali/action/submit' ,//玩一玩:增量游戏行为完成上报
125 126 };
126 127  
127 128 // 本地存储keys
... ...
wxsdk/base/wx.d.ts
1 1  
2 2 declare const wx;
3   -declare const qq;
4 3 \ No newline at end of file
  4 +declare const qq;
  5 +declare const my;
5 6 \ No newline at end of file
... ...
wxsdk/http/SDKApi.ts
... ... @@ -84,6 +84,16 @@ export class SDKApi {
84 84 public static qqOrderReport = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.qqOrderReport, ...args);
85 85 public static orderQuery = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.orderQuery, ...args);
86 86 public static preorder = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.preorder, ...args);
  87 + public static zfbOrderReport = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.zfbOrderReport, ...args);
87 88  
88 89 public static goodslist = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.goodslist, ...args);
  90 +
  91 +
  92 + //支付宝
  93 + /**
  94 + * 玩一玩增量行为
  95 + * @param args
  96 + * @returns
  97 + */
  98 + public static incrementGameaction = (...args) => SDKHttp.httpPost(DataService.I.GameApi, HostKeys.AlipayIncrementGameaction, ...args);
89 99 }
... ...
wxsdk/http/SDKHttp.ts
... ... @@ -43,9 +43,9 @@ export default class SDKHttp {
43 43 responseText = JSON.parse(responseText);
44 44 // cc.log("responseText22", responseText)
45 45 if (url.indexOf('.json') > -1) {
46   - resolve({ code: 0, data: responseText, msg: responseText.msg , servertime: responseText.servertime});
  46 + resolve({ code: 0, data: responseText, msg: responseText.msg, servertime: responseText.servertime });
47 47 } else {
48   - resolve({ code: +responseText.code, data: responseText.data, msg: responseText.msg , servertime: responseText.servertime});
  48 + resolve({ code: +responseText.code, data: responseText.data, msg: responseText.msg, servertime: responseText.servertime });
49 49 }
50 50 return
51 51 } catch (ex) {
... ... @@ -55,37 +55,30 @@ export default class SDKHttp {
55 55 }
56 56 } else {
57 57 console.error(xhr.status, '网络请求失败!');
58   - resolve({ code: -1 });
  58 + resolve({ code: -2 });
59 59 }
60 60 }
61 61 };
62 62  
63 63 xhr.ontimeout = function (info): void {
64 64 // cc.error("info1", info)
65   - resolve({ msg: `请求超时!`, code: -1 });
  65 + resolve({ msg: `请求超时!`, code: -3 });
66 66 }
67 67 xhr.onerror = function (info): void {
68 68 // cc.error("info2", info)
69   - resolve({ msg: `请求失败!`, code: -1 });
  69 + resolve({ msg: `请求失败!`, code: -4 });
70 70 }
71 71 xhr.onabort = function (info): void {
72 72 // cc.error("info3", info)
73   - resolve({ msg: `请求失败!`, code: -1 });
  73 + resolve({ msg: `请求失败!`, code: -5 });
74 74 }
75 75  
76 76 xhr.open(method, url, true);
77 77  
78 78 if (method == "POST") {
79 79 xhr.setRequestHeader("Content-Type", "application/json;charset=utf-8")//application/x-www-form-urlencoded
80   - // if (cc.sys.os === 'Android') {
81   - // cc.error("http__uid", AppSdkData.I.uid);
82   - // xhr.setRequestHeader('Uuid', `${AppSdkData.I.uid}`);
83   - // } else {
84   - // xhr.setRequestHeader('Uuid', `909`);
85   - // }
86   -
87 80 }
88   - xhr.timeout = 3000;
  81 + xhr.timeout = 10000;
89 82 xhr.send(data);
90 83 });
91 84 }
... ...
wxsdk/platform/wx/WxStorage.ts.meta
1 1 {
2   - "ver": "1.0.8",
  2 + "ver": "4.0.23",
  3 + "importer": "typescript",
  4 + "imported": true,
3 5 "uuid": "6013014c-7aa3-4eb4-b818-583d937a9f05",
4   - "isPlugin": false,
5   - "loadPluginInWeb": true,
6   - "loadPluginInNative": true,
7   - "loadPluginInEditor": false,
8   - "subMetas": {}
9   -}
10 6 \ No newline at end of file
  7 + "files": [],
  8 + "subMetas": {},
  9 + "userData": {}
  10 +}
... ...
wxsdk/service/AdService.ts
... ... @@ -5,6 +5,7 @@ import WxInterstitial from &quot;../wx/WxInterstitial&quot;;
5 5 import { GAMEDATA } from "../base/SDKConst";
6 6 import LogService from "./LogService";
7 7 import DouyinInterstitial from "../douyin/DouyinInterstitial";
  8 +import { sys } from "cc";
8 9  
9 10  
10 11  
... ... @@ -16,7 +17,7 @@ export default class AdService {
16 17 * @param adUnitId
17 18 * @param opts
18 19 */
19   - createBanner(adUnitId: string, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean }) {
  20 + createBanner(adUnitId: string, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean,isCreate?:boolean }) {
20 21 return WxBanner.I.create(adUnitId, opts);
21 22 }
22 23 /**
... ... @@ -44,7 +45,7 @@ export default class AdService {
44 45 * @param adUnitId
45 46 */
46 47 createInterstitialAd(adUnitId: string) {
47   - if (cc.sys.platform === cc.sys.BYTEDANCE_GAME) {
  48 + if (sys.platform === sys.Platform.BYTEDANCE_MINI_GAME) {
48 49 return DouyinInterstitial.showInterstitialAd(adUnitId);
49 50 } else {
50 51 return WxInterstitial.showInterstitialAd(adUnitId)
... ...
wxsdk/service/DataService.ts
... ... @@ -17,7 +17,7 @@ export default class DataService {
17 17 // 0点数据变动
18 18 let expiration = +((this.nextDay() - Date.now()) / 1000).toFixed(0);
19 19 setTimeout(this.resetData.bind(this), expiration * 1000);
20   - if (typeof wx != 'undefined') {
  20 + if (typeof wx != 'undefined' || typeof my != 'undefined') {
21 21 wx.onShow(this.onShow.bind(this));
22 22 wx.onHide(this.onHide.bind(this));
23 23 }
... ...
wxsdk/service/GameService.ts
1   -import DataService from "./DataService";
2   -import { SDKApi } from "../http/SDKApi";
  1 +import { sys } from "cc";
3 2 import { GAMEDATA, SDKVersion, __LOG__ } from "../base/SDKConst";
4   -import WxLogin from "../wx/WxLogin";
  3 +import DouyinPay from "../douyin/DouyinPay";
  4 +import { SDKApi } from "../http/SDKApi";
  5 +import QQPay from "../qq/QQPay";
5 6 import WxApi from "../wx/WxApi";
  7 +import WxLogin from "../wx/WxLogin";
6 8 import WxPay from "../wx/WxPay";
7 9 import WxSystem from "../wx/WxSystem";
8   -import DouyinPay from "../douyin/DouyinPay";
9   -import QQPay from "../qq/QQPay";
  10 +import DataService from "./DataService";
  11 +import ZfbPay from "../alipay/zfbPay";
10 12  
11 13  
12 14 export default class GameService {
... ... @@ -69,31 +71,22 @@ export default class GameService {
69 71 }
70 72  
71 73  
72   - subScribe(tmplIds: Array<string>, ids: Array<string>): Promise<any> {
  74 + subScribe(tmplIds: Array<string>, success: Function, fail: Function): Promise<any> {
73 75 return new Promise((resolve, reject) => {
74 76 WxApi.I.subscribeMessage(tmplIds)
75 77 .then((ret: any) => {
76 78 ret = ret || {};
77 79 let acceptKeys = tmplIds.filter((idKey: string) => ret[idKey] && ret[idKey] === 'accept');
78 80 if (!acceptKeys.length) {
79   - reject({ errCode: 0, errMsg: '点击取消订阅' });
  81 + fail()
  82 + resolve({ errCode: 0, errMsg: '点击取消订阅' });
80 83 } else {
81   - let uid = +DataService.I.UserId;
82   - let token = DataService.I.Token + '';
83   - let openid = DataService.I.OpenId + '';
84   - let id = ids//JSON.stringify()
85   - SDKApi.subscribe({
86   - uid,
87   - token,
88   - openid,
89   - status: 1,
90   - id,
91   - })
92   - resolve({ code: 0, msg: '订阅成功!' })
  84 + success(acceptKeys)
  85 + console.log('订阅成功', ret, acceptKeys)
  86 + resolve(ret);
93 87 }
94   -
95 88 })
96   - .catch(err => reject(err));
  89 + .catch(err => resolve(err));
97 90 });
98 91 }
99 92  
... ... @@ -104,10 +97,12 @@ export default class GameService {
104 97 * @returns
105 98 */
106 99 pay(params: { payid: string, goodid: string, money: number; orderid: string }, opts: any = {}) {
107   - if (cc.sys.platform === cc.sys.BYTEDANCE_GAME) {
  100 + if (sys.platform === sys.Platform.BYTEDANCE_MINI_GAME) {
108 101 return DouyinPay.I.pay(params, opts);
109 102 } else {
110   - if (typeof qq != 'undefined') {
  103 + if (typeof my != 'undefined') {
  104 + return ZfbPay.I.pay(params, opts);
  105 + } else if (typeof qq != 'undefined') {
111 106 console.log("QQ支付")
112 107 return QQPay.I.pay(params, opts);
113 108 } else {
... ... @@ -161,19 +156,18 @@ export default class GameService {
161 156 /**
162 157 * 更换昵称和头像
163 158 */
164   - updateNickname(nickname: string, headurl: string) {
  159 + updateNickname(nickname: string, headurl: string) {
165 160 let gameid = GAMEDATA.game_id;
166 161 let uid = DataService.I.UserId;
167 162 let token = DataService.I.Token;
168 163 let pkv = SDKVersion;
169 164 return SDKApi.updateNickname({
170   - gameid,uid,token,pkv,
  165 + gameid, uid, token, pkv,
171 166 nickname, headurl
172 167 })
173 168 }
174 169  
175 170  
176   -
177 171 /**
178 172 * 构建登录/弱登录公用参数
179 173 */
... ...
wxsdk/service/LogService.ts
... ... @@ -458,25 +458,25 @@ export default class LogService {
458 458 /**
459 459 * 客户端日志
460 460 */
461   - clientLog(content, level = LogLevel.debug) {
  461 + clientLog(content, level = SDKLogLevel.debug) {
462 462 SDKApi.client_log({
463 463 APIVersion: '0.6.0',
464 464 gameid: GAMEDATA.game_id,
465 465 cacheUserId: StorageUtils.I.get("userId") || "0",
466   - level: LogLevel[level],
  466 + level: SDKLogLevel[level],
467 467 content
468 468 })
469 469 switch (level) {
470   - case LogLevel.error:
  470 + case SDKLogLevel.error:
471 471 console.error(content);
472 472 break;
473   - case LogLevel.debug:
  473 + case SDKLogLevel.debug:
474 474 console.log(content);
475 475 break;
476   - case LogLevel.info:
  476 + case SDKLogLevel.info:
477 477 console.info(content);
478 478 break;
479   - case LogLevel.warning:
  479 + case SDKLogLevel.warning:
480 480 console.warn(content);
481 481 break;
482 482 default:
... ... @@ -586,7 +586,7 @@ export default class LogService {
586 586 error:更严重的问题,软件没能执行一些功能
587 587 critical:一个严重的错误,这表明程序本身可能无法继续运行
588 588 */
589   -export enum LogLevel {
  589 +export enum SDKLogLevel {
590 590 debug,
591 591 info,
592 592 warning,
... ...
wxsdk/service/ShareVideoService.ts
1   -import { GAMEDATA } from "../base/SDKConst";
2   -import { ShareVideoType } from "../base/SDKEnum";
3   -import { SDKApi } from "../http/SDKApi";
4   -import SDKShare from "../share/SDKShare";
5   -import SDKVideo from "../share/SDKVideo";
  1 +import { ShareVideoType, ShareVideoFrom } from "../base/SDKEnum";
6 2 import RandomUtils from "../utils/RandomUtils";
7   -import DataService from "./DataService";
8 3 import ShareData from "./entity/ShareData";
  4 +import SDKShare from "../share/SDKShare";
  5 +import { __LOG__, GAMEDATA } from "../base/SDKConst";
  6 +import { SDKApi } from "../http/SDKApi";
  7 +import DataService from "./DataService";
  8 +import SDKVideo from "../share/SDKVideo";
  9 +import { sys } from "cc";
9 10  
10 11 export default class ShareVideoService {
11 12 private forwardKey?: string;
... ... @@ -27,19 +28,28 @@ export default class ShareVideoService {
27 28 this.forward(this.forwardKey);
28 29 }
29 30  
30   - async init() {
  31 + private cnt: number = 1
  32 + async initList() { //初始化List
31 33 let data = await SDKApi.ShareList();
  34 + if (data.code) {
  35 + console.log('拉取ShareList失败!')
  36 + setTimeout(this.initList.bind(this), 200 * this.cnt)
  37 + this.cnt++;
  38 + return
  39 + }
  40 + console.log('拉取ShareList成功!')
  41 + console.log('拉取ShareList成功!',JSON.stringify(data));
32 42 this.setShareVideoData(data);
33   - // console.log(JSON.stringify(data))
  43 + if (this.forwardKey) this.forward(this.forwardKey);
  44 + }
  45 + async init() {
  46 + this.initList();
34 47 SDKShare.I.updateShareMenu(true);//打开群分享
35   -
36   - if (cc.sys.platform === cc.sys.WECHAT_GAME) {
  48 + if (sys.platform === sys.Platform.WECHAT_GAME) {
37 49 if (GAMEDATA.shareMessageToFriend.scene > 0) {
38 50 wx.setMessageToFriendQuery({ shareMessageToFriendScene: GAMEDATA.shareMessageToFriend.scene })
39 51 }
40 52 }
41   -
42   - if (this.forwardKey) this.forward(this.forwardKey);
43 53 }
44 54  
45 55 preload = true;
... ... @@ -62,26 +72,22 @@ export default class ShareVideoService {
62 72 share_id: id,
63 73 query: this.createQuery({ share_key: key, share_id: id, query: opts.query }),
64 74 };
65   - let multiton = false;
66 75 if (opts) {
67 76 if (opts.title) _params.title = opts.title;
68 77 if (opts.img_url) _params.imageUrl = opts.img_url;
69 78 if (opts.share_type) typ = opts.share_type;
70   - if (opts.hasOwnProperty('multiton')) {
71   - multiton = opts.multiton;
72   - };
73 79 }
74 80 // console.log("share_query",JSON.stringify(_params), _params.query);
75 81 switch (+typ) {
76 82 case ShareVideoType.Video:
77   - SDKVideo.I.show(shareKey, videoid, multiton).then(success => {
  83 + SDKVideo.I.show(shareKey, videoid).then(success => {
78 84 resolve(success)
79 85 }).catch(err => {
80 86 reject(err);
81 87 })
82 88 break;
83 89 case ShareVideoType.VideoToShare:
84   - SDKVideo.I.show(shareKey, videoid, multiton).then(success => {
  90 + SDKVideo.I.show(shareKey, videoid).then(success => {
85 91 resolve(success)
86 92 }).catch(err => {
87 93 if (err.code !== 1000 && err.code !== 1003) {//1000关闭1003正在播放
... ... @@ -107,6 +113,46 @@ export default class ShareVideoService {
107 113 resolve({})
108 114 break;
109 115 }
  116 + // share_desc = opts.shareTitle || share_desc;
  117 + // share_desc = StringUtils.stringFormat(share_desc, opts.formater);
  118 + // let shareMsg = {
  119 + // title: share_desc,
  120 + // imageUrl: opts.shareImg || share_icon,
  121 + // query
  122 + // };
  123 + // // __LOG__ && console.error(`SDK ShareVideoService ${opts.shareForward ? 'forward 右上角分享:' : 'share 主动拉起分享:'}`);
  124 + // // __LOG__ && console.error(`SDK ShareVideoService 分享参数对象shareMsg: ${JSON.stringify(shareMsg)}`);
  125 + // // __LOG__ && console.error('SDK ShareVideoService 分享扩展参数', opts);
  126 + // DebugUtils.I.dynamic(`====> PCSDK ShareVideoService share 分享query: ${query}`);
  127 + // let success = (ret: any) => {
  128 + // // __LOG__ && console.error(`SDK ShareVideoService ${opts.shareForward ? 'forward 右上角分享:' : 'share 主动拉起分享:'} 成功回调: ${share_id}`);
  129 + // if (!opts.__GROUP) {
  130 + // // 不是群分享的情况下,进行统计,群分享需要验证
  131 + // TempService.I.add(TempDataKeys.ShareSuccess, 1);
  132 + // share_id && LogService.I.tacticShare(share_id, share_key, TacticType.ShareSuccess);
  133 + // }
  134 + // resolve({ ...ret, share_id, share_key: shareKey });
  135 + // };
  136 + // let fail = (err: any) => {
  137 + // // __LOG__ && console.error(`SDK ShareVideoService ${opts.shareForward ? 'forward 右上角分享:' : 'share 主动拉起分享:'} 失败回调: ${share_id}`);
  138 + // if (!opts.__GROUP) {
  139 + // share_id && LogService.I.tacticShare(share_id, share_key, TacticType.ShareInterrupt);
  140 + // }
  141 + // reject({ ...err, share_id, share_key: shareKey });
  142 + // };
  143 + // if (opts.shareForward)
  144 + // // 右上角转发
  145 + // Platform.I.forward(shareMsg, {
  146 + // ...opts,
  147 + // success,
  148 + // fail,
  149 + // context: this
  150 + // });
  151 + // else
  152 + // // 普通分享
  153 + // Platform.I.share(shareMsg, opts)
  154 + // .then((ret: any) => success(ret))
  155 + // .catch((err: any) => fail(err));
110 156 });
111 157 }
112 158  
... ... @@ -123,6 +169,129 @@ export default class ShareVideoService {
123 169 // console.log("forward", JSON.stringify(params));
124 170 SDKShare.I.forward(params);
125 171 }
  172 +
  173 + /**
  174 + * 分享自动入口
  175 + * @param shareKey
  176 + * @param opts {
  177 + * type: 当shareType为VideoAndShare时候,该参数有用,0:分享 1:视频
  178 + * context: 函数执行上下文
  179 + * fail: Function 失败函数
  180 + * success: Function 成功函数
  181 + * }
  182 + */
  183 + // dispatch(shareKey: string, opts: any = {}, queryObj: { [key: string]: number | string } = {}) {
  184 + // let shareData = this.getShareVideoData(shareKey);
  185 + // let { share_open, share_wxad_id } = shareData;
  186 + // opts = {
  187 + // ...opts,
  188 + // share_wxad_id,
  189 + // __ShareData__: shareData
  190 + // };
  191 + // this.dispatchType(+share_open, shareKey, opts, queryObj);
  192 + // }
  193 +
  194 + shareDispatch(shareKey: string, opts: any = {}, queryObj: { [key: string]: number | string } = {}) {
  195 + // this.dispatch(shareKey, opts, queryObj);
  196 + }
  197 +
  198 + /**
  199 + * 根据分享类型进行处理
  200 + * @param shareType
  201 + * @param shareKey
  202 + * @param opts {
  203 + * type: 当shareType为VideoAndShare时候,该参数有用,0:分享 1:视频
  204 + * context: 函数执行上下文
  205 + * fail: Function 失败函数
  206 + * success: Function 成功函数
  207 + * }
  208 + */
  209 + dispatchType(shareType: ShareVideoType, shareKey: string, opts: any = {}, queryObj: { [key: string]: number | string } = {}) {
  210 + // if (Platform.IsWx && OnlineService.I.getParamsInt(OnlineKeys.ShareUnlock, 1) !== 1)
  211 + // shareType = ShareVideoType.None;
  212 +
  213 + // let share_wxad_id = opts.share_wxad_id || (opts.__ShareData__ || this.getShareVideoData(shareKey) || {}).share_wxad_id;
  214 + // switch (shareType) {
  215 + // case ShareVideoType.None: // 无分享
  216 + // this.handleSuccess(opts, shareType, ShareVideoFrom.None, null);
  217 + // break;
  218 +
  219 + // case ShareVideoType.Share: // 同步分享
  220 + // // 同步分享点:是否开启后台配置中如果存在视频ID,则自动切换为视频点
  221 + // if (opts.shareAutoVideo && share_wxad_id) {
  222 + // this.dispatchType(ShareVideoType.VideoToShare, shareKey, opts, queryObj);
  223 + // break;
  224 + // }
  225 + // this.group(shareKey, queryObj, opts)
  226 + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Share, ret))
  227 + // .catch(err => this.handleFail(opts, shareType, ShareVideoFrom.Share, err));
  228 + // break;
  229 +
  230 + // case ShareVideoType.ShareAysnc: // 异步分享
  231 + // break;
  232 +
  233 + // case ShareVideoType.ShareIntegral: // 分享积分
  234 + // // 是否开启分享积分,且配置为分享积分
  235 + // if (IntegralService.I.IsOpen) {
  236 + // let data = IntegralService.I.convert();
  237 + // if (data) {
  238 + // opts.shareIntegralData = data;
  239 + // this.dispatchType(data.shareType, shareKey, opts, queryObj);
  240 + // } else {
  241 + // // 超过了现在,直接执行失败:今日已达分享上限次数,请明日再来
  242 + // this.handleFail(opts, shareType, ShareVideoFrom.Share, { ...ShareVideoError.ShareOverLimit });
  243 + // }
  244 + // } else {
  245 + // // 如果配置了分享积分,但是未开启开关,则推:无视频则分享
  246 + // this.dispatchType(ShareVideoType.VideoToShare, shareKey, opts, queryObj);
  247 + // }
  248 + // break;
  249 +
  250 + // case ShareVideoType.Video: // 看视频
  251 + // Platform.I.video(shareKey, share_wxad_id)
  252 + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Video, ret))
  253 + // .catch((err: any) => this.handleFail(opts, shareType, ShareVideoFrom.Video, err));
  254 + // break;
  255 +
  256 + // case ShareVideoType.VideoToShare: // 无视频则分享
  257 + // if (!share_wxad_id) {
  258 + // this.group(shareKey, queryObj, opts)
  259 + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Share, ret))
  260 + // .catch(err => this.handleFail(opts, shareType, ShareVideoFrom.Share, err));
  261 + // return;
  262 + // }
  263 + // Platform.I.video(shareKey, share_wxad_id)
  264 + // .then((ret) => this.handleSuccess(opts, shareType, ShareVideoFrom.Video, ret))
  265 + // .catch((err: any) => {
  266 + // // 拉取视频失败/视频UID不存在/微信版本过低,暂不支持看视频,自动切换到分享
  267 + // let { VideoFail, VideoInvalid, VideoNotOpen } = ShareVideoError;
  268 + // if (err && (err.code === VideoFail.code || err.code === VideoInvalid.code || err.code === VideoNotOpen.code))
  269 + // this.group(shareKey, queryObj, opts)
  270 + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Share, ret))
  271 + // .catch(err => this.handleFail(opts, shareType, ShareVideoFrom.Share, err));
  272 + // else
  273 + // this.handleFail(opts, shareType, ShareVideoFrom.Video, err);
  274 + // });
  275 + // break;
  276 +
  277 + // case ShareVideoType.VideoAndShare: // 看视频
  278 + // if (share_wxad_id && opts.type === 1) {
  279 + // Platform.I.video(shareKey, share_wxad_id)
  280 + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Video, ret))
  281 + // .catch((err: any) => this.handleFail(opts, shareType, ShareVideoFrom.Video, err));
  282 + // } else {
  283 + // this.group(shareKey, queryObj, opts)
  284 + // .then(ret => this.handleSuccess(opts, shareType, ShareVideoFrom.Share, ret))
  285 + // .catch(err => this.handleFail(opts, shareType, ShareVideoFrom.Share, err));
  286 + // }
  287 + // break;
  288 + // }
  289 + }
  290 +
  291 + shareWithType(shareType: ShareVideoType, shareKey: string, opts: any = {}, queryObj: { [key: string]: number | string } = {}) {
  292 + this.dispatchType(shareType, shareKey, opts, queryObj);
  293 + }
  294 +
126 295 /**
127 296 * 分享id
128 297 * @param shareKey
... ... @@ -143,6 +312,25 @@ export default class ShareVideoService {
143 312 getShareVideoType(shareKey: string): ShareVideoType {
144 313 let shareData = this.getShareVideoData(shareKey);
145 314 let shareType: ShareVideoType = +shareData.typ;
  315 + // // 木有开启分享,直接返回None
  316 + // if (Platform.IsWx && OnlineService.I.getParamsInt(OnlineKeys.ShareUnlock, 1) !== 1)
  317 + // return ShareVideoType.None;
  318 +
  319 + // // 后台配置视频,判断是否加载出错过,出错返回分享,否则直接返回
  320 + // if (shareType === ShareVideoType.Video || shareType === ShareVideoType.VideoAndShare || shareType === ShareVideoType.VideoToShare) {
  321 + // // 检测视频加载失败
  322 + // if (Platform.I.isVideoErrored())
  323 + // return ShareVideoType.Share;
  324 + // else
  325 + // return shareType;
  326 + // }
  327 +
  328 + // // 是否开启分享积分,且配置为分享积分
  329 + // if (shareType === ShareVideoType.ShareIntegral && IntegralService.I.IsOpen) {
  330 + // let data = IntegralService.I.convert();
  331 + // if (data)
  332 + // return data.shareType;
  333 + // }
146 334 return shareType;
147 335 }
148 336  
... ... @@ -154,6 +342,55 @@ export default class ShareVideoService {
154 342 return this.getShareVideoType(shareKey);
155 343 }
156 344  
  345 + private handleSuccess(opts: any, shareType: ShareVideoType, from: ShareVideoFrom, ret: any) {
  346 + // // 判断分享规则
  347 + // if (IntegralService.I.IsOpen && opts.shareIntegralData && from === ShareVideoFrom.Share) {
  348 + // let shareNum = IntegralService.I.IntegralShareNum;
  349 + // if (shareNum === 0) {
  350 + // // 第1次分享
  351 + // IntegralService.I.setIntegralShareNum();
  352 + // IntegralService.I.resetShareRatio();
  353 + // __LOG__ && console.error(`SDK ShareVideoService 分享积分 第1次分享: 初始来源:${shareType}, 类型:${from}, 分享次数:${shareNum}`);
  354 + // // 设定:第一次强制失败
  355 + // // return this.handleFail(opts, shareType, from, { ...ShareVideoError.ShareRuleFail }, true);
  356 + // } else {
  357 + // // 第n次分享
  358 + // IntegralService.I.setIntegralShareNum();
  359 + // IntegralService.I.addShareRatio();
  360 +
  361 + // let shareRatio = IntegralService.I.ShareRatio;
  362 + // let radomRatio = +Math.random().toFixed(2);
  363 + // __LOG__ && console.error(`SDK ShareVideoService 分享积分 第${shareNum}次分享: 初始来源:${shareType}, 类型:${from}, 分享次数:${shareNum}, 随机概率:${radomRatio}, 失败概率:${shareRatio}`);
  364 + // if (radomRatio <= shareRatio) {
  365 + // __LOG__ && console.error(`SDK ShareVideoService 分享积分 触发失败规则:分享强制失败, radomRatio <= shareRatio: ${radomRatio} <= ${shareRatio}`);
  366 + // return this.handleFail(opts, shareType, from, { ...ShareVideoError.ShareRuleFail }, true);
  367 + // }
  368 + // }
  369 +
  370 + // // 是否同步分享积分数据
  371 + // let { intergral, isAsyncNum } = opts.shareIntegralData;
  372 + // isAsyncNum && LocalService.I.saveVideoOverShareNum(intergral);
  373 + // __LOG__ && isAsyncNum && console.error(`SDK ShareVideoService 分享积分 触发视频看完后,再次分享次数限制更新成功,成功后数量:${LocalService.I.getVideoOverShareNum(intergral)}`);
  374 + // }
  375 +
  376 + // let success = opts.success || function () { };
  377 + // let context = opts.context || this;
  378 + // typeof success === 'function' && success.call(context, from, ret);
  379 + // (from === ShareVideoFrom.Share) && TempService.I.add(TempDataKeys.ShareSuccess, 1);
  380 + }
  381 +
  382 + private handleFail(opts: any, shareType: ShareVideoType, from: ShareVideoFrom, err: any, isFromIntegral?: boolean) {
  383 + // if (err instanceof Error) return;
  384 + // // 判断来自分享积分规则,则重置分享概率
  385 + // if (IntegralService.I.IsOpen && opts.shareIntegralData && from === ShareVideoFrom.Share) {
  386 + // __LOG__ && console.error(`SDK ShareVideoService 强制失败分享,回滚到: ${IntegralService.I.ShareRatioInit}`);
  387 + // IntegralService.I.resetShareRatio();
  388 + // }
  389 + // let fail = opts.fail || function () { };
  390 + // let context = opts.context || this;
  391 + // fail && fail.call(context, from, err);
  392 + }
  393 +
157 394 private setShareVideoData(data: any) {
158 395 (data.data || []).forEach((item: any) => {
159 396 this.shareObjs[item.key] = this.shareObjs[item.key] || [];
... ... @@ -165,11 +402,19 @@ export default class ShareVideoService {
165 402 let list: Array<ShareData> = this.shareObjs[shareKey];
166 403 if (!list) {
167 404 list = this.shareObjs.default;
  405 + // let shareData: ShareData = CfgManager.I.config.ShareData;
  406 + // if (!shareData) throw new TypeError('SDK ShareVideoService - 请在config.js中配置ShareData');
  407 + // let share_open = shareData.share_wxad_id ? ShareVideoType.Video : ShareVideoType.Share;
  408 + // return { ...shareData, share_id: 99999 + '', share_key: shareKey, share_open };
168 409 }
169 410 let index = RandomUtils.rand(0, list.length);
170 411 return list[index];
171 412 }
172 413  
  414 + onShareTimeline(title?: string, imageUrl?: string, imagePreviewUrl?: string, query?: string) {
  415 + return SDKShare.I.onShareTimeline(title, imageUrl, imagePreviewUrl, query);
  416 + }
  417 +
173 418 private createQuery(params = {}): string {
174 419 let q = params["query"];
175 420 delete params["query"];
... ...
wxsdk/service/entity/SdkData.ts.meta
1 1 {
2   - "ver": "1.0.8",
  2 + "ver": "4.0.23",
  3 + "importer": "typescript",
  4 + "imported": true,
3 5 "uuid": "f09e38ff-4d68-417e-8904-949127e4d321",
4   - "isPlugin": false,
5   - "loadPluginInWeb": true,
6   - "loadPluginInNative": true,
7   - "loadPluginInEditor": false,
8   - "subMetas": {}
9   -}
10 6 \ No newline at end of file
  7 + "files": [],
  8 + "subMetas": {},
  9 + "userData": {}
  10 +}
... ...
wxsdk/service/entity/ShareData.ts.meta
1 1 {
2   - "ver": "1.0.8",
  2 + "ver": "4.0.23",
  3 + "importer": "typescript",
  4 + "imported": true,
3 5 "uuid": "d9db9b13-470b-456d-95ff-75354ec23ca0",
4   - "isPlugin": false,
5   - "loadPluginInWeb": true,
6   - "loadPluginInNative": true,
7   - "loadPluginInEditor": false,
8   - "subMetas": {}
9   -}
10 6 \ No newline at end of file
  7 + "files": [],
  8 + "subMetas": {},
  9 + "userData": {}
  10 +}
... ...
wxsdk/share/SDKShare.ts
... ... @@ -2,6 +2,7 @@ import SimulateShare from &quot;./SimulateShare&quot;;
2 2 import { __LOG__, ShareVideoError } from "../base/SDKConst";
3 3 import LogService from "../service/LogService";
4 4 import { DOT_SHARE_TYPE } from "../base/SDKEnum";
  5 +import AlipayApi from "../alipay/AlipayApi";
5 6  
6 7 export default class SDKShare {
7 8 private shareSimulate: boolean
... ... @@ -47,14 +48,19 @@ export default class SDKShare {
47 48 reject(null);
48 49 }
49 50 };
50   - // 是否模拟分享
51   - this.shareSimulate && !opts.closeSimulate && this.simulate({ ...callbackObj });
52   -
53   - if(this.shareSimulate && opts.closeSimulate){
  51 +
  52 + if (this.shareSimulate && opts.closeSimulate) {
54 53 LogService.I.share(shareKey, share_id, DOT_SHARE_TYPE.share)
55 54 }
56 55 // 主动拉起转发
57   - wx.shareAppMessage(commonObj);
  56 + if (typeof my != 'undefined') {
  57 + //模拟分享支付宝上面会失败
  58 + return AlipayApi.I.shareAppMessage(commonObj, callbackObj)
  59 + } else {
  60 + // 是否模拟分享
  61 + this.shareSimulate && !opts.closeSimulate && this.simulate({ ...callbackObj });
  62 + wx.shareAppMessage(commonObj);
  63 + }
58 64 });
59 65 }
60 66 /**
... ... @@ -75,6 +81,27 @@ export default class SDKShare {
75 81 forward(params: any, opts: any = {}) {
76 82 let me = this;
77 83 let { title, imageUrl, query, imageUrlId } = params;
  84 + if (typeof my != 'undefined') {
  85 + my.onShareAppMessage = function () {
  86 + return {
  87 + title: title,
  88 + scImgUrl: imageUrl,
  89 + bgImgUrl: 'https://wxsdk-cdn.miso-lab.com/moon-island/share/zfbshare.jpeg',
  90 + success: (ret?: any) => {
  91 + __LOG__ && console.error('WxShare forward success');
  92 + opts.success && opts.success.call(opts.context, ret);
  93 + },
  94 + fail: (err?: any) => {
  95 + __LOG__ && console.error('WxShare forward fail');
  96 + opts.fail && opts.fail.call(opts.context, err);
  97 + },
  98 + complete: function (e) {
  99 +
  100 + }
  101 + }
  102 + }
  103 + return;
  104 + }
78 105 wx.onShareAppMessage(function () {
79 106 let obj = {
80 107 title,
... ... @@ -98,8 +125,12 @@ export default class SDKShare {
98 125 me.shareSimulate && !opts.closeSimulate && me.simulate({ ...obj });
99 126 return obj;
100 127 });
101   - // 显示当前页面的转发按钮
102   - wx.showShareMenu({});
  128 + // 显示当前页面的转发按钮 "shareAppMessage"表示“发送给朋友”按钮,"shareTimeline"表示“分享到朋友圈”按钮
  129 + wx.showShareMenu({
  130 + withShareTicket: true,
  131 + menus: ['shareAppMessage', 'shareTimeline']
  132 + })
  133 +
103 134 }
104 135  
105 136 private createQuery(params = {}): string {
... ... @@ -120,4 +151,18 @@ export default class SDKShare {
120 151 SimulateShare.I.bind(data);
121 152 }
122 153  
  154 + onShareTimeline(title?: string, imageUrl?: string, imagePreviewUrl?: string, query?: string) {
  155 + if (wx?.onShareTimeline) {
  156 + wx.onShareTimeline(() => {
  157 + return {
  158 + title,//朋友圈标题
  159 + imageUrl, // 朋友圈 小图
  160 + imagePreviewUrl,//朋友圈 预览大图
  161 + query,
  162 + }
  163 + })
  164 + }
  165 +
  166 + }
  167 +
123 168 }
124 169 \ No newline at end of file
... ...
wxsdk/share/SDKVideo.ts
  1 +import { sys } from "cc";
1 2 import { ShareVideoError, __LOG__ } from "../base/SDKConst";
2 3 import { DOT_AD_TYPE, DOT_AD_STATUS } from "../base/SDKEnum";
3 4 import LogService from "../service/LogService";
  5 +import TAMgr from "../../ta/TAMgr";
  6 +import AlipayApi from "../alipay/AlipayApi";
4 7  
5 8 /*
6 9 * 激烈视频
... ... @@ -8,7 +11,6 @@ import LogService from &quot;../service/LogService&quot;;
8 11 export default class SDKVideo {
9 12 private _isPlaying: boolean;
10 13 private _isErrored: boolean;
11   - private _isMultiton: boolean;
12 14 private resolve: any;
13 15 private reject: any;
14 16 private videoAd: any;
... ... @@ -20,7 +22,6 @@ export default class SDKVideo {
20 22 this.videoKey = '';
21 23 this._isPlaying = false;
22 24 this._isErrored = false;
23   - this._isMultiton = false;
24 25 }
25 26  
26 27 get isErrored() {
... ... @@ -36,41 +37,57 @@ export default class SDKVideo {
36 37 preloadVideo(adUnitId: string) {
37 38 if (this.preloadVideoAd || this.isPreload) return
38 39 this.isPreload = true;
39   - let ad = wx.createRewardedVideoAd({
40   - adUnitId,
41   - });
  40 + let ad;
  41 + if (typeof my != 'undefined') {
  42 + ad = AlipayApi.I.createRewardedVideoAd(adUnitId);
  43 + } else {
  44 + ad = wx.createRewardedVideoAd({
  45 + adUnitId,
  46 + });
  47 + }
42 48 ad.onError(this.preError);
43   - ad.load().then(this.handleLoaded2).catch(() => {
44   - this.isPreload = false
45   - })
46   - this.videoAd2 = ad;
  49 + //支付宝同时调用create 和load 需要间隔时间
  50 + if (typeof my != 'undefined') {
  51 + let self = this;
  52 + setTimeout(() => {
  53 + self.videoAd2 = ad;
  54 + ad.load().then(self.handleLoaded2).catch(() => {
  55 + self.isPreload = false
  56 + })
  57 + }, 300)
  58 + } else {
  59 + ad.load().then(this.handleLoaded2).catch(() => {
  60 + this.isPreload = false
  61 + })
  62 + this.videoAd2 = ad;
  63 + }
47 64  
48 65 }
49 66 private preError() {
50 67 let that = SDKVideo.I;
51   - that.isPreload = false
  68 + that.isPreload = false;
  69 + __LOG__ && console.warn("视频预加载失败")
52 70 }
53 71  
54 72 private handleLoaded2() {
55 73 let that = SDKVideo.I;
56 74 that.preloadVideoAd = that.videoAd2;
57 75 that.isPreload = false
58   - __LOG__ && console.warn("视频预加载成功", that.preloadVideoAd)
  76 + __LOG__ && console.warn("视频预加载成功")
  77 + // that.preloadVideoAd.ttttttt = '111111'
  78 + // console.warn(that.preloadVideoAd.isReady());
59 79 }
60 80  
61 81 offPreload() {
62 82 let that = SDKVideo.I;
63   - that.preloadVideoAd.offError(that.preError);
  83 + if (typeof my != 'undefined') {
  84 + that.preloadVideoAd = null;
  85 + } else {
  86 + that.preloadVideoAd.offError(that.preError);
  87 + }
64 88 }
65 89  
66   - /**
67   - *
68   - * @param videoKey
69   - * @param adUnitId
70   - * @param multiton 多例
71   - * @returns
72   - */
73   - async show(videoKey: string, adUnitId: string, multiton: boolean = false): Promise<any> {
  90 + async show(videoKey: string, adUnitId: string): Promise<any> {
74 91 return new Promise(async (resolve, reject) => {
75 92 if (this.isPlaying)
76 93 return reject({ ...ShareVideoError.VideoPlaying });
... ... @@ -79,25 +96,40 @@ export default class SDKVideo {
79 96 return reject({ ...ShareVideoError.VideoInvalid });
80 97  
81 98 LogService.I.adStat(videoKey, this.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.request);
82   - let videoAd;
83   - let hasVideo;
84   - if (this.preloadVideoAd && !multiton) {
85   - __LOG__ && console.log("使用预加载视频", this.preloadVideoAd)
  99 + TAMgr.Ins.dot('video', {
  100 + ad_key: videoKey,
  101 + type: DOT_AD_STATUS.request
  102 + })
  103 + let videoAd
  104 + let hasVideo
  105 + if (this.preloadVideoAd) {
  106 + __LOG__ && console.log("使用预加载视频")
86 107 hasVideo = true
87   - this.offPreload();
88 108 videoAd = this.preloadVideoAd;
  109 + this.offPreload()
  110 + // this.preloadVideo(adUnitId);
89 111 } else {
90 112 __LOG__ && console.log("不使用预加载视频")
91 113 hasVideo = false;
92   - videoAd = wx.createRewardedVideoAd({
93   - adUnitId,
94   - multiton: true
95   - });
  114 + if (typeof my != 'undefined') {
  115 + try {
  116 + videoAd = AlipayApi.I.createRewardedVideoAd(adUnitId);
  117 + } catch (error) {
  118 + __LOG__ && console.log("不使用预加载视频23:", JSON.stringify(error))
  119 + }
  120 + } else {
  121 + videoAd = wx.createRewardedVideoAd({
  122 + adUnitId,
  123 + });
  124 + }
96 125 // this.preloadVideo(adUnitId);
97 126 }
98   - this._isMultiton = !hasVideo;
99   - if (!videoAd)
  127 + // let videoAd = wx.createRewardedVideoAd({
  128 + // adUnitId
  129 + // });
  130 + if (!videoAd) {
100 131 return reject({ ...ShareVideoError.VideoNotOpen });
  132 + }
101 133  
102 134 this._isPlaying = true;
103 135 this._isErrored = false;
... ... @@ -105,6 +137,7 @@ export default class SDKVideo {
105 137 this.adUnitId = adUnitId;
106 138 this.resolve = resolve;
107 139 this.reject = reject;
  140 +
108 141 this.videoAd = videoAd;
109 142 videoAd.onClose(this.handleClose);
110 143 videoAd.onError(this.onError);
... ... @@ -119,6 +152,14 @@ export default class SDKVideo {
119 152 }
120 153 } else {
121 154 try {
  155 + if (typeof my != 'undefined') {
  156 + await new Promise(resolve => {
  157 + setTimeout(() => {
  158 + resolve(null)
  159 + }, 300);
  160 +
  161 + });
  162 + }
122 163 await videoAd.load()
123 164 await this.handleLoaded()
124 165 } catch (error) {
... ... @@ -126,6 +167,7 @@ export default class SDKVideo {
126 167 }
127 168  
128 169 }
  170 + this.preloadVideo(adUnitId);
129 171 __LOG__ && console.warn('====> PCSDK WxVideo 请求视频adUnitId', adUnitId);
130 172 });
131 173 }
... ... @@ -139,11 +181,14 @@ export default class SDKVideo {
139 181 private async handleLoaded() {
140 182 let that = SDKVideo.I;
141 183 try {
142   - // __LOG__ && console.warn("handleLoaded2", that.videoAd, that.videoAd.isReady());
  184 + __LOG__ && console.warn("handleLoaded2");
143 185 LogService.I.adStat(this.videoKey, this.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.show)
144   -
145   - if (cc.sys.platform === cc.sys.WECHAT_GAME) {
146   - if (that.videoAd.isReady()) {//抖音没有 isReady
  186 + TAMgr.Ins.dot('video', {
  187 + ad_key: this.videoKey,
  188 + type: DOT_AD_STATUS.show
  189 + })
  190 + if (sys.platform === sys.Platform.WECHAT_GAME && typeof qq == 'undefined') {
  191 + if (that.videoAd.isReady()) {//抖音、qq 没有 isReady
147 192 that.show_time = Date.now();
148 193 await that.videoAd.show();
149 194 } else {
... ... @@ -173,22 +218,26 @@ export default class SDKVideo {
173 218 if (res && res.isEnded || res === undefined) {
174 219 // 统计看视频成功
175 220 LogService.I.adStat(that.videoKey, that.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.complete)
  221 + TAMgr.Ins.dot('video', {
  222 + ad_key: that.videoKey,
  223 + type: DOT_AD_STATUS.complete
  224 + })
176 225 that.resolve && that.resolve({ type: 2 });
177 226 } else {
178 227 // console.log("视频关闭时间:", t)
179 228 LogService.I.adStat(that.videoKey, that.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.interrupt, t)
  229 + TAMgr.Ins.dot('video', {
  230 + ad_key: that.videoKey,
  231 + type: DOT_AD_STATUS.interrupt
  232 + })
180 233 that.reject && that.reject({ ...ShareVideoError.VideoQuit });
181 234 }
182   - that.videoAd.offClose(that.handleClose);
183   - if (that._isMultiton) {
184   - that.videoAd.destroy();
  235 + if (typeof my != 'undefined') {
185 236 that.videoAd = null;
  237 + } else {
  238 + that.videoAd.offClose(that.handleClose);
186 239 }
187   - // if (that.preloadVideoAd) {
188   - // that.preloadVideoAd.destroy();
189   - // that.preloadVideoAd = null;
190   - // }
191   - that.preloadVideo(that.adUnitId);
  240 +
192 241 that._isPlaying = false;
193 242 that._isErrored = false;
194 243 }
... ... @@ -197,8 +246,16 @@ export default class SDKVideo {
197 246 __LOG__ && console.warn('====> PCSDK WxVideo 加载视频广告失败', err);
198 247 let that = SDKVideo.I;
199 248 LogService.I.adStat(that.videoKey, that.adUnitId, DOT_AD_TYPE.video, DOT_AD_STATUS.fail)
  249 + TAMgr.Ins.dot('video', {
  250 + ad_key: that.videoKey,
  251 + type: DOT_AD_STATUS.fail
  252 + })
200 253 that.reject && that.reject({ ...ShareVideoError.VideoFail });
201   - that.videoAd && that.videoAd.offClose && that.videoAd.offClose(that.handleClose);
  254 + if (typeof my != 'undefined') {
  255 +
  256 + } else {
  257 + that.videoAd && that.videoAd.offClose && that.videoAd.offClose(that.handleClose);
  258 + }
202 259 that._isPlaying = false;
203 260 that._isErrored = true;
204 261 }
... ...
wxsdk/utils/RandomUtils.ts
... ... @@ -20,7 +20,7 @@ export default class RandomUtils {
20 20 static rand(min: number, max: number) {
21 21 min = min || 0;
22 22 max = max || 10000;
23   - return Math.floor(Math.random() * 10000) % (max - min) + min;
  23 + return Math.floor(Math.random() * 10000) % (max - min) + min;
24 24 }
25 25  
26 26 static rang(min: number, max: number) {
... ... @@ -30,4 +30,5 @@ export default class RandomUtils {
30 30 static randFloat(min: number, max: number) {
31 31 return parseFloat((Math.random() * (max - min) + min).toFixed(2));
32 32 }
  33 +
33 34 }
... ...
wxsdk/wx/WxApi.ts
... ... @@ -371,8 +371,8 @@ export default class WxApi {
371 371 /**
372 372 * 米大师充值
373 373 */
374   - requestMidasPayment(params: { mode: string; env: number; offerId: string; currencyType: string; platform: string; buyQuantity: number; zoneId: string }): Promise<any> {
375   - let { mode, env, offerId, currencyType, platform, buyQuantity, zoneId } = params;
  374 + requestMidasPayment(params: { mode: string; env: number; offerId: string; currencyType: string; platform: string; buyQuantity: number; zoneId: string,outTradeNo:string }): Promise<any> {
  375 + let { mode, env, offerId, currencyType, platform, buyQuantity, zoneId,outTradeNo } = params;
376 376 console.warn('====> PCSDK WxApi requestMidasPayment 支付参数', {
377 377 mode,
378 378 env,
... ... @@ -380,7 +380,8 @@ export default class WxApi {
380 380 currencyType,
381 381 platform,
382 382 buyQuantity,
383   - zoneId
  383 + zoneId,
  384 + outTradeNo
384 385 });
385 386 return new Promise((resolve, reject) => {
386 387 wx.requestMidasPayment({
... ... @@ -391,6 +392,7 @@ export default class WxApi {
391 392 platform,
392 393 buyQuantity,
393 394 zoneId,
  395 + outTradeNo,
394 396 success: ret => {
395 397 if (ret && ret.errMsg === 'requestMidasPayment:ok')
396 398 resolve(ret);
... ...
wxsdk/wx/WxBanner.ts
... ... @@ -42,7 +42,7 @@ export default class WxBanner {
42 42 private queue: Function[] = [];
43 43 private isEnd: boolean = false;
44 44  
45   - create(adUnitId: string, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean }) {
  45 + create(adUnitId: string, opts?: { type?: number; bannerWidth?: number, offsetY?: number; adIntervals?: number, isOff?: boolean ,isCreate?:boolean}) {
46 46 this.bannerParams = opts || {};
47 47 if (opts && opts.bannerWidth) {
48 48 this.bannerWidth = opts.bannerWidth;
... ... @@ -74,10 +74,15 @@ export default class WxBanner {
74 74 // this.bannerAd = wx.createGameBanner({ adUnitId, style: { left: style.left, top: this.bannerHeight } });
75 75 // else
76 76 if (this.bannerAd) {
77   - if (!opts || (opts && !opts.isOff)) {
78   - this.show(false);
  77 + if(opts && opts.isCreate){
  78 + //重新创建
  79 + console.log("重新创建banner")
  80 + }else{
  81 + if (!opts || (opts && !opts.isOff)) {
  82 + this.show(false);
  83 + }
  84 + return
79 85 }
80   - return
81 86 }
82 87 this.bannerAd = wx.createBannerAd({ adUnitId, style, adIntervals: this.bannerParams.adIntervals });
83 88 LogService.I.adStat('banner', this.adUnitId, DOT_AD_TYPE.banner, DOT_AD_STATUS.request)
... ...
wxsdk/wx/WxInit.ts
... ... @@ -23,7 +23,7 @@ export default class WxInit {
23 23 init() {
24 24 let { platform } = WxSystem.I.SystemData;
25 25 let launchData = WxLaunch.I.LaunchData;
26   - console.log("启动信息", launchData);
  26 + console.log("启动信息", JSON.stringify(launchData));
27 27 let { query, scene, referrerInfo } = launchData;
28 28 let {
29 29 invite_type,
... ... @@ -41,6 +41,7 @@ export default class WxInit {
41 41 // 抖音投放相关信息
42 42 clue_token,
43 43 ad_id,
  44 + promotion_id,
44 45 creative_id,
45 46 advertister_id,
46 47 request_id
... ... @@ -58,6 +59,10 @@ export default class WxInit {
58 59 if (ad_id) {
59 60 fromChannel = ad_id;
60 61 }
  62 + // 设置抖音投放转化跟踪 v2
  63 + if(promotion_id){
  64 + fromChannel = promotion_id;
  65 + }
61 66  
62 67 //定向分享统计
63 68 if (shareMessageToFriendScene && shareMessageToFriendScene >= 0 && shareMessageToFriendScene <= 50) {
... ...
wxsdk/wx/WxLogin.ts
... ... @@ -8,6 +8,7 @@ import LogService from &quot;../service/LogService&quot;;
8 8 import { DOT_SHARE_TYPE } from "../base/SDKEnum";
9 9 import ShareVideoService from "../service/ShareVideoService";
10 10 import OnlineService from "../service/OnlineService";
  11 +import AlipayApi from "../alipay/AlipayApi";
11 12  
12 13 export default class WxLogin {
13 14 /**
... ... @@ -17,16 +18,32 @@ export default class WxLogin {
17 18 * tip2:必须先调用wxLogin才能使用getUserInfo
18 19 */
19 20 async login(isAuthorize: boolean): Promise<any> {
20   - return new Promise(async (resolve, reject) => {
21   - let code = await WxApi.I.login();
22   - if (isAuthorize) {
23   - WxApi.I.getUserinfo()
24   - .then((ret: any) => this.authedlogin(ret, code, resolve, reject))
25   - .catch((err: any) => this.weakLogin(err, code, resolve, reject));
26   - } else {
27   - this.weakLogin({ errCode: 1, msg: '默认未授权登录' }, code, resolve, reject)
28   - }
29   - });
  21 + if (typeof my !== 'undefined') {
  22 + return new Promise(async (resolve, reject) => {
  23 + console.log("-----login4-------")
  24 + let code = await AlipayApi.I.login();
  25 + console.log("-----login5-------")
  26 + console.log(code)
  27 + if (isAuthorize) {
  28 + AlipayApi.I.getUserinfo()
  29 + .then((ret: any) => this.authedlogin(ret, code, resolve, reject))
  30 + .catch((err: any) => this.weakLogin(err, code, resolve, reject));
  31 + } else {
  32 + this.weakLogin({ errCode: 1, msg: '默认未授权登录' }, code, resolve, reject)
  33 + }
  34 + });
  35 + } else {
  36 + return new Promise(async (resolve, reject) => {
  37 + let code = await WxApi.I.login();
  38 + if (isAuthorize) {
  39 + WxApi.I.getUserinfo()
  40 + .then((ret: any) => this.authedlogin(ret, code, resolve, reject))
  41 + .catch((err: any) => this.weakLogin(err, code, resolve, reject));
  42 + } else {
  43 + this.weakLogin({ errCode: 1, msg: '默认未授权登录' }, code, resolve, reject)
  44 + }
  45 + });
  46 + }
30 47 }
31 48 private isFirst: boolean
32 49  
... ... @@ -91,6 +108,8 @@ export default class WxLogin {
91 108 */
92 109 private handleLogin(data: any, resolve: any, isAuthorize: boolean) {
93 110 // console.log("登录请求结果data", data)
  111 +
  112 + console.log("-----login5-------")
94 113 if (data) {
95 114 // 设置登录信息
96 115 if (data.data) {
... ... @@ -119,7 +138,10 @@ export default class WxLogin {
119 138 } catch (error) {
120 139 console.log("handleExpire_error", error)
121 140 }
122   - ShareVideoService.I.forward()
  141 + // 支付宝没有
  142 + if(typeof my == 'undefined'){
  143 + ShareVideoService.I.forward()
  144 + }
123 145 }
124 146 }
125 147 resolve(data)
... ...
wxsdk/wx/WxPay.ts
... ... @@ -23,7 +23,8 @@ export default class WxPay {
23 23 offerId: OfferId,
24 24 currencyType: CurrencyType,
25 25 buyQuantity: params.money / 10,
26   - zoneId: ZoneId
  26 + zoneId: ZoneId,
  27 + outTradeNo:params.orderid
27 28 };
28 29 let extend = "";
29 30 for (let key in opts) {
... ... @@ -90,7 +91,7 @@ export default class WxPay {
90 91 }
91 92  
92 93 private handlePayError(data: { payid: string, goodid: string, money: number; orderid: string, platform: string }, opts, err: any, reject: any) {
93   - console.log("支付失败", JSON.stringify(err));
  94 + console.log("handlePayError支付失败", JSON.stringify(err));
94 95 let type = 2;
95 96 if (err.errCode + '' == '1') {
96 97 type = 3;
... ...
wxsdk/wx/WxSystem.ts
... ... @@ -42,14 +42,14 @@ export default class WxSystem {
42 42 }
43 43  
44 44 get SDKVersion() {
45   - return this.data.SDKVersion;
  45 + return this.data.SDKVersion || this.data.version;
46 46 }
47 47  
48   - get brand(){
  48 + get brand() {
49 49 return this.data.brand;
50 50 }
51 51  
52   - get model(){
  52 + get model() {
53 53 return this.data.model;
54 54 }
55 55  
... ...