首页 > 其他分享 >Unity 转小游戏

Unity 转小游戏

时间:2023-02-14 12:44:06浏览次数:100  
标签:function obj appEntity res Unity 小游戏 let id

填写appid 和游戏资源位置

在导出的项目里可以修改游戏资源位置 两个目录 minigame 是小程序打开的目录 webgl 是要下载的的资源 下载一个http 服务器就有了

和JS交互 大部分js 功能都被封装到了C# 只用做少量的即可

在wx-wasm-sdk 下得 Plugins 目录下新建文件 Channel.jslib

mergeInto(LibraryManager.library, {
  WebChannelLogin: function () {
    window.WXWASMSDK.WebChannelLogin();
  },
  WebTrackEvent: function(platName,eventName){
    window.WXWASMSDK.WebTrackEvent(_WXPointer_stringify_adaptor(platName),_WXPointer_stringify_adaptor(eventName));

  },
  WebPayItem: function(arg){
    window.WXWASMSDK.WebPayItem(_WXPointer_stringify_adaptor(arg));

  },
  WebCallChannelVoidFunWithArg: function(name, arg) {
    window.WXWASMSDK.WebCallChannelVoidFunWithArg(_WXPointer_stringify_adaptor(name),_WXPointer_stringify_adaptor(arg));

  },
  WebSetUserData: function(arg){
    window.WXWASMSDK.WebSetUserData(_WXPointer_stringify_adaptor(arg));
  },
  WebTanWanEvent: function(name, arg){
	window.WXWASMSDK.WebTanWanEvent(_WXPointer_stringify_adaptor(name),_WXPointer_stringify_adaptor(arg));
  },
});

  他其实和Lua 的全表有点像

新建 apps文件

import { appEntity } from './app-entity';
import * as appSystem from './app-system'
var ThinkingAnalyticsAPI = require("./thinkingdata.mg.wx.min.js");
//import sdk from "./oreyunwx.min.js"
import {
    init,
    loginUserInfo,
    dataReport,
    makePayment,
    shareAppMessage,
    payConfig,
    navigateToMiniProgram,
    getBindPhoneCode,
    bindPhone,
    onShareAppMessage,
    requestSubscribeMessage,
    triggerSubscribe,
    createAd
    } from 'gameSDK.bundle.js'



var ta;
export default {
    WebChannelLogin(){
        //获取微信品台
        wx.getSystemInfo({
            success (res) {
              if(res.platform === "ios"){
                payConfig().then(res => {
                    let iosPay = "1"
                    if(res.ios_recharge === true && obj.RoleLv > res.ios_level){
                        iosPay = "1"
                    }
                    else{
                        iosPay = "0"
                    }
                    GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverIosPayConfig",iosPay);
                    console.log("ios pay " + JSON.stringify(res))
                }).catch(error => {
                    console.log("ios pay " + error)
                })
              }
            }
          })

        if(appEntity.account_id !== ""){
            GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
            var presetProperties = appEntity.ta.getPresetProperties();
            var properties = presetProperties.toEventPresetProperties();
            GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
            console.log("properties " + JSON.stringify(properties))
            return
          }
        loginUserInfo().then(res => {
            console.log("loginUserInfo " + res.uid)
            appEntity.account_id = res.uid + ""
            GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
            var presetProperties = appEntity.ta.getPresetProperties();
            var properties = presetProperties.toEventPresetProperties();
            GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
            ta.login(appEntity.account_id)
            }).catch(error => {
        })
    },
    WebTrackEvent(eventName,arg){
        //console.log(eventName);
        //console.log(arg);
        if (arg.length > 0) {
            var obj = JSON.parse(arg);
            ta.track(eventName,obj) 
        }
        else{
            ta.track(eventName,{})
        }
    },
    WebPayItem(arg){
        //console.log("sha1", appSystem.sha1("1646989046234D528C6F23C7D7"))
        


        var obj = JSON.parse(arg)
        if(obj.wx_android === false){
            payConfig().then(res => {
                if(res.ios_recharge === true && obj.RoleLv > res.ios_level){
                    UpPay(obj)    
                }
                else{
                    let objd = {
                        code:1,
                        info:"iOS 用户等级不够"
                    }
                    let jsString = JSON.stringify(objd);
                    SendPayResultMessage(jsString)
                }
                console.log("ios pay " + JSON.stringify(res))
            }).catch(error => {
                
            })
        }
        else{
            UpPay(obj)
        }
       

    },
    WebSetUserData(arg){
        var obj = JSON.parse(arg)
        ta.userSet(obj);
    },

    WebCallChannelVoidFunWithArg(name,arg){
        //GameGlobal.Module.SendMessage("Canvas","ChannelLogout","hahhahah")
        //appSystem.exportTest1()
        //appSystem.exportTest2("zhang san")
        //appSystem.csharp(1,"sss");
        //ta.login("ABC_123456");
        if(name === "setSuperProperties"){
            var obj = JSON.parse(arg)
            ta.setSuperProperties(obj);
        }
        else if(name === "userSet"){
            var obj = JSON.parse(arg)
            ta.userSet(obj);
        }
        else if(name === "unityHasInit"){
           appEntity.unityHasInit = true
        }
        else if(name === "actionRegister"){
            ReyunRegister()
            appSystem.PostSourceRegister()
        }
        else if(name === "actionLogin"){
            ReyunLogin()
        }
        else if(name === "actionPurchase"){
            var obj = JSON.parse(arg)
            ReyunPayment(obj);
            //appSystem.PostSourcePay(obj.currencyAmount * 100)
        }
        else if(name === "showRewardedVideo"){
            createAd({
                ad_type:"video",
                task:''
            }).then(res => {
                    adHandler("onRewardedVideoAdRewarded","")
                    adHandler("onRewardedVideoAdClosed","")
                    //GameGlobal.Module.SendMessage(appEntity.receivername,"onRewardedVideoAdRewarded","");
                    //GameGlobal.Module.SendMessage(appEntity.receivername,"onRewardedVideoAdClosed","");
                    console.log("showRewardedVideo222   " + JSON.stringify(res))
                }).catch(error => {
                    console.log("showRewardedVideo11111   " + JSON.stringify(error))
            })
			console.log("VoidFunWithArg  "  + name + "---" + arg);
        }
        else if(name === "SDKInit"){
            let tanwandata = {
                app_version: arg,
                config_id: '',
                game_name: ''
                };
            // 初始化小游戏SDK
            init(tanwandata).then(res => {
                wx.showToast({
                title: '进入游戏成功',
                })
                //拉起订阅
                requestSubscribeMessage()
                //触发订阅
                triggerSubscribe('login')
                }).catch(error => {
                })
            let org = {
                userType:"TanWan"
            }
            ta.userSet(org);
			console.log("VoidFunWithArg  "  + name + "---" + arg);
        }
        
    },

    WxInit(){
        //u8参数初始化
        //appSystem.InitU8Arg();
        //数数初始化
        ShushuInit();
        //热云初始化
        ///sdk.init(appEntity.reYunAppKey);
        //登录
        //appSystem.channelLogin();
        //归因初始化
        //SourceInit()
    },

    WebTanWanEvent(eventName,arg){
        var obj = JSON.parse(arg)
        let reportArg = {}
        if(eventName === "1"){
            reportArg.data_type = 1
        }
        else if(eventName === "2"){
            reportArg.data_type = 2
        }
        else if(eventName === "3"){
            reportArg.data_type = 3
        }
        else if(eventName === "4"){
            reportArg.data_type = 4
        }

        reportArg.server_id = 1
        reportArg.server_name = ""
        reportArg.uid = obj.RoleId
        reportArg.role_id = obj.RoleId
        reportArg.role_name = "" 
        reportArg.role_level = obj.RoleLv
        reportArg.role_currency = obj.MoneyNum
        reportArg.role_create_time = obj.RoleCreateTime
        reportArg.fight = 1
        reportArg.role_sex = 1
        reportArg.vip_level = 1
        reportArg.role_career = ""
        dataReport(reportArg).then(res => {
        }).catch(error => {
        })

        console.log("WebTanWanEvent " + JSON.stringify(reportArg))
    
    },

    GetOpenId(openid) {
        //console.log("account_id " + openid)
        ta.login(appEntity.account_id);
    },
    ShushuEventTimeStart(eventName){
        ta.timeEvent(eventName);
    },
    ShushuJsTrack(eventName,obj){
        ta.track(eventName,obj) 
    }
    
}

function SendPayResultMessage(re){
    console.log("SendPayResult",re)
    GameGlobal.Module.SendMessage(appEntity.receivername,"PayResult",re);
}

function ShushuInit(wxcode){
    var config = {
        appId:appEntity.shushuAppId, // 项目 APP ID
        serverUrl:appEntity.shushuUrl , // 上报地址
        enableLog:false,
        autoTrack: {
            appShow: true, // 自动采集 ta_mg_show
            appHide: true // 自动采集 ta_mg_hide
            }
          };
          // 创建 TA 实例
    ta = new ThinkingAnalyticsAPI(config);
    // 初始化
    ta.init();
    ta.identify(ta.getDeviceId());
    appEntity.ta = ta;
    //console.log("shushu init")
    //console.log("getDeviceId",ta.getDeviceId());
    // 上报一个简单事件, 事件名为 test_event
}

function UpPay(obj){
    var payArg = {}
    payArg.uid = "1"
    payArg.server_id = "1"
    payArg.server_name = "正式服"
    payArg.role_id = "1"
    payArg.role_name = "1"
    payArg.role_level = 1
    payArg.role_currency = 1
    payArg.amt = obj.Fee / 100
    payArg.game_fee = 1
    payArg.product_id = obj.detail
    payArg.product_name = "游戏充值"
    payArg.product_desc = "游戏充值"
    payArg.ext = obj.gameOrderId + ",1174" + "," + obj.rig
    console.log("payArg" + JSON.stringify(payArg))
    makePayment(payArg).then(payres => {
        wx.getSystemInfo({
            success (res) {
              if(res.platform === "ios"){
              }
              else{
                let objd = {
                    code:0,
                    info:"轮询"
                }
                let jsString = JSON.stringify(objd);
                SendPayResultMessage(jsString)
              }
            }
          })
    }).catch(error => {
        
    })
}

//热云注册接口
function ReyunRegister(){
    //sdk.register(appEntity.wxopenId)
}

function ReyunLogin(){
    //sdk.loggedin(appEntity.account_id)
}

function ReyunPayment(arg){
    //js["transactionId"] = transactionId;
    //js["currencyAmount"] = currencyAmount;
    //js["currencyType"] = currencyType;
    //js["paymentType"] = paymentType;
    //sdk.payment(arg.transactionid,arg.currencyamount,arg.currencytype,arg.paymenttype)
}

function SourceInit() {
    let jsobj = wx.getStorageSync('Source')
    var bb = Object.keys(jsobj)
    if(bb.length === 0){
    //if(true){
        //debugger
        let objs = wx.getLaunchOptionsSync()
        if ('query' in objs) {
          let qurayStr = JSON.stringify(objs.query)
          if (qurayStr.length > 0) {
              ta.userSet(qurayStr)
          }
        }
  
        if ('query' in objs) {
          if ('clue_token' in objs.query) {
            appEntity.clue_token = objs.query.clue_token;
          }
  
          if ('ad_id' in objs.query) {
            appEntity.ad_id = objs.query.ad_id;
          }
          if ('creative_id' in objs.query) {
            appEntity.creative_id = objs.query.creative_id;
          }
  
          if ('req_id' in objs.query){
          appEntity.req_id = objs.query.req_id;
          }
  
          if ('advertiser_id' in objs.query) {
            appEntity.advertiser_id = objs.query.advertiser_id;
          }
        
          if ('project_id' in objs.query) {
          appEntity.advertiser_id = objs.query.project_id;
          }
  
          if ('promotion_id' in objs.query) {
          appEntity.advertiser_id = objs.query.promotion_id;
          }
  
          if ('mid1' in objs.query) {
          appEntity.mid1 = objs.query.mid1;
          }
  
          if ('mid2' in objs.query) {
          appEntity.mid2 = objs.query.mid2;
          }
  
          if ('mid3' in objs.query) {
          appEntity.mid3 = objs.query.mid3;
          }
  
          if ('mid4' in objs.query) {
          appEntity.mid4 = objs.query.mid4;
          }
  
          if ('mid5' in objs.query) {
          appEntity.mid5 = objs.query.mid5;
          }
        }
  
        let obj = {
            ad_id:appEntity.ad_id,
            creative_id:appEntity.creative_id,
            advertiser_id:appEntity.advertiser_id,
            clue_token:appEntity.clue_token,
        };
        let str = JSON.stringify(obj);
        //console.log(str);
        wx.setStorageSync('Source',str)
        appEntity.firstOpen = true; 
    }
    else{
       let sorObj = JSON.parse(jsobj);
       appEntity.ad_id = sorObj.ad_id;
       appEntity.creative_id = sorObj.creative_id;
       appEntity.advertiser_id = sorObj.advertiser_id;
       appEntity.clue_token = sorObj.clue_token;
    }
  }

  function adHandler(funName,arg){
        let obj = {
            "FunName":funName,
            "Arg":arg
        }
        let tarStr = JSON.stringify(obj)
        console.log("tarStr  " + tarStr)
        GameGlobal.Module.SendMessage(appEntity.receivername,"AdHandler",tarStr);
  }

  在index 中将 apps 方法注册到全局表中

import apps from './apps';
const WXWASMSDK = {
  /*
      初始化
     */
  WXInitializeSDK() {
    moduleHelper.init();
    moduleHelper.send('Inited', 200);
  },
  ...storage,
  ...userInfo,
  ...share,
  ...ad,
  ...canvasHelper,
  ...fs,
  ...openData,
  ...util,
  ...cloud,
  ...audio,
  ...texture,
  ...video,
  ...logger,
  ...shortAudio,
  ...gameClub,
  canvasContext,
  ...sdk,
  ...camera,
  ...recorder,
  ...uploadFile,
  ...gameRecorder,
  ...apps, //加的这个
};

  SDK  初始化在 Game.js 中 

GameGlobal.WXWASMSDK.WxInit();

  实为apps 的调用方法

新建 app-system

import {appEntity} from './app-entity';
import {appSanboxCfg} from './appSanboxCfg';
import { CryptoJS } from './CryptoJS.js';
export function exportTest1() {
    
}
export function exportTest2(name) {
    
}

export function csharp(id,errMsg){
    
}

export function js(){

}


export function u8Post(url, postData, doSuccess, doFail){
    var base = appEntity.u8ServerUrl
    wx.request({
        //项目的真正接口,通过字符串拼接方式实现
        url: base + url,
        // 这个header根据你的实际改!
        header:{
          'X-GameId':appEntity.u8GameId,
          'X-ChannelId':appEntity.u8ChannelId,
          'X-PackageId':appEntity.u8PackageId,
          'Content-Type': 'application/json',
          'cookie': appEntity.u8HttpToken,
          'Request-Origin': 'app'
        },
        data: postData,
        method: 'POST',
        success: function (res) {
          //参数值为res.data,直接将返回的数据传入
          //if (res.data.result.token) { // 如果有token保存下来,下次请求带着token访问
          //  appEntity.u8HttpToken = res.data.result.token;
          //  console.log("token--> ", appEntity.u8HttpToken)
          //}
          doSuccess(res.data);
        },
        fail: function () {
          doFail();
        },
    })
}

export function u8GetData(url, getData, doSuccess, doFail) {
    wx.request({
      url: url,
      header: {
        'Content-Type': 'application/json',
        'X-Access-Token': appEntity.u8HttpToken,
        'Request-Origin': 'app'
      },
      method: 'GET',
      data: getData,
      success: function (res) {
        doSuccess(res.data);
      },
      fail: function () {
        doFail();
      },
    })
}

export function getSignStringFromObj(obj){
    let arrIndex = 0;
    let arr = [];
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
         arr[arrIndex] = {
            paramKey:key,
            paramVal:obj[key],
         }
         arrIndex = arrIndex + 1
        }
    }
    arr.sort(compare);
    let targeStr = "";
    for(var i = 0; i < arr.length; i++){
      if(targeStr !== ""){
        targeStr = targeStr + "&"
      }
      targeStr = targeStr + arr[i].paramKey + "=" + arr[i].paramVal;
    }
    obj.timestamp = Date.now();
    obj.nonce = 3652;
    targeStr = targeStr + "&" + "timestamp="+ obj.timestamp +"&nonce=" + obj.nonce
    //console.log("test target  " + targeStr);
    return targeStr;
}

export function channelLogin(){
  //u8 完成登录就不回去登录
  if(appEntity.account_id !== ""){
    GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
    var presetProperties = appEntity.ta.getPresetProperties();
    var properties = presetProperties.toEventPresetProperties();
    GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
    console.log("properties " + JSON.stringify(properties))
    return
  }
  wx.login({
    success: function(res) {
      //console.log(res.code);//这里的返回值就有Code信息
      u8Login(res.code);
      //debugger;
    },
    fail: function(res) {
      let loginArg = {
        result:false,
        fail_reason:"wx fail",
      }
      GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
    },
    complete: function(res) {},
  })
}

function u8Login(code){
  let url = "usercenter/wx1/login";
  let data = {
    wx_code : code,
  }
  let signCode = getSignStringFromObj(data);
  var hash_result = CryptoJS.HmacSHA256(signCode, appEntity.u8Sign).toString();
  data.sign = hash_result;

  u8Post(url,data,
    function(succ){
      if(succ.code === 200){
        appEntity.account_id = succ.data.account_id;
        appEntity.wxopenId = succ.data.openid;
        //console.log("wxopenId  " + succ.data.openid)
        //debugger
        appEntity.wxtoken = succ.data.token;
        //热云初始化,数数login
        GameGlobal.WXWASMSDK.GetOpenId(appEntity.wxopenId);
        //这个要微信的数据
        PostSourceActive()
        GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
        var presetProperties = appEntity.ta.getPresetProperties();
        //生成事件预置属性
        var properties = presetProperties.toEventPresetProperties();
        GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
        let loginArg = {
          result:true,
          fail_reason:"u8 server ok",
        }
        GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
  
        let reArg = {
          login_type:"weixin",
          login_id:appEntity.account_id,
          result:true,
          fail_reason:"ok"
        }
        GameGlobal.WXWASMSDK.ShushuJsTrack("login_result",reArg);
      }
      else{
        let loginArg = {
          result:false,
          fail_reason:succ.message,
        }
        GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
      }
    },
    function(){
      let loginArg = {
        result:false,
        fail_reason:"u8 server error",
      }
      GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
    })
}

function compare(obj1, obj2) {
  let val1 = obj1.paramKey;
  let val2 = obj2.paramKey;
  if (val1 < val2) {
    return -1;
  } else if (val1 > val2) {
    return 1;
  } else {
    return 0;
  }
}

//用户点击了支付
export function wxPay(csobj){
  wx.login({
    success: function(res) {
      upWxPay(csobj,res.code)
    },
    fail: function(res) {
      let objd = {
        code:1,
        info:"获取微信code失败"
      }
      let jsString = JSON.stringify(objd);
      SendPayResultMessage(jsString)
    },
    complete: function(res) {

    },
  })
}

function getSignature(arg,succfunc) {
  let data = {
    account_id:appEntity.account_id,
    nickname:arg.nickName,
    gender:arg.gender,
    language:arg.language,
    city:arg.city,
    province:arg.province,
    country:arg.country,
    avatar_url:arg.avatarUrl,
  }
  let signCode = getSignStringFromObj(data);
  var hash_result = CryptoJS.HmacSHA256(signCode, appEntity.u8Sign).toString();
  data.sign = hash_result;
  //debugger
  u8Post("/usercenter/wx1/min/signature",data,
  function(params) {
    
    
    appEntity.signature = params.data.signature;
    succfunc(params)
    //debugger
  },
  function(params) {
    
  })
}

function upWxPay(csobj,wxcode) {
  let arg = {
    mode:"game",
    env:appEntity.env,
    offerId:appEntity.offerId,
    currencyType:"CNY",
    platform:"android",
    buyQuantity:csobj.Fee / 10,
    zoneId:"1",
    success:function(res){
      //console.log("paysucc  " + JSON.stringify(res))
      webAndroidMoneyHasGone(csobj,wxcode)
    },
    fail:function(res){
      //console.log(res)
      let objd = {
        code:1,
        info:res
      }
      let jsString = JSON.stringify(objd);
      SendPayResultMessage(jsString)
      webAndroidMoneyHasGone(csobj,wxcode)
      console.log("payfail  " + JSON.stringify(res))
    },
    complete:function(){
      //通知服务器去微信服扣货
    },
  };
  //拉起微信支付
  wx.requestMidasPayment(arg);
  //webAndroidMoneyHasGone(csobj,wxcode)
  //console.log("appEntity.offerId offerIdofferId     " + appEntity.offerId)
}

function webAndroidMoneyHasGone(objCharp,code){
  let postData = {};
  postData.env = appEntity.env
  postData.openid = appEntity.wxopenId;
  //postData.appid = appEntity.wxAppId;
  postData.offer_id = appEntity.offerId;
  postData.zone_id = 1
  postData.access_token = appEntity.weixinServerToken;
  postData.game_orderid = objCharp.gameOrderId
  postData.js_code = code
  postData.accountid = appEntity.account_id
  //debugger
  var base = appEntity.webAndroidPayUrl;
  //console.log("base" + base)
  wx.request({
      //项目的真正接口,通过字符串拼接方式实现
      url: base,
      // 这个header根据你的实际改!
      header: {
        'Content-Type': 'application/json',
        'Request-Origin': 'app'
      },
      data: postData,
      method: 'POST',
      success: function (res) {
        //debugger
        let objd = {
          code:0,
          info:"支付成功"
        }
        let jsString = JSON.stringify(objd);
        SendPayResultMessage(jsString)
      },
      fail: function () {
        //debugger
        //doFail();
        let objd = {
          code:1,
          info:"从微信扣款失败"
        }
        let jsString = JSON.stringify(objd);
        SendPayResultMessage(jsString)
      },
  })
}

function encodeUTF8(s) {
  var i, r = [], c, x;
  for (i = 0; i < s.length; i++)
    if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
    else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
    else {
      if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode
        c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
        r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
      else r.push(0xE0 + (c >> 12 & 0xF));
        r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
     };
  return r;
};
   
// 字符串加密成 hex 字符串
export function sha1(s) {
  var data = new Uint8Array(encodeUTF8(s))
  var i, j, t;
  var l = ((data.length + 8) >>> 6 << 4) + 16, s = new Uint8Array(l << 2);
  s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
  for (t = new DataView(s.buffer), i = 0; i < l; i++)s[i] = t.getUint32(i << 2);
    s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
    s[l - 1] = data.length << 3;
    var w = [], f = [
     function () { return m[1] & m[2] | ~m[1] & m[3]; },
     function () { return m[1] ^ m[2] ^ m[3]; },
     function () { return m[1] & m[2] | m[1] & m[3] | m[2] & m[3]; },
     function () { return m[1] ^ m[2] ^ m[3]; }
    ], rol = function (n, c) { return n << c | n >>> (32 - c); },
     k = [1518500249, 1859775393, -1894007588, -899497514],
     m = [1732584193, -271733879, null, null, -1009589776];
    m[2] = ~m[0], m[3] = ~m[1];
    for (i = 0; i < s.length; i += 16) {
     var o = m.slice(0);
     for (j = 0; j < 80; j++)
      w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1),
       t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0,
       m[1] = rol(m[1], 30), m.pop(), m.unshift(t);
     for (j = 0; j < 5; j++)m[j] = m[j] + o[j] | 0;
    };
    t = new DataView(new Uint32Array(m).buffer);
    for (var i = 0; i < 5; i++)m[i] = t.getUint32(i << 2);
    var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) {
    return (e < 16 ? "0" : "") + e.toString(16);
  }).join("");
  return hex;
};

function PostSourceActive() {
  if (appEntity.firstOpen) {
    let jsondata = {
      clue_token:appEntity.clue_token,
      open_id:appEntity.wxopenId,
      event_type:"0"
    }
    PostSourceHttp(jsondata)
  }
}

export function PostSourceRegister() {
  let jsondata = {
    clue_token:appEntity.clue_token,
    open_id:appEntity.wxopenId,
    event_type:"1"
  }
  PostSourceHttp(jsondata)
}

export function PostSourcePay(amount) {
  let jsondata = {
    clue_token:appEntity.clue_token,
    open_id:appEntity.wxopenId,
    event_type:"2",
    props:{
      pay_amount:amount
    }
  }
  PostSourceHttp(jsondata)
}

function PostSourceHttp(jsondata){
  let time = Date.now();
  let nonce = Math.round(Math.random()*10);
  let strList = [appEntity.sourcetoken, time, nonce];
  strList.sort();
  let buffer = "";
  strList.forEach(str => {
    buffer += str;
  })
  let sign = sha1(buffer)
  //debugger
  let targeturl = appEntity.sourceUrl + "?timestamp=" + time + "&nonce="+ nonce +"&signature=" + sign
  //console.log("url   " + targeturl)
  wx.request({
      url:targeturl,
      header: {
        'Content-Type': 'application/json',
        'Request-Origin': 'app'
      },
      data: jsondata,
      method: 'POST',
      success: function (res) {
        //console.log("zhangsan " + JSON.stringify(res.data))
      },
      fail:function(){
      },
  })
}

export function WebiOSPay(obj){
  let amount = obj.Fee;
  let accid = appEntity.account_id;
  let url = appEntity.webiOSNotPayUrl;
  let extension = obj.extension
  let server_id = 1
  let game = obj.body
  let goods = "方块大作战充值"
  let targetStr = `../index/index?notify_type=createorder&amount=${amount}&account_id=${accid}&notify_url=${url}&extension=${extension}&server_id=${server_id}&game=${game}&goods=${goods}`

  //console.log(targetStr + "targetStr")

  wx.openCustomerServiceConversation({
    showMessageCard: true,
    sessionFrom: "game",
    sendMessagePath:targetStr,
    sendMessageTitle:"我要充值",
    sendMessageImg: "https://c-ssl.duitang.com/uploads/blog/202102/12/20210212163554_83b7a.jpg",
    success() {
        //console.log('调起成功');
    },
    fail() {
        //console.log('调起失败');
    }
});
}


export function SendPayResultMessage(re){
  //console.log("zhangsan",re)
  GameGlobal.Module.SendMessage(appEntity.receivername,"PayResult",re);
}

export function InitU8Arg() {
  if (appSanboxCfg.sanbox) {
    appEntity.u8appid = appEntity.u8
    appEntity.u8GameId = appEntity.u8GameIdTest;
    appEntity.u8ChannelId = appEntity.u8ChannelIdTest;
    appEntity.u8PackageId = appEntity.u8PackageIdTest;
    appEntity.u8Sign = appEntity.u8SignTest;
    appEntity.u8ServerUrl = appEntity.u8ServerUrlTest;
    appEntity.env = appEntity.envTest
    
  }
}

  还有个app-entity 存放变量的

export var appEntity = {
    //与U8交互的口令 暂时没有用
    u8HttpToken : null,
    //测试参数
    u8appidTest:,
    u8GameIdTest : "",
    u8ChannelIdTest : "",
    u8PackageIdTest : "",
    u8SignTest:"",
    u8ServerUrlTest:"",
    //正式参数
    u8appid:,
    u8GameId : "",
    u8ChannelId : "",
    u8PackageId : "",
    u8Sign:"",
    u8ServerUrl:"",
    //登录获取的账户id
    account_id:"",
    //微信的union_id
    union_id:'',
    //登录获取的微信id
    wxopenId:"",
    //后端与微信后端交互口令
    wxtoken:"",
    //unity 是否初始胡完成
    unityHasInit:false,
    //webAndroid 支付url
    webAndroidPayUrl:"",
    //微信后台虚拟货币id
    //offerId:"",
    offerId:"",
    //微信的appid
    wxAppId:"",
    env:0,
    envTest:1,
    //热云appkey
    reYunAppKey:"",
    //
    receivername:"Global",
    //游戏服和微信服交互的token
    weixinServerToken:"",

    //归因
    ad_id:'',
    creative_id:'',
    advertiser_id:'',
    clue_token:'',
    req_id:'',
    project_id:'',
    promotion_id:'',
    mid1:'',
    mid2:'',
    mid3:'',
    mid4:'',
    mid5:'',
    firstOpen:false,
    // 归因服url
    sourceUrl:"",
    sourcetoken:"",

    webiOSNotPayUrl:"",

    //数数
    shushuAppId:"",
    shushuUrl:"",
    ta:"",
}

  

标签:function,obj,appEntity,res,Unity,小游戏,let,id
From: https://www.cnblogs.com/unity-android-ios/p/17119211.html

相关文章

  • Unity导出web浏览器运行的WebGL操作
    前提:1.Unity2020.3的编辑器+项目需要再Unity编辑器执行不报错2.系统win103.浏览器使用  或  导出:1.下载WebGL支持        ......
  • unity 保持物体大小不变
    ///<summary>///在透视投影时,改变相机的fov或物体的位置,让物体保持在屏幕上看起来的大小一样的缩放值///</summary>///<returns></returns>p......
  • Unity Shader 后处理(1):景深效果
    景深的产生原因:摄像机成像时,通过棱镜聚焦,光线通过棱镜打在传感器平面上。不同物距的成像结果也会不一样,只有焦平面上的物体上的任意一点,通过过棱镜后会在传感器平面上聚焦......
  • 实现自有App上架小游戏其实并非难事
    近年来小程序游戏迎来了爆发式增长。微信、支付宝、抖音等各大平台小程序游戏愈加丰富,你是否也让自己的App也拥有运行丰富的小游戏的能力?今天就来带大家看看如何实现。我......
  • Unity URP之如何实现半透明物体的阴影
    半透明物体的阴影现实中也应该是淡化过的,如何实现这种效果?渲染方案:使用内置的noise贴图来clip阴影。代码可参考:float2vpos=input.positionCS;h......
  • Unity+Vuforia AR虚拟现实初步案例
    完成需求;1.Unity2020版编辑器2.Vuforia2019.6.3的插件3.使用编辑器下载Android驱动支持,附带JDK+SDK等组件案例操作:1.在Vuforia官网注册账号......
  • unity 实现自定义class深度拷贝 deep copy 深度复制 引用类型复制
    气死我了,搜半天没有,全让序列化再反序列化,又不方便又不美观。结果自己试着一写就通,两行完事。首先先安装Newtonsoft.Json包,这个很常用也很简单,随便搜一下安上就行,早晚得学......
  • Unity Shader 风格化水体渲染
    风格化渲染(stylizedrendering)的具体定义我没能找到,但是在一些文章中,风格化渲染就是指那些非写实的(NonPhotorealisticRendering)渲染。其中卡通风格的渲染(ToonShad......
  • MySQLInstallerConsole.exe程序弹出窗口提示“MySQL Installer is running in Communi
    电脑运行中时不时弹出一个窗口,没反应过来就一下自动关闭了,下次再弹出,怎么回事?原来是MySQL的定时更新任务。 解决办法:这个是新版本MySQL服务自带的一个定时任务,每天......
  • vivo小游戏开发环境搭建
    基本信息官网,要chrome才能打开http://minigame.vivo.com.cn/documents/#/lesson/base/environmentvivoapi广告文档http://minigame.vivo.com.cn/documents/#/api/......