填写appid 和游戏资源位置

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

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

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

  1. mergeInto(LibraryManager.library, {
  2. WebChannelLogin: function () {
  3. window.WXWASMSDK.WebChannelLogin();
  4. },
  5. WebTrackEvent: function(platName,eventName){
  6. window.WXWASMSDK.WebTrackEvent(_WXPointer_stringify_adaptor(platName),_WXPointer_stringify_adaptor(eventName));
  7.  
  8. },
  9. WebPayItem: function(arg){
  10. window.WXWASMSDK.WebPayItem(_WXPointer_stringify_adaptor(arg));
  11.  
  12. },
  13. WebCallChannelVoidFunWithArg: function(name, arg) {
  14. window.WXWASMSDK.WebCallChannelVoidFunWithArg(_WXPointer_stringify_adaptor(name),_WXPointer_stringify_adaptor(arg));
  15.  
  16. },
  17. WebSetUserData: function(arg){
  18. window.WXWASMSDK.WebSetUserData(_WXPointer_stringify_adaptor(arg));
  19. },
  20. WebTanWanEvent: function(name, arg){
  21. window.WXWASMSDK.WebTanWanEvent(_WXPointer_stringify_adaptor(name),_WXPointer_stringify_adaptor(arg));
  22. },
  23. });

  他其实和Lua 的全表有点像

新建 apps文件

  1. import { appEntity } from './app-entity';
  2. import * as appSystem from './app-system'
  3. var ThinkingAnalyticsAPI = require("./thinkingdata.mg.wx.min.js");
  4. //import sdk from "./oreyunwx.min.js"
  5. import {
  6. init,
  7. loginUserInfo,
  8. dataReport,
  9. makePayment,
  10. shareAppMessage,
  11. payConfig,
  12. navigateToMiniProgram,
  13. getBindPhoneCode,
  14. bindPhone,
  15. onShareAppMessage,
  16. requestSubscribeMessage,
  17. triggerSubscribe,
  18. createAd
  19. } from 'gameSDK.bundle.js'
  20.  
  21. var ta;
  22. export default {
  23. WebChannelLogin(){
  24. //获取微信品台
  25. wx.getSystemInfo({
  26. success (res) {
  27. if(res.platform === "ios"){
  28. payConfig().then(res => {
  29. let iosPay = "1"
  30. if(res.ios_recharge === true && obj.RoleLv > res.ios_level){
  31. iosPay = "1"
  32. }
  33. else{
  34. iosPay = "0"
  35. }
  36. GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverIosPayConfig",iosPay);
  37. console.log("ios pay " + JSON.stringify(res))
  38. }).catch(error => {
  39. console.log("ios pay " + error)
  40. })
  41. }
  42. }
  43. })
  44.  
  45. if(appEntity.account_id !== ""){
  46. GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
  47. var presetProperties = appEntity.ta.getPresetProperties();
  48. var properties = presetProperties.toEventPresetProperties();
  49. GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
  50. console.log("properties " + JSON.stringify(properties))
  51. return
  52. }
  53. loginUserInfo().then(res => {
  54. console.log("loginUserInfo " + res.uid)
  55. appEntity.account_id = res.uid + ""
  56. GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
  57. var presetProperties = appEntity.ta.getPresetProperties();
  58. var properties = presetProperties.toEventPresetProperties();
  59. GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
  60. ta.login(appEntity.account_id)
  61. }).catch(error => {
  62. })
  63. },
  64. WebTrackEvent(eventName,arg){
  65. //console.log(eventName);
  66. //console.log(arg);
  67. if (arg.length > 0) {
  68. var obj = JSON.parse(arg);
  69. ta.track(eventName,obj)
  70. }
  71. else{
  72. ta.track(eventName,{})
  73. }
  74. },
  75. WebPayItem(arg){
  76. //console.log("sha1", appSystem.sha1("1646989046234D528C6F23C7D7"))
  77.  
  78. var obj = JSON.parse(arg)
  79. if(obj.wx_android === false){
  80. payConfig().then(res => {
  81. if(res.ios_recharge === true && obj.RoleLv > res.ios_level){
  82. UpPay(obj)
  83. }
  84. else{
  85. let objd = {
  86. code:1,
  87. info:"iOS 用户等级不够"
  88. }
  89. let jsString = JSON.stringify(objd);
  90. SendPayResultMessage(jsString)
  91. }
  92. console.log("ios pay " + JSON.stringify(res))
  93. }).catch(error => {
  94.  
  95. })
  96. }
  97. else{
  98. UpPay(obj)
  99. }
  100.  
  101. },
  102. WebSetUserData(arg){
  103. var obj = JSON.parse(arg)
  104. ta.userSet(obj);
  105. },
  106.  
  107. WebCallChannelVoidFunWithArg(name,arg){
  108. //GameGlobal.Module.SendMessage("Canvas","ChannelLogout","hahhahah")
  109. //appSystem.exportTest1()
  110. //appSystem.exportTest2("zhang san")
  111. //appSystem.csharp(1,"sss");
  112. //ta.login("ABC_123456");
  113. if(name === "setSuperProperties"){
  114. var obj = JSON.parse(arg)
  115. ta.setSuperProperties(obj);
  116. }
  117. else if(name === "userSet"){
  118. var obj = JSON.parse(arg)
  119. ta.userSet(obj);
  120. }
  121. else if(name === "unityHasInit"){
  122. appEntity.unityHasInit = true
  123. }
  124. else if(name === "actionRegister"){
  125. ReyunRegister()
  126. appSystem.PostSourceRegister()
  127. }
  128. else if(name === "actionLogin"){
  129. ReyunLogin()
  130. }
  131. else if(name === "actionPurchase"){
  132. var obj = JSON.parse(arg)
  133. ReyunPayment(obj);
  134. //appSystem.PostSourcePay(obj.currencyAmount * 100)
  135. }
  136. else if(name === "showRewardedVideo"){
  137. createAd({
  138. ad_type:"video",
  139. task:''
  140. }).then(res => {
  141. adHandler("onRewardedVideoAdRewarded","")
  142. adHandler("onRewardedVideoAdClosed","")
  143. //GameGlobal.Module.SendMessage(appEntity.receivername,"onRewardedVideoAdRewarded","");
  144. //GameGlobal.Module.SendMessage(appEntity.receivername,"onRewardedVideoAdClosed","");
  145. console.log("showRewardedVideo222 " + JSON.stringify(res))
  146. }).catch(error => {
  147. console.log("showRewardedVideo11111 " + JSON.stringify(error))
  148. })
  149. console.log("VoidFunWithArg " + name + "---" + arg);
  150. }
  151. else if(name === "SDKInit"){
  152. let tanwandata = {
  153. app_version: arg,
  154. config_id: '',
  155. game_name: ''
  156. };
  157. // 初始化小游戏SDK
  158. init(tanwandata).then(res => {
  159. wx.showToast({
  160. title: '进入游戏成功',
  161. })
  162. //拉起订阅
  163. requestSubscribeMessage()
  164. //触发订阅
  165. triggerSubscribe('login')
  166. }).catch(error => {
  167. })
  168. let org = {
  169. userType:"TanWan"
  170. }
  171. ta.userSet(org);
  172. console.log("VoidFunWithArg " + name + "---" + arg);
  173. }
  174.  
  175. },
  176.  
  177. WxInit(){
  178. //u8参数初始化
  179. //appSystem.InitU8Arg();
  180. //数数初始化
  181. ShushuInit();
  182. //热云初始化
  183. ///sdk.init(appEntity.reYunAppKey);
  184. //登录
  185. //appSystem.channelLogin();
  186. //归因初始化
  187. //SourceInit()
  188. },
  189.  
  190. WebTanWanEvent(eventName,arg){
  191. var obj = JSON.parse(arg)
  192. let reportArg = {}
  193. if(eventName === "1"){
  194. reportArg.data_type = 1
  195. }
  196. else if(eventName === "2"){
  197. reportArg.data_type = 2
  198. }
  199. else if(eventName === "3"){
  200. reportArg.data_type = 3
  201. }
  202. else if(eventName === "4"){
  203. reportArg.data_type = 4
  204. }
  205.  
  206. reportArg.server_id = 1
  207. reportArg.server_name = ""
  208. reportArg.uid = obj.RoleId
  209. reportArg.role_id = obj.RoleId
  210. reportArg.role_name = ""
  211. reportArg.role_level = obj.RoleLv
  212. reportArg.role_currency = obj.MoneyNum
  213. reportArg.role_create_time = obj.RoleCreateTime
  214. reportArg.fight = 1
  215. reportArg.role_sex = 1
  216. reportArg.vip_level = 1
  217. reportArg.role_career = ""
  218. dataReport(reportArg).then(res => {
  219. }).catch(error => {
  220. })
  221.  
  222. console.log("WebTanWanEvent " + JSON.stringify(reportArg))
  223.  
  224. },
  225.  
  226. GetOpenId(openid) {
  227. //console.log("account_id " + openid)
  228. ta.login(appEntity.account_id);
  229. },
  230. ShushuEventTimeStart(eventName){
  231. ta.timeEvent(eventName);
  232. },
  233. ShushuJsTrack(eventName,obj){
  234. ta.track(eventName,obj)
  235. }
  236.  
  237. }
  238.  
  239. function SendPayResultMessage(re){
  240. console.log("SendPayResult",re)
  241. GameGlobal.Module.SendMessage(appEntity.receivername,"PayResult",re);
  242. }
  243.  
  244. function ShushuInit(wxcode){
  245. var config = {
  246. appId:appEntity.shushuAppId, // 项目 APP ID
  247. serverUrl:appEntity.shushuUrl , // 上报地址
  248. enableLog:false,
  249. autoTrack: {
  250. appShow: true, // 自动采集 ta_mg_show
  251. appHide: true // 自动采集 ta_mg_hide
  252. }
  253. };
  254. // 创建 TA 实例
  255. ta = new ThinkingAnalyticsAPI(config);
  256. // 初始化
  257. ta.init();
  258. ta.identify(ta.getDeviceId());
  259. appEntity.ta = ta;
  260. //console.log("shushu init")
  261. //console.log("getDeviceId",ta.getDeviceId());
  262. // 上报一个简单事件, 事件名为 test_event
  263. }
  264.  
  265. function UpPay(obj){
  266. var payArg = {}
  267. payArg.uid = "1"
  268. payArg.server_id = "1"
  269. payArg.server_name = "正式服"
  270. payArg.role_id = "1"
  271. payArg.role_name = "1"
  272. payArg.role_level = 1
  273. payArg.role_currency = 1
  274. payArg.amt = obj.Fee / 100
  275. payArg.game_fee = 1
  276. payArg.product_id = obj.detail
  277. payArg.product_name = "游戏充值"
  278. payArg.product_desc = "游戏充值"
  279. payArg.ext = obj.gameOrderId + ",1174" + "," + obj.rig
  280. console.log("payArg" + JSON.stringify(payArg))
  281. makePayment(payArg).then(payres => {
  282. wx.getSystemInfo({
  283. success (res) {
  284. if(res.platform === "ios"){
  285. }
  286. else{
  287. let objd = {
  288. code:0,
  289. info:"轮询"
  290. }
  291. let jsString = JSON.stringify(objd);
  292. SendPayResultMessage(jsString)
  293. }
  294. }
  295. })
  296. }).catch(error => {
  297.  
  298. })
  299. }
  300.  
  301. //热云注册接口
  302. function ReyunRegister(){
  303. //sdk.register(appEntity.wxopenId)
  304. }
  305.  
  306. function ReyunLogin(){
  307. //sdk.loggedin(appEntity.account_id)
  308. }
  309.  
  310. function ReyunPayment(arg){
  311. //js["transactionId"] = transactionId;
  312. //js["currencyAmount"] = currencyAmount;
  313. //js["currencyType"] = currencyType;
  314. //js["paymentType"] = paymentType;
  315. //sdk.payment(arg.transactionid,arg.currencyamount,arg.currencytype,arg.paymenttype)
  316. }
  317.  
  318. function SourceInit() {
  319. let jsobj = wx.getStorageSync('Source')
  320. var bb = Object.keys(jsobj)
  321. if(bb.length === 0){
  322. //if(true){
  323. //debugger
  324. let objs = wx.getLaunchOptionsSync()
  325. if ('query' in objs) {
  326. let qurayStr = JSON.stringify(objs.query)
  327. if (qurayStr.length > 0) {
  328. ta.userSet(qurayStr)
  329. }
  330. }
  331.  
  332. if ('query' in objs) {
  333. if ('clue_token' in objs.query) {
  334. appEntity.clue_token = objs.query.clue_token;
  335. }
  336.  
  337. if ('ad_id' in objs.query) {
  338. appEntity.ad_id = objs.query.ad_id;
  339. }
  340. if ('creative_id' in objs.query) {
  341. appEntity.creative_id = objs.query.creative_id;
  342. }
  343.  
  344. if ('req_id' in objs.query){
  345. appEntity.req_id = objs.query.req_id;
  346. }
  347.  
  348. if ('advertiser_id' in objs.query) {
  349. appEntity.advertiser_id = objs.query.advertiser_id;
  350. }
  351.  
  352. if ('project_id' in objs.query) {
  353. appEntity.advertiser_id = objs.query.project_id;
  354. }
  355.  
  356. if ('promotion_id' in objs.query) {
  357. appEntity.advertiser_id = objs.query.promotion_id;
  358. }
  359.  
  360. if ('mid1' in objs.query) {
  361. appEntity.mid1 = objs.query.mid1;
  362. }
  363.  
  364. if ('mid2' in objs.query) {
  365. appEntity.mid2 = objs.query.mid2;
  366. }
  367.  
  368. if ('mid3' in objs.query) {
  369. appEntity.mid3 = objs.query.mid3;
  370. }
  371.  
  372. if ('mid4' in objs.query) {
  373. appEntity.mid4 = objs.query.mid4;
  374. }
  375.  
  376. if ('mid5' in objs.query) {
  377. appEntity.mid5 = objs.query.mid5;
  378. }
  379. }
  380.  
  381. let obj = {
  382. ad_id:appEntity.ad_id,
  383. creative_id:appEntity.creative_id,
  384. advertiser_id:appEntity.advertiser_id,
  385. clue_token:appEntity.clue_token,
  386. };
  387. let str = JSON.stringify(obj);
  388. //console.log(str);
  389. wx.setStorageSync('Source',str)
  390. appEntity.firstOpen = true;
  391. }
  392. else{
  393. let sorObj = JSON.parse(jsobj);
  394. appEntity.ad_id = sorObj.ad_id;
  395. appEntity.creative_id = sorObj.creative_id;
  396. appEntity.advertiser_id = sorObj.advertiser_id;
  397. appEntity.clue_token = sorObj.clue_token;
  398. }
  399. }
  400.  
  401. function adHandler(funName,arg){
  402. let obj = {
  403. "FunName":funName,
  404. "Arg":arg
  405. }
  406. let tarStr = JSON.stringify(obj)
  407. console.log("tarStr " + tarStr)
  408. GameGlobal.Module.SendMessage(appEntity.receivername,"AdHandler",tarStr);
  409. }

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

  1. import apps from './apps';
  2. const WXWASMSDK = {
  3. /*
  4. 初始化
  5. */
  6. WXInitializeSDK() {
  7. moduleHelper.init();
  8. moduleHelper.send('Inited', 200);
  9. },
  10. ...storage,
  11. ...userInfo,
  12. ...share,
  13. ...ad,
  14. ...canvasHelper,
  15. ...fs,
  16. ...openData,
  17. ...util,
  18. ...cloud,
  19. ...audio,
  20. ...texture,
  21. ...video,
  22. ...logger,
  23. ...shortAudio,
  24. ...gameClub,
  25. canvasContext,
  26. ...sdk,
  27. ...camera,
  28. ...recorder,
  29. ...uploadFile,
  30. ...gameRecorder,
  31. ...apps, //加的这个
  32. };

  SDK  初始化在 Game.js 中

  1. GameGlobal.WXWASMSDK.WxInit();

  实为apps 的调用方法

新建 app-system

  1. import {appEntity} from './app-entity';
  2. import {appSanboxCfg} from './appSanboxCfg';
  3. import { CryptoJS } from './CryptoJS.js';
  4. export function exportTest1() {
  5.  
  6. }
  7. export function exportTest2(name) {
  8.  
  9. }
  10.  
  11. export function csharp(id,errMsg){
  12.  
  13. }
  14.  
  15. export function js(){
  16.  
  17. }
  18.  
  19. export function u8Post(url, postData, doSuccess, doFail){
  20. var base = appEntity.u8ServerUrl
  21. wx.request({
  22. //项目的真正接口,通过字符串拼接方式实现
  23. url: base + url,
  24. // 这个header根据你的实际改!
  25. header:{
  26. 'X-GameId':appEntity.u8GameId,
  27. 'X-ChannelId':appEntity.u8ChannelId,
  28. 'X-PackageId':appEntity.u8PackageId,
  29. 'Content-Type': 'application/json',
  30. 'cookie': appEntity.u8HttpToken,
  31. 'Request-Origin': 'app'
  32. },
  33. data: postData,
  34. method: 'POST',
  35. success: function (res) {
  36. //参数值为res.data,直接将返回的数据传入
  37. //if (res.data.result.token) { // 如果有token保存下来,下次请求带着token访问
  38. // appEntity.u8HttpToken = res.data.result.token;
  39. // console.log("token--> ", appEntity.u8HttpToken)
  40. //}
  41. doSuccess(res.data);
  42. },
  43. fail: function () {
  44. doFail();
  45. },
  46. })
  47. }
  48.  
  49. export function u8GetData(url, getData, doSuccess, doFail) {
  50. wx.request({
  51. url: url,
  52. header: {
  53. 'Content-Type': 'application/json',
  54. 'X-Access-Token': appEntity.u8HttpToken,
  55. 'Request-Origin': 'app'
  56. },
  57. method: 'GET',
  58. data: getData,
  59. success: function (res) {
  60. doSuccess(res.data);
  61. },
  62. fail: function () {
  63. doFail();
  64. },
  65. })
  66. }
  67.  
  68. export function getSignStringFromObj(obj){
  69. let arrIndex = 0;
  70. let arr = [];
  71. for (let key in obj) {
  72. if (obj.hasOwnProperty(key)) {
  73. arr[arrIndex] = {
  74. paramKey:key,
  75. paramVal:obj[key],
  76. }
  77. arrIndex = arrIndex + 1
  78. }
  79. }
  80. arr.sort(compare);
  81. let targeStr = "";
  82. for(var i = 0; i < arr.length; i++){
  83. if(targeStr !== ""){
  84. targeStr = targeStr + "&"
  85. }
  86. targeStr = targeStr + arr[i].paramKey + "=" + arr[i].paramVal;
  87. }
  88. obj.timestamp = Date.now();
  89. obj.nonce = 3652;
  90. targeStr = targeStr + "&" + "timestamp="+ obj.timestamp +"&nonce=" + obj.nonce
  91. //console.log("test target " + targeStr);
  92. return targeStr;
  93. }
  94.  
  95. export function channelLogin(){
  96. //u8 完成登录就不回去登录
  97. if(appEntity.account_id !== ""){
  98. GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
  99. var presetProperties = appEntity.ta.getPresetProperties();
  100. var properties = presetProperties.toEventPresetProperties();
  101. GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
  102. console.log("properties " + JSON.stringify(properties))
  103. return
  104. }
  105. wx.login({
  106. success: function(res) {
  107. //console.log(res.code);//这里的返回值就有Code信息
  108. u8Login(res.code);
  109. //debugger;
  110. },
  111. fail: function(res) {
  112. let loginArg = {
  113. result:false,
  114. fail_reason:"wx fail",
  115. }
  116. GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
  117. },
  118. complete: function(res) {},
  119. })
  120. }
  121.  
  122. function u8Login(code){
  123. let url = "usercenter/wx1/login";
  124. let data = {
  125. wx_code : code,
  126. }
  127. let signCode = getSignStringFromObj(data);
  128. var hash_result = CryptoJS.HmacSHA256(signCode, appEntity.u8Sign).toString();
  129. data.sign = hash_result;
  130.  
  131. u8Post(url,data,
  132. function(succ){
  133. if(succ.code === 200){
  134. appEntity.account_id = succ.data.account_id;
  135. appEntity.wxopenId = succ.data.openid;
  136. //console.log("wxopenId " + succ.data.openid)
  137. //debugger
  138. appEntity.wxtoken = succ.data.token;
  139. //热云初始化,数数login
  140. GameGlobal.WXWASMSDK.GetOpenId(appEntity.wxopenId);
  141. //这个要微信的数据
  142. PostSourceActive()
  143. GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverChannelLoginCallBack",appEntity.account_id);
  144. var presetProperties = appEntity.ta.getPresetProperties();
  145. //生成事件预置属性
  146. var properties = presetProperties.toEventPresetProperties();
  147. GameGlobal.Module.SendMessage(appEntity.receivername,"ReceiverPresetProperties",JSON.stringify(properties));
  148. let loginArg = {
  149. result:true,
  150. fail_reason:"u8 server ok",
  151. }
  152. GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
  153.  
  154. let reArg = {
  155. login_type:"weixin",
  156. login_id:appEntity.account_id,
  157. result:true,
  158. fail_reason:"ok"
  159. }
  160. GameGlobal.WXWASMSDK.ShushuJsTrack("login_result",reArg);
  161. }
  162. else{
  163. let loginArg = {
  164. result:false,
  165. fail_reason:succ.message,
  166. }
  167. GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
  168. }
  169. },
  170. function(){
  171. let loginArg = {
  172. result:false,
  173. fail_reason:"u8 server error",
  174. }
  175. GameGlobal.WXWASMSDK.ShushuJsTrack("U8_init",loginArg);
  176. })
  177. }
  178.  
  179. function compare(obj1, obj2) {
  180. let val1 = obj1.paramKey;
  181. let val2 = obj2.paramKey;
  182. if (val1 < val2) {
  183. return -1;
  184. } else if (val1 > val2) {
  185. return 1;
  186. } else {
  187. return 0;
  188. }
  189. }
  190.  
  191. //用户点击了支付
  192. export function wxPay(csobj){
  193. wx.login({
  194. success: function(res) {
  195. upWxPay(csobj,res.code)
  196. },
  197. fail: function(res) {
  198. let objd = {
  199. code:1,
  200. info:"获取微信code失败"
  201. }
  202. let jsString = JSON.stringify(objd);
  203. SendPayResultMessage(jsString)
  204. },
  205. complete: function(res) {
  206.  
  207. },
  208. })
  209. }
  210.  
  211. function getSignature(arg,succfunc) {
  212. let data = {
  213. account_id:appEntity.account_id,
  214. nickname:arg.nickName,
  215. gender:arg.gender,
  216. language:arg.language,
  217. city:arg.city,
  218. province:arg.province,
  219. country:arg.country,
  220. avatar_url:arg.avatarUrl,
  221. }
  222. let signCode = getSignStringFromObj(data);
  223. var hash_result = CryptoJS.HmacSHA256(signCode, appEntity.u8Sign).toString();
  224. data.sign = hash_result;
  225. //debugger
  226. u8Post("/usercenter/wx1/min/signature",data,
  227. function(params) {
  228.  
  229. appEntity.signature = params.data.signature;
  230. succfunc(params)
  231. //debugger
  232. },
  233. function(params) {
  234.  
  235. })
  236. }
  237.  
  238. function upWxPay(csobj,wxcode) {
  239. let arg = {
  240. mode:"game",
  241. env:appEntity.env,
  242. offerId:appEntity.offerId,
  243. currencyType:"CNY",
  244. platform:"android",
  245. buyQuantity:csobj.Fee / 10,
  246. zoneId:"1",
  247. success:function(res){
  248. //console.log("paysucc " + JSON.stringify(res))
  249. webAndroidMoneyHasGone(csobj,wxcode)
  250. },
  251. fail:function(res){
  252. //console.log(res)
  253. let objd = {
  254. code:1,
  255. info:res
  256. }
  257. let jsString = JSON.stringify(objd);
  258. SendPayResultMessage(jsString)
  259. webAndroidMoneyHasGone(csobj,wxcode)
  260. console.log("payfail " + JSON.stringify(res))
  261. },
  262. complete:function(){
  263. //通知服务器去微信服扣货
  264. },
  265. };
  266. //拉起微信支付
  267. wx.requestMidasPayment(arg);
  268. //webAndroidMoneyHasGone(csobj,wxcode)
  269. //console.log("appEntity.offerId offerIdofferId " + appEntity.offerId)
  270. }
  271.  
  272. function webAndroidMoneyHasGone(objCharp,code){
  273. let postData = {};
  274. postData.env = appEntity.env
  275. postData.openid = appEntity.wxopenId;
  276. //postData.appid = appEntity.wxAppId;
  277. postData.offer_id = appEntity.offerId;
  278. postData.zone_id = 1
  279. postData.access_token = appEntity.weixinServerToken;
  280. postData.game_orderid = objCharp.gameOrderId
  281. postData.js_code = code
  282. postData.accountid = appEntity.account_id
  283. //debugger
  284. var base = appEntity.webAndroidPayUrl;
  285. //console.log("base" + base)
  286. wx.request({
  287. //项目的真正接口,通过字符串拼接方式实现
  288. url: base,
  289. // 这个header根据你的实际改!
  290. header: {
  291. 'Content-Type': 'application/json',
  292. 'Request-Origin': 'app'
  293. },
  294. data: postData,
  295. method: 'POST',
  296. success: function (res) {
  297. //debugger
  298. let objd = {
  299. code:0,
  300. info:"支付成功"
  301. }
  302. let jsString = JSON.stringify(objd);
  303. SendPayResultMessage(jsString)
  304. },
  305. fail: function () {
  306. //debugger
  307. //doFail();
  308. let objd = {
  309. code:1,
  310. info:"从微信扣款失败"
  311. }
  312. let jsString = JSON.stringify(objd);
  313. SendPayResultMessage(jsString)
  314. },
  315. })
  316. }
  317.  
  318. function encodeUTF8(s) {
  319. var i, r = [], c, x;
  320. for (i = 0; i < s.length; i++)
  321. if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
  322. else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
  323. else {
  324. if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode
  325. c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
  326. r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
  327. else r.push(0xE0 + (c >> 12 & 0xF));
  328. r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
  329. };
  330. return r;
  331. };
  332.  
  333. // 字符串加密成 hex 字符串
  334. export function sha1(s) {
  335. var data = new Uint8Array(encodeUTF8(s))
  336. var i, j, t;
  337. var l = ((data.length + 8) >>> 6 << 4) + 16, s = new Uint8Array(l << 2);
  338. s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
  339. for (t = new DataView(s.buffer), i = 0; i < l; i++)s[i] = t.getUint32(i << 2);
  340. s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
  341. s[l - 1] = data.length << 3;
  342. var w = [], f = [
  343. function () { return m[1] & m[2] | ~m[1] & m[3]; },
  344. function () { return m[1] ^ m[2] ^ m[3]; },
  345. function () { return m[1] & m[2] | m[1] & m[3] | m[2] & m[3]; },
  346. function () { return m[1] ^ m[2] ^ m[3]; }
  347. ], rol = function (n, c) { return n << c | n >>> (32 - c); },
  348. k = [1518500249, 1859775393, -1894007588, -899497514],
  349. m = [1732584193, -271733879, null, null, -1009589776];
  350. m[2] = ~m[0], m[3] = ~m[1];
  351. for (i = 0; i < s.length; i += 16) {
  352. var o = m.slice(0);
  353. for (j = 0; j < 80; j++)
  354. w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1),
  355. t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0,
  356. m[1] = rol(m[1], 30), m.pop(), m.unshift(t);
  357. for (j = 0; j < 5; j++)m[j] = m[j] + o[j] | 0;
  358. };
  359. t = new DataView(new Uint32Array(m).buffer);
  360. for (var i = 0; i < 5; i++)m[i] = t.getUint32(i << 2);
  361. var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) {
  362. return (e < 16 ? "0" : "") + e.toString(16);
  363. }).join("");
  364. return hex;
  365. };
  366.  
  367. function PostSourceActive() {
  368. if (appEntity.firstOpen) {
  369. let jsondata = {
  370. clue_token:appEntity.clue_token,
  371. open_id:appEntity.wxopenId,
  372. event_type:"0"
  373. }
  374. PostSourceHttp(jsondata)
  375. }
  376. }
  377.  
  378. export function PostSourceRegister() {
  379. let jsondata = {
  380. clue_token:appEntity.clue_token,
  381. open_id:appEntity.wxopenId,
  382. event_type:"1"
  383. }
  384. PostSourceHttp(jsondata)
  385. }
  386.  
  387. export function PostSourcePay(amount) {
  388. let jsondata = {
  389. clue_token:appEntity.clue_token,
  390. open_id:appEntity.wxopenId,
  391. event_type:"2",
  392. props:{
  393. pay_amount:amount
  394. }
  395. }
  396. PostSourceHttp(jsondata)
  397. }
  398.  
  399. function PostSourceHttp(jsondata){
  400. let time = Date.now();
  401. let nonce = Math.round(Math.random()*10);
  402. let strList = [appEntity.sourcetoken, time, nonce];
  403. strList.sort();
  404. let buffer = "";
  405. strList.forEach(str => {
  406. buffer += str;
  407. })
  408. let sign = sha1(buffer)
  409. //debugger
  410. let targeturl = appEntity.sourceUrl + "?timestamp=" + time + "&nonce="+ nonce +"&signature=" + sign
  411. //console.log("url " + targeturl)
  412. wx.request({
  413. url:targeturl,
  414. header: {
  415. 'Content-Type': 'application/json',
  416. 'Request-Origin': 'app'
  417. },
  418. data: jsondata,
  419. method: 'POST',
  420. success: function (res) {
  421. //console.log("zhangsan " + JSON.stringify(res.data))
  422. },
  423. fail:function(){
  424. },
  425. })
  426. }
  427.  
  428. export function WebiOSPay(obj){
  429. let amount = obj.Fee;
  430. let accid = appEntity.account_id;
  431. let url = appEntity.webiOSNotPayUrl;
  432. let extension = obj.extension
  433. let server_id = 1
  434. let game = obj.body
  435. let goods = "方块大作战充值"
  436. 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}`
  437.  
  438. //console.log(targetStr + "targetStr")
  439.  
  440. wx.openCustomerServiceConversation({
  441. showMessageCard: true,
  442. sessionFrom: "game",
  443. sendMessagePath:targetStr,
  444. sendMessageTitle:"我要充值",
  445. sendMessageImg: "https://c-ssl.duitang.com/uploads/blog/202102/12/20210212163554_83b7a.jpg",
  446. success() {
  447. //console.log('调起成功');
  448. },
  449. fail() {
  450. //console.log('调起失败');
  451. }
  452. });
  453. }
  454.  
  455. export function SendPayResultMessage(re){
  456. //console.log("zhangsan",re)
  457. GameGlobal.Module.SendMessage(appEntity.receivername,"PayResult",re);
  458. }
  459.  
  460. export function InitU8Arg() {
  461. if (appSanboxCfg.sanbox) {
  462. appEntity.u8appid = appEntity.u8
  463. appEntity.u8GameId = appEntity.u8GameIdTest;
  464. appEntity.u8ChannelId = appEntity.u8ChannelIdTest;
  465. appEntity.u8PackageId = appEntity.u8PackageIdTest;
  466. appEntity.u8Sign = appEntity.u8SignTest;
  467. appEntity.u8ServerUrl = appEntity.u8ServerUrlTest;
  468. appEntity.env = appEntity.envTest
  469.  
  470. }
  471. }

  还有个app-entity 存放变量的

  1. export var appEntity = {
  2. //与U8交互的口令 暂时没有用
  3. u8HttpToken : null,
  4. //测试参数
  5. u8appidTest:,
  6. u8GameIdTest : "",
  7. u8ChannelIdTest : "",
  8. u8PackageIdTest : "",
  9. u8SignTest:"",
  10. u8ServerUrlTest:"",
  11. //正式参数
  12. u8appid:,
  13. u8GameId : "",
  14. u8ChannelId : "",
  15. u8PackageId : "",
  16. u8Sign:"",
  17. u8ServerUrl:"",
  18. //登录获取的账户id
  19. account_id:"",
  20. //微信的union_id
  21. union_id:'',
  22. //登录获取的微信id
  23. wxopenId:"",
  24. //后端与微信后端交互口令
  25. wxtoken:"",
  26. //unity 是否初始胡完成
  27. unityHasInit:false,
  28. //webAndroid 支付url
  29. webAndroidPayUrl:"",
  30. //微信后台虚拟货币id
  31. //offerId:"",
  32. offerId:"",
  33. //微信的appid
  34. wxAppId:"",
  35. env:0,
  36. envTest:1,
  37. //热云appkey
  38. reYunAppKey:"",
  39. //
  40. receivername:"Global",
  41. //游戏服和微信服交互的token
  42. weixinServerToken:"",
  43.  
  44. //归因
  45. ad_id:'',
  46. creative_id:'',
  47. advertiser_id:'',
  48. clue_token:'',
  49. req_id:'',
  50. project_id:'',
  51. promotion_id:'',
  52. mid1:'',
  53. mid2:'',
  54. mid3:'',
  55. mid4:'',
  56. mid5:'',
  57. firstOpen:false,
  58. // 归因服url
  59. sourceUrl:"",
  60. sourcetoken:"",
  61.  
  62. webiOSNotPayUrl:"",
  63.  
  64. //数数
  65. shushuAppId:"",
  66. shushuUrl:"",
  67. ta:"",
  68. }

  

Unity 转小游戏的更多相关文章

  1. Unity小游戏制作 - 暗影随行

    用Unity制作小游戏 - 暗影惊吓 最近玩了一个小游戏,叫做暗影惊吓,虽然是一个十分简单的小游戏,但是感觉还是十分有趣的.这里就用Unity来实现一个类似的游戏. 项目源码:DarkFollow 主 ...

  2. 自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

    自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...

  3. 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析

    自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...

  4. 自制Unity小游戏TankHero-2D(3)开始玩起来

    自制Unity小游戏TankHero-2D(3)开始玩起来 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的.仅 ...

  5. 自制Unity小游戏TankHero-2D(2)制作敌方坦克

    自制Unity小游戏TankHero-2D(2)制作敌方坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...

  6. 自制Unity小游戏TankHero-2D(1)制作主角坦克

    自制Unity小游戏TankHero-2D(1)制作主角坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...

  7. Kinect+unity 实现体感格斗闯关小游戏

    文章目录 项目地址 1 项目概况 1.1 项目简介 1.2 项目目的 1.3 主要技术 2 设计 2.1 基本概念 2.2 框架 2.3 算法 2.4 模型 2.5 调查问卷 3 实现 3.1 技术难 ...

  8. 解压小游戏之打砖块(C#+unity)

    z这个小游戏很简洁,很简单,非常适合一个人玩,特别减压

  9. 原创跑酷小游戏《Cube Duck Run》 - - 方块鸭快跑

    自从unity5出来才开始关注unity,业余时间尝试做了个小游戏: <方块鸭快跑> (Cube Duck Run) 像素风,3d视角,色彩明快,有无尽和关卡两种模式. 应用连接: goo ...

  10. 历时一周,unity3d+xtion打造我的第一个休闲体感小游戏《空降奇兵》

    1.游戏介绍 本游戏属于休闲小游戏,主要操作如下: 菜单控制:举起左手或右手,点击左边或者右边的菜单:挥动左手或右手,选择关卡: 操作方式:玩家跳跃,游戏中的伞兵从飞机开始降落:玩家通过控制伞兵的左右 ...

随机推荐

  1. k8s入门_RC、RS、Deployment

    RC 什么是RC: Replication Controller(副本控制器),RC能够保证pod在任意时间运行的副本数量,能够保证pod总是可用的. RC控制的pod的多个副本,每个副本都有独立的i ...

  2. wamp+phpstrom+Xdebuge helper(google)

    一.软件安装两个软件的安装和第三个浏览器插件就不再赘述,网上有很多详细的教程,自行百度. 二.配置步骤1.wampwamp的优势在于自带xdebuge的dll文件,所以不需要在官网根据版本下载,具体位 ...

  3. 三步建立自己域名的主页,Github Pages功能简明手册

    [task]把自己的页面上传到git上,用github pages功能托管网页. 准备工作: 1.自己的网页文件 2.有个自己的git账号 3.下载安装git.下载地址https://git-scm. ...

  4. JDBC之Statement

    Statement 目录 Statement Statement Statement概述 要执行的SQL分为两类 查询 增删改 Statement继承体系 SQL注入问题 SQL注入问题解决 获取得到 ...

  5. linux内核源码编译加制作rpm包

    本章主要讲解实际操作步骤,具体理论知识可以自行百度 linux内核官网下载:https://cdn.kernel.org/pub/linux/kernel/   (如图) 根据官网发布的信息分析,目前 ...

  6. Vite项目打包配置详解

    一:vite构建项目 配置base 1.base配置打包公共路径 打开package.json 做项目时可以不去掉 好了,在以上你构建了vite,并配置了最简单的操作后,你准备配置vite.confi ...

  7. Mac 下的虚拟机Parallels_Desktop_15

    Mac 下的虚拟机Parallels_Desktop_15 1,取得 Mac Parallels_Desktop_15.dmg 后挂载,密码:7410   2,点关闭!关闭!关闭!,千万不要点&quo ...

  8. hadoop克隆三台虚拟机安装JDK和hadoop并配置环境变量

    首先将模板虚拟机关机,进行对模板虚拟机的克隆. 选择完整克隆 克隆三台虚拟机. 注意虚拟机的移除与删除 打开hadoop102,修改ip地址与hostname 切换至root用户,或以root用户登录 ...

  9. ftp服务无法覆盖同名文件

    1.linux修改/etc/pure-ftpd/pure-ftpd.conf的AutoRename  yes 重启ftp服务 2.windows server修改 选中ftp站点,选择右侧高级设置,选 ...

  10. redis 数据库在linux下的安装配置与使用

    linux安装redis 完整步骤(1)安装: 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 t ...