123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557 |
- /**
- 游戏名称:遮天
- SDK文档:
- https://client2.hhycdk.com/docs/sdkDocs.html?target_id=4e81bdd1-aaf0-46d8-9b3a-50769becbe1b
- gameId = 319 测试秘钥 = 1d5c5fcb80934b4886cc8a7c61366664 正式秘钥 = fa62a8cbd24941ec83edaf89799a1c4b zoneKey = ztxm_wxml snKey = s218
- 小程序ID:wx38c033079c5d7490
- */
- // 导入crypto-js的md5加密功能
- import * as CryptoJS from 'crypto-js';
- import Gamecfg from "../common/gameCfg";
- import { gameMethod } from "../common/gameMethod";
- import { PlayerLogin, PlayerLoginPram } from "../common/Xyc";
- import { SevBack } from "../common/Xys";
- import Config from "../Config";
- import { GameEvent, LoadEvent, PlatEvent } from "../data/const/EventConst";
- import { AD_VIDEO_KEY, GameErrCode, PayProductParam, ReportRoleType, PlatFormDevType } from "../data/const/TypeConst";
- import GameDataCenter from "../data/GameDataCenter";
- import GameController from "../GameController";
- import UIHelp from "../logic/ui/UIHelp";
- import EventMng from "../manager/EventMng";
- import PlatformBase from "./PlatformBase";
- import { md5 } from "../utils/md5";
- import ThinkingDataMgr from '../utils/ThinkingDataMgr';
- export default class PlatformHaiTuoMini extends PlatformBase {
- rewardVideo: any
- constructor() {
- super()
- // wx.getLaunchOptionsSync(res => {
- // this.dealQuery(res)
- // setTimeout(() => {
- // let str = ""
- // for (const key in res.query) {
- // str += key + "=" + res.query[key]
- // }
- // let data: DialogParams = {
- // content: "内容:" + str
- // }
- // UIHelp.ShowDialog(data)
- // }, 3000);
- // })
- // 屏幕常亮
- wx.setKeepScreenOn({
- keepScreenOn: true
- })
- // 热启动,或唤醒时触发
- wx.onShow(res => {
- this.dealQuery(res)
- GameDataCenter.audio.resumeMusic()
- // IOS系统,在后台切回时似乎回失去常亮功能,这里再调用一次
- wx.setKeepScreenOn({
- keepScreenOn: true
- })
- EventMng.emit(GameEvent.ON_SHOW_APP)
- console.log("-----wx.onShow 回调触发:", res)
- })
- // 切到后台时触发
- wx.onHide(res => {
- GameDataCenter.audio.stopAllEffects()
- GameDataCenter.audio.pauseMusic()
- })
- // 加载广告组件
- wx.showShareMenu({
- withShareTicket: false,
- menus: ['shareAppMessage', 'shareTimeline']
- })
- // 小程序更新机制 https://developers.weixin.qq.com/minigame/dev/guide/runtime/update-mechanism.html
- const updateManager = wx.getUpdateManager()
- updateManager.onCheckForUpdate(function (res) {
- // 请求完新版本信息的回调
- console.log("请求完新版本信息的回调", res.hasUpdate)
- })
- updateManager.onUpdateReady(function () {
- wx.showModal({
- title: '更新提示',
- content: '新版本已经准备好,是否重启应用?',
- success(res) {
- if (res.confirm) {
- // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
- updateManager.applyUpdate()
- }
- }
- })
- })
- updateManager.onUpdateFailed(function () {
- // 新版本下载失败
- })
- }
- private dealQuery(res) {
- if (res.scene) {
- GameDataCenter.plat.queryparams.scene = res.scene
- }
- if (res.query['inviter']) {
- GameDataCenter.plat.queryparams.inviter = res.query['inviter']
- }
- if (res.query['sharer']) {
- GameDataCenter.plat.queryparams.sharer = res.query['sharer']
- }
- console.log("-----sharer-----", GameDataCenter.plat.queryparams.sharer)
- EventMng.emit(PlatEvent.ON_SCENE_CHANGED)
- }
- showLoginView(): void {
- console.log("平台sdk初始化...")
- let opts = wx.getLaunchOptionsSync()
- EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.25, "login")
- let packageInfo = Gamecfg.packageInfo.getItem(Config.pid)
- window['hitalkOpenSDK'].init((res: any) => {
- let sysInfo = wx.getSystemInfoSync();
- GameDataCenter.plat.instance.deviceOS = sysInfo?.platform
- console.log("----当前运行平台信息:", JSON.stringify(sysInfo))
- console.log("----当前运行平台:", GameDataCenter.plat.instance.deviceOS)
- // do something
- console.log("----初始化回调:", res)
- if (res.retCode != 0) {
- console.log("初始化失败")
- return
- }
- console.log("初始化成功")
- window['hitalkOpenSDK'].resetConfig(true)// true:正式服; false:测试服
- //调用登录接口
- EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.5, "login")
- window['hitalkOpenSDK'].login((res: any) => {
- if (res.retCode === 0) {
- console.log('fingerPlayer登录成功: res=>' + JSON.stringify(res));
- //可以全局获取的参数
- Config.wxOpenId = window['hitalkOpenSDK'].openId //用户唯一标识
- Config.wxSign = res.data.sign //签名
- EventMng.emit(LoadEvent.LOAD_PROGRESS, 0.75, "login")
- let params: PlayerLoginPram = {
- pid: Config.pid,
- param: [res.data.openId, res.data.timestamp, res.data.sign, JSON.stringify(res.data?.snUserInfoJson)]
- }
- GameController.network.send(PlayerLogin.url, params, (result: SevBack) => {
- console.log("后段验证返回")
- if (result.type != 1) {
- if (gameMethod.isEmpty(result.win) || gameMethod.isEmpty(result.win.msgOut)) {
- GameDataCenter.plat.showErrDialog(GameErrCode.errGamePlatLogin)
- }
- return
- }
- EventMng.emit(LoadEvent.LOAD_PROGRESS, 1, "login")
- if (result.type == 1 && result.platBack) {
- this.openId = result.platBack.openid
- this.loginParams = [result.platBack.token]
- console.log("后端验证成功", this.openId)
- // 获取邀请者uuid
- let inviter = ""
- if (wx.getEnterOptionsSync) {
- let obj = wx.getEnterOptionsSync()
- if (obj.query && obj.query['inviter']) {
- inviter = obj.query['inviter']
- }
- }
- this.login(inviter)
- } else {
- console.log("PlayerLogin.url 返回数据异常")
- if (gameMethod.isEmpty(result.win) || gameMethod.isEmpty(result.win.msgOut)) {
- GameDataCenter.plat.showErrDialog(GameErrCode.errGamePlatLogin)
- }
- }
- })
- } else {
- console.log('fingerPlayer登录失败: res=>' + JSON.stringify(res));
- //注意:调用登录接口失败后,需要跳转游戏页面显示重新登录的按钮
- UIHelp.ShowDialog({
- content: "登录授权失败,请重新登录",
- onlyConfirm: true,
- cbConfirm: () => {
- GameDataCenter.plat.instance.restart()
- }
- })
- }
- // 获取用户设置信息
- console.log("获取用户设置信息")
- wx.getSetting({
- withSubscriptions: true,
- success(res) {
- console.log("获取用户设置信息 回调:", res)
- if (res.authSetting && res.authSetting["scope.userInfo"]) {
- // 已授权
- console.log("已授权")
- GameDataCenter.plat.instance.hasAuthUserInfo = true
- }
- // 整理订阅消息
- if (res.subscriptionsSetting && res.subscriptionsSetting.itemSettings) {
- GameDataCenter.subscribe.recordSubscribeAlwaysSettings(res.subscriptionsSetting.itemSettings)
- }
- }
- })
- })
- wx.onShareAppMessage(function () {
- return {
- title: "",
- imageUrl: "",
- query: `state=${""}`
- }
- })
- wx.showShareMenu({
- menus: ['shareAppMessage', 'shareTimeline']
- })
- }, { gameId: parseInt(packageInfo.params[0]), zoneKey: packageInfo.params[1], snKey: packageInfo.params[2] })
- }
- // 上报用户信息
- reportUserInfo(res) {
- }
- // 上报角色数据
- reportRole(event: ReportRoleType): void {
- //统一由服务端上报
- return
- if (GameDataCenter.sevBack == null) { return }
- if (GameDataCenter.sevBack.userInfo?.a == null) { return }
- console.log("上报角色数据:" + event + ",uuid:" + GameDataCenter.sevBack.userInfo?.a?.uuid)
- let onlineTime = 0
- if (GameDataCenter.time.onlineTime > 0) {
- onlineTime = GameDataCenter.time.sevTime - GameDataCenter.time.onlineTime
- }
- let roleTypeStr = 3
- if (event == ReportRoleType.create) {
- roleTypeStr = 2
- } else if (event == ReportRoleType.levelup) {
- roleTypeStr = 4
- }
- let param = {
- "areaId": GameDataCenter.sevBack.userInfo?.a?.sid,
- "areaName": GameDataCenter.user.serverName,
- "roleId": GameDataCenter.sevBack.userInfo?.a?.uuid,
- "roleName": GameDataCenter.sevBack.userInfo?.a?.name,
- "roleLevel": GameDataCenter.sevBack.userInfo?.a?.level,
- "vipGrade": 0,
- "createRoleTime": GameDataCenter.sevBack.userInfo?.a?.regtime,
- "createTime": GameDataCenter.time.sevTime,
- "moneyNum": GameDataCenter.sevBack.userInfo?.a?.iscz,
- "rolePower": 0,
- "roleTurnup": 0,
- "sign": Config.wxSign
- }
- //验证
- let str: string = ""
- str += "&areaId=" + param["areaId"]
- str += "&areaName=" + param["areaName"]
- str += "&createRoleTime=" + param["createRoleTime"]
- str += "&createTime=" + param["createTime"]
- str += "&moneyNum=" + param["moneyNum"]
- str += "&roleId=" + param["roleId"]
- str += "&roleLevel=" + param["roleLevel"]
- str += "&roleName=" + param["roleName"]
- str += "&rolePower=" + param["rolePower"]
- str += "&roleTurnup=" + param["roleTurnup"]
- str += "&vipGrade=" + param["vipGrade"]
- str += "fa62a8cbd24941ec83edaf89799a1c4b"
- // console.log("md5 str => ", str)
- let _sign = md5(str).toUpperCase();
- param.sign = _sign
- window['hitalkOpenSDK'].gameReport(roleTypeStr, param, (res: any) => {
- console.log("角色数据上报:" + JSON.stringify(res));
- if (res.retCode == 0) {
- //上报成功
- }
- //上报失败
- })
- }
- pay(orderId: string, order10cs: string, param: PayProductParam): void {
- window['hitalkOpenSDK'].isGamePay({}, function (res: any) {
- //true:开启(默认值),false:关闭支付
- console.log('是否开启支付功能:' + res)
- if (res) {
- //开启支付功能
- let packageInfo = Gamecfg.packageInfo.getItem(Config.pid)
- let price = param.price * 100
- let startPaydata = {
- 'gameId': parseInt(packageInfo.params[0]), // 游戏唯一标识
- 'snKey': packageInfo.params[2], // 包唯一码
- 'openId': window['hitalkOpenSDK'].openId, //用户唯一标识
- 'roleId': GameDataCenter.sevBack.userInfo?.a?.uuid, // 角色Id
- 'roleName': GameDataCenter.sevBack.userInfo?.a?.name, //角色名称
- 'roleLevel': GameDataCenter.sevBack.userInfo?.a?.level, //角色等级
- 'vipGrade': 0, //VIP等级
- 'areaId': GameDataCenter.sevBack.userInfo?.a?.sid, // 区服id,合服之后传旧的areaId,与数据上报的区服ID相同
- 'areaName': GameDataCenter.sevBack.userInfo?.a?.sid, // 区服名称
- 'productId': param.productId, // 商品ID
- 'productName': param.productName, // 商品名称
- 'productDescribe': param.productDesc, // 商品描述
- 'amount': price, // 商品金额(单位:分)
- 'gameOrderNo': orderId, // 游戏方支付订单号
- 'timestamp': GameDataCenter.time.sevTime, // 时间戳,单位:秒
- 'extension': "", //透传字段,支付回调时会原样返回,默认值:""
- 'callbackUrl': order10cs, // 支付回调地址
- 'sign': "" // 签名信息
- }
- //验证
- let str: string = ""
- str += "amount=" + startPaydata["amount"]
- str += "&areaId=" + startPaydata["areaId"]
- str += "&areaName=" + startPaydata["areaName"]
- str += "&callbackUrl=" + startPaydata["callbackUrl"]
- if (!gameMethod.isEmpty(startPaydata["extension"])) {
- str += "&extension=" + startPaydata["extension"]
- }
- str += "&gameId=" + startPaydata["gameId"]
- str += "&gameOrderNo=" + startPaydata["gameOrderNo"]
- str += "&openId=" + startPaydata["openId"]
- str += "&productDescribe=" + startPaydata["productDescribe"]
- str += "&productId=" + startPaydata["productId"]
- str += "&productName=" + startPaydata["productName"]
- str += "&roleId=" + startPaydata["roleId"]
- str += "&roleLevel=" + startPaydata["roleLevel"]
- str += "&roleName=" + startPaydata["roleName"].trim()
- str += "&snKey=" + startPaydata["snKey"]
- str += "×tamp=" + startPaydata["timestamp"]
- str += "&vipGrade=" + startPaydata["vipGrade"]
- str += "fa62a8cbd24941ec83edaf89799a1c4b"
- console.log("md5 str => ", str)
- let _sign = md5(str).toUpperCase();
- startPaydata.sign = _sign
- console.log("startPaydata=>", JSON.stringify(startPaydata))
- window['hitalkOpenSDK'].gamePay(startPaydata, (res: any) => {
- console.log('支付:' + JSON.stringify(res))
- if (res.retCode = 0) {
- if (Config.paySuccAdokId != null) {
- clearInterval(Config.paySuccAdokId)
- Config.paySuccAdokId = null
- }
- Config.paySuccAdokIndex = 0
- Config.paySuccAdokId = setInterval(() => {
- Config.paySuccAdokIndex++
- if (Config.paySuccAdokIndex >= 5) {
- clearInterval(Config.paySuccAdokId)
- Config.paySuccAdokId = null
- }
- GameDataCenter.time.sendAdok()
- }, 1000)
- } else {
- UIHelp.ShowTips("支付异常,请联系客服")
- //异常上报服务端
- if (window["sendClientErr"]) {
- window["sendClientErr"]([JSON.stringify(res)])
- }
- }
- })
- } else {
- //不开启支付功能
- UIHelp.ShowTips("未开启支付,无需支付")
- }
- })
- }
- checkMsg(str: string, cb: Function): void {
- //由服务端校验
- cb()
- // var switchs = window['hitalkOpenSDK'].switchStatus //获取功能开关状态
- // //是否实现敏感字校验功能
- // //true:由客户端校验敏感字,false:由服务端接口校验敏感字
- // if (switchs.contentCheck && switchs.contentCheck.status) {
- // // 需要
- // //调用敏感字校验接口
- // var params = {
- // scene: 2,//内容应用场景值(1:创角,2:聊天(默认),3:家族改名,4:家族公告)
- // content: str
- // }
- // window['hitalkOpenSDK'].gameExtraAction("contentCheck", params, function (res) {
- // if (res.retCode == 0) {
- // //校验通过
- // cb()
- // } else {
- // //校验失败
- // UIHelp.ShowTips("输入文字带有敏感词,请重新输入")
- // }
- // })
- // } else {
- // // 不需要
- // UIHelp.ShowTips("未开通敏感词检测")
- // cb()
- // }
- }
- // 打开客服窗口
- openService() {
- var switchs = window['hitalkOpenSDK'].switchStatus //获取功能开关状态
- //是否显示客服功能
- if (switchs.customerService) {
- // 显示客服功能
- // 打开客服窗口
- window['hitalkOpenSDK'].gameExtraAction("customerService", {}, function (res) {
- //返回结果
- });
- } else {
- // 隐藏游戏内客服按钮
- UIHelp.ShowTips("未开通客服功能")
- }
- }
- // 订阅消息
- setSubscribe(tmplIds: string[], ids: string[]) {
- var switchs = window['hitalkOpenSDK'].switchStatus //获取功能开关状态
- //是否显示客服功能
- //判断渠道是否有订阅功能
- if (switchs.subscribe) {
- //长期订阅状态,该功能暂时关闭,需达到条件才能开启
- var subscribeStatus = switchs.subscribe.status //长期订阅状态(暂停使用); true:已订阅 false:未订阅
- var oneStatus = switchs.subscribe.oneStatus//一次性订阅状态; true:已订阅 false:未订阅
- //一次性订阅功能判断,当调用subscribe订阅接口时为true时判断
- if (oneStatus) {
- //用户订阅状态为true要进行的操作
- //比如:当用户订阅状态为true时,隐藏"订阅"图标/或者"勾选"订阅功能
- } else {
- //用户订阅状态为false要进行的操作
- }
- wx["showModal"]({
- title: "提示",
- content: "请授权开启服务通知",
- showCancel: true,
- success: function (res) {
- if (res.confirm) {
- //当(未订阅)用户点击"订阅"按钮,主动订阅时调用
- var params = {
- type: 0, //0:长期订阅 1:一次性订阅 (默认传入)
- tmplIds: tmplIds //订阅模板ID 数组
- }
- window['hitalkOpenSDK'].gameExtraAction("subscribe", params, function (res) {
- console.log("===订阅接口回调===", res)
- if (res.retCode == 0) {
- //表示订阅成功
- GameDataCenter.subscribe.setLastSubscribeTime(tmplIds)
- let acceptList: string[] = []
- let NoAcceptList: string[] = []
- tmplIds.forEach((element, index) => {
- if (res?.data?.indexOf(element) >= 0) {
- acceptList.push(ids[index])
- } else {
- NoAcceptList.push(ids[index])
- }
- });
- if (acceptList.length > 0) {
- GameDataCenter.subscribe.sendSubscribe(acceptList)
- }
- if (NoAcceptList.length > 0) {
- GameDataCenter.subscribe.sendSubscribeCancle(NoAcceptList)
- }
- } else {
- //表示订阅失败
- GameDataCenter.subscribe.sendSubscribeCancle(tmplIds)
- }
- });
- } else if (res.cancel) {
- console.log('用户点击取消');
- // 用户点击取消后的逻辑处理
- //表示订阅失败
- GameDataCenter.subscribe.sendSubscribeCancle(tmplIds)
- }
- }
- })
- } else {
- //表示该渠道没有订阅功能,游戏不能显示订阅相关功能
- UIHelp.ShowTips("未开通订阅功能")
- }
- }
- showRewardAd(adId: string, kid: string, order11Id: string): void {
- var switchs = window['hitalkOpenSDK'].switchStatus //获取功能开关状态
- //是否需要激励视频功能
- if (switchs.videoAd) {
- //数数上报
- let properties = {
- "ad_platform": "微信小游戏",
- "ad_id": adId,
- "ad_type": "激励视频",
- "ad_placement_name": "home_feed",
- "ad_placement_id": order11Id,
- "current_page": kid,
- // "ad_ecpm": 0
- }
- ThinkingDataMgr.TDTrack("ad_request", properties)
- // 开启激励视频功能
- //播放视频功能
- var params = {
- adUnitId: adId//不同位置的广告ID,需要游戏传入
- }
- window['hitalkOpenSDK'].gameExtraAction("videoAd", params, function (res) {
- let isSuc = res.retCode == 0 ? true : false
- //数数上报
- let properties = {
- "ad_platform": "微信小游戏",
- "ad_id": adId,
- "ad_type": "激励视频",
- "ad_placement_name": "home_feed",
- "ad_placement_id": order11Id,
- "current_page": kid,
- // "ad_ecpm": 0,
- "is_filled_success": isSuc,
- "error_detail_info": JSON.stringify(res),
- "error_detail_code": res.retCode
- }
- ThinkingDataMgr.TDTrack("ad_response", properties)
- if (res.retCode == 0) {
- //表示播放视频成功,游戏内给玩家发放奖励
- GameDataCenter.adVideo.onXiadanSucc()
- //数数上报
- let properties = {
- "ad_platform": "微信小游戏",
- "ad_id": adId,
- "ad_type": "激励视频",
- "ad_placement_name": "home_feed",
- "ad_placement_id": order11Id,
- "current_page": kid,
- // "ad_ecpm": 0,
- // "ad_app_name": "未知"
- }
- ThinkingDataMgr.TDTrack("ad_show", properties)
- } else {
- //表示播放视频失败,不发奖励
- //数数上报
- let properties = {
- "ad_platform": "微信小游戏",
- "ad_id": adId,
- "ad_type": "激励视频",
- "ad_placement_name": "home_feed",
- "ad_placement_id": order11Id,
- "current_page": kid,
- // "ad_ecpm": 0,
- // "ad_app_name": "未知",
- // "ad_duration": 30,
- // "ad_play_duration": 15,
- "is_complete_play": false
- }
- ThinkingDataMgr.TDTrack("ad_close", properties)
- }
- });
- } else {
- // 关闭激励视频功能
- UIHelp.ShowTips("未开通视频广告")
- }
- }
- // 分享上报
- resportShareEvent() {
- console.log("分享上报")
- // window["hitalkOpenSDK"].addShareInfo({
- // data: {
- // to_target: 'wx'
- // }
- // }).then(res => {
- // console.log("分享结果:", res)
- // })
- }
- }
|