config.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. function str2asc(strstr){
  2. return ("0"+strstr.charCodeAt(0).toString(16)).slice(-2);
  3. }
  4. function asc2str(ascasc){
  5. return String.fromCharCode(ascasc);
  6. }
  7. exports.UrlEncode=function(str){
  8. var ret="";
  9. var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%";
  10. var tt= "";
  11. for(var i=0;i<str.length;i++){
  12. var chr = str.charAt(i);
  13. var c=str2asc(chr);
  14. tt += chr+":"+c+"n";
  15. if(parseInt("0x"+c) > 0x7f){
  16. ret+="%"+c.slice(0,2)+"%"+c.slice(-2);
  17. }else{
  18. if(chr==" ")
  19. ret+="+";
  20. else if(strSpecial.indexOf(chr)!=-1)
  21. ret+="%"+c.toString(16);
  22. else
  23. ret+=chr;
  24. }
  25. }
  26. return ret;
  27. }
  28. exports.UrlDecode = function(str){
  29. var ret="";
  30. for(var i=0;i<str.length;i++){
  31. var chr = str.charAt(i);
  32. if(chr == "+"){
  33. ret+=" ";
  34. }else if(chr=="%"){
  35. var asc = str.substring(i+1,i+3);
  36. if(parseInt("0x"+asc)>0x7f){
  37. ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6)));
  38. i+=5;
  39. }else{
  40. ret+=asc2str(parseInt("0x"+asc));
  41. i+=2;
  42. }
  43. }else{
  44. ret+= chr;
  45. }
  46. }
  47. return ret;
  48. }
  49. var template = {
  50. std : {
  51. '10001': { cfid:10001, typename:'CNY', price:6, diamond:60, name:'60钻石'},
  52. '10002': { cfid:10002, typename:'CNY', price:30, diamond:300, name:'300钻石'},
  53. '10003': { cfid:10003, typename:'CNY', price:68, diamond:680, name:'680钻石'},
  54. '10004': { cfid:10004, typename:'CNY', price:98, diamond:980, name:'980钻石'},
  55. '10005': { cfid:10005, typename:'CNY', price:128, diamond:1280, name:'1280钻石'},
  56. '10006': { cfid:10006, typename:'CNY', price:198, diamond:1980, name:'1980钻石'},
  57. '10007': { cfid:10007, typename:'CNY', price:328, diamond:3280, name:'3280钻石'},
  58. '10008': { cfid:10008, typename:'CNY', price:648, diamond:6480, name:'6480钻石'},
  59. },
  60. youda : {
  61. '10001': { cfid:10001, typename:'CNY', price:6, diamond:60, name:'60钻石'},
  62. '10002': { cfid:10002, typename:'CNY', price:30, diamond:300, name:'300钻石'},
  63. '10003': { cfid:10003, typename:'CNY', price:68, diamond:680, name:'680钻石'},
  64. '10004': { cfid:10004, typename:'CNY', price:98, diamond:980, name:'980钻石'},
  65. '10005': { cfid:10005, typename:'CNY', price:128, diamond:1280, name:'1280钻石'},
  66. '10006': { cfid:10006, typename:'CNY', price:198, diamond:1980, name:'1980钻石'},
  67. '10007': { cfid:10007, typename:'CNY', price:328, diamond:3280, name:'3280钻石'},
  68. '10008': { cfid:10008, typename:'CNY', price:648, diamond:6480, name:'6480钻石'},
  69. '10015': { cfid:10015, typename:'CNY', price:30, diamond:0, name:'月卡'},
  70. '10016': { cfid:10016, typename:'CNY', price:98, diamond:0, name:'超级月卡'},
  71. '10017': { cfid:10017, typename:'CNY', price:98, diamond:0, name:'高级勋章'},
  72. '10018': { cfid:10018, typename:'CNY', price:128, diamond:0, name:'成长基金'},
  73. '10019': { cfid:10019, typename:'CNY', price:328, diamond:0, name:'豪华基金'},
  74. '10020': { cfid:10020, typename:'USD', price:98, diamond:0, name:'远征通行证'},
  75. '10021': { cfid:10021, typename:'USD', price:98, diamond:0, name:'竞技通行证'},
  76. '10022': { cfid:10022, typename:'USD', price:68, diamond:0, name:'超级月卡1'},
  77. '10023': { cfid:10023, typename:'USD', price:128, diamond:0, name:'勇士勋章1'},
  78. '10024': { cfid:10024, typename:'USD', price:68, diamond:0, name:'勇士勋章2'},
  79. '10030': { cfid:10030, typename:'CNY', price:1, diamond:0, name:'1元礼包'},
  80. '10031': { cfid:10031, typename:'CNY', price:3, diamond:0, name:'3元礼包'},
  81. '10032': { cfid:10032, typename:'CNY', price:6, diamond:0, name:'6元礼包'},
  82. '10033': { cfid:10033, typename:'CNY', price:8, diamond:0, name:'8元礼包'},
  83. '10034': { cfid:10034, typename:'CNY', price:30, diamond:0, name:'30元礼包'},
  84. '10035': { cfid:10035, typename:'CNY', price:68, diamond:0, name:'68元礼包'},
  85. '10036': { cfid:10036, typename:'CNY', price:98, diamond:0, name:'98元礼包'},
  86. '10037': { cfid:10037, typename:'CNY', price:128, diamond:0, name:'128元礼包'},
  87. '10038': { cfid:10038, typename:'CNY', price:198, diamond:0, name:'198元礼包'},
  88. '10039': { cfid:10039, typename:'CNY', price:328, diamond:0, name:'328元礼包'},
  89. '10040': { cfid:10040, typename:'CNY', price:488, diamond:0, name:'488元礼包'},
  90. '10041': { cfid:10041, typename:'CNY', price:648, diamond:0, name:'648元礼包'},
  91. '10042': { cfid:10042, typename:'CNY', price:12, diamond:0, name:'12元礼包'},
  92. '10043': { cfid:10043, typename:'CNY', price:18, diamond:0, name:'18元礼包'},
  93. },
  94. yuda_abd : {
  95. '10001': { cfid:10001, typename:'USD', price:0.99, diamond:60, name:'60钻石'},
  96. '10002': { cfid:10002, typename:'USD', price:4.99, diamond:300, name:'300钻石'},
  97. '10003': { cfid:10003, typename:'USD', price:9.99, diamond:680, name:'680钻石'},
  98. '10004': { cfid:10004, typename:'USD', price:14.99, diamond:980, name:'980钻石'},
  99. '10005': { cfid:10005, typename:'USD', price:19.99, diamond:1280, name:'1280钻石'},
  100. '10006': { cfid:10006, typename:'USD', price:29.99, diamond:1980, name:'1980钻石'},
  101. '10007': { cfid:10007, typename:'USD', price:49.99, diamond:3280, name:'3280钻石'},
  102. '10008': { cfid:10008, typename:'USD', price:99.99, diamond:6480, name:'6480钻石'},
  103. '10015': { cfid:10015, typename:'USD', price:4.99, diamond:0, name:'月卡'},
  104. '10016': { cfid:10016, typename:'USD', price:14.99, diamond:0, name:'超级月卡'},
  105. '10017': { cfid:10017, typename:'USD', price:14.99, diamond:0, name:'高级勋章'},
  106. '10018': { cfid:10018, typename:'USD', price:19.99, diamond:0, name:'成长基金'},
  107. '10019': { cfid:10019, typename:'USD', price:49.99, diamond:0, name:'豪华基金'},
  108. '10020': { cfid:10020, typename:'USD', price:14.99, diamond:0, name:'远征通行证'},
  109. '10021': { cfid:10021, typename:'USD', price:14.99, diamond:0, name:'竞技通行证'},
  110. '10022': { cfid:10022, typename:'USD', price:10.99, diamond:0, name:'超级月卡1'},
  111. '10023': { cfid:10023, typename:'USD', price:19.99, diamond:0, name:'勇士勋章1'},
  112. '10024': { cfid:10024, typename:'USD', price:10.99, diamond:0, name:'勇士勋章2'},
  113. '10030': { cfid:10030, typename:'USD', price:0.19, diamond:0, name:'1元礼包'},
  114. '10031': { cfid:10031, typename:'USD', price:0.49, diamond:0, name:'3元礼包'},
  115. '10032': { cfid:10032, typename:'USD', price:0.99, diamond:0, name:'6元礼包'},
  116. '10033': { cfid:10033, typename:'USD', price:1.99, diamond:0, name:'8元礼包'},
  117. '10034': { cfid:10034, typename:'USD', price:4.99, diamond:0, name:'30元礼包'},
  118. '10035': { cfid:10035, typename:'USD', price:10.99, diamond:0, name:'68元礼包'},
  119. '10036': { cfid:10036, typename:'USD', price:14.99, diamond:0, name:'98元礼包'},
  120. '10037': { cfid:10037, typename:'USD', price:19.99, diamond:0, name:'128元礼包'},
  121. '10038': { cfid:10038, typename:'USD', price:29.99, diamond:0, name:'198元礼包'},
  122. '10039': { cfid:10039, typename:'USD', price:49.99, diamond:0, name:'328元礼包'},
  123. '10040': { cfid:10040, typename:'USD', price:74.99, diamond:0, name:'488元礼包'},
  124. '10041': { cfid:10041, typename:'USD', price:99.99, diamond:0, name:'648元礼包'},
  125. '10042': { cfid:10042, typename:'USD', price:1.99, diamond:0, name:'12元礼包'},
  126. '10043': { cfid:10043, typename:'USD', price:2.99, diamond:0, name:'18元礼包'},
  127. },
  128. }
  129. // Android 产品包的配置数据
  130. var Android = {
  131. editor : template.std, // 测试渠道
  132. yudha : template.yudha,
  133. yuda_abd : template.yuda_abd,
  134. yuda_abdof : template.yuda_abd,
  135. }
  136. // iOS 产品包的配置数据
  137. var IOS = {
  138. yudha : template.yudha,
  139. yuda_abd : template.yuda_abd,
  140. yuda_abdof : template.yuda_abd,
  141. }
  142. //谷歌的验证密钥
  143. var GooglePlay_SIG = {
  144. // 'com.mgames.pixel.en' : {
  145. // sig : 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5XPAAyaVLvvp5tleB2lpDgsDBOOt3Jly/HycNJGGAZe/80niCLe1Tdu6OVzjHCjm4KDxQvcHGUxjbKZK53nsR+zLG1oahk+uBG99BBhnqm3QuYQYoBZs0zj56qqyCkz0r8Nj/TenwBLliYiA4i/z/LIPL+71Z7NBamxH1GqK1JL+E/gNdwI6r0lnEqFqfGqmB/hVP5jQa6ogxxY27f0lD7+p1QV7sDQfIzSGX+M49Notf10Ptesr0BNr6IkMFdQHZRPjdHJBmGAaBw4tAKk/HcyLH22NDexpSU2YOeyr4aMrQ89ydIHGO7KlgPel5Uag/h+ERHv12PrEE2pYrp0qCQIDAQAB',
  146. // },
  147. // 'com.jl3rd.zlwx.google' : { // yytx_dny
  148. // sig : 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApHXWDxtD66vELk6/Xdz0G4CiKKZLfjCauJ1wqDuAxbx2K1jX8YZ56XfyS594sGtBapVpmweLWT6/YrKXpoRv0OXUCL1TFdFaD0S7F6Fvocxcwjq6VHUxd3d7X9ye0yyURDNdqo2phGZbo2HnAF8kzA2ohSNer3ZTLUqqj53Tv0lUjIEWYo5eI/N/F24xRHy5q1JTm+cuRczuUqN5Gh+gt8qAPYPRNTHTNg4WRjGq097ONLnvjzisjubUQiDaYOj1wbPyHYPypAltX0PVt1JnTQ1H/JlFgOUAjATipm41r9CQ2tZVuB98xetVwYpQLK6tS3HztnDmbN0XbhEFEUL+KwIDAQAB'
  149. // },
  150. }
  151. // IOS 中是否是沙盒测试的istest=1沙盒测试 2:正式
  152. var IOS_ISTEST = {
  153. // zd_ios: {istest : 1,},
  154. }
  155. /*
  156. channel: 渠道名
  157. istest: google 使用 (IOS 使用 IOS_ISTEST)
  158. 通过包名,查找对于的渠道标识
  159. */
  160. var appid_channel = {
  161. // "com.jl3rd.zlwx.google":{channel:"yytx_dny",istest:1 }, // yytx_dny(公司发行东南亚) //1是测试2是正式
  162. }
  163. // 通过 cifd 反向查找配置
  164. exports.reverse = function(platform, channel, cfid) {
  165. platform = platform ? platform.toLowerCase() : 'null'
  166. channel = channel ? channel.toLowerCase() : "null"
  167. cfid = cfid ? cfid : 'null'
  168. var hash = null;
  169. if (platform == "ios") {
  170. hash = IOS;
  171. } else if (platform == 'android') {
  172. hash = Android;
  173. } else if (platform == 'zayaweb') {
  174. hash = Web;
  175. }
  176. if (hash) {
  177. var option = hash[channel]
  178. if (option) {
  179. for (var key in option) {
  180. var ret = option[key];
  181. if (ret.cfid == cfid) {
  182. return ret
  183. }
  184. }
  185. }
  186. }
  187. return { cfid:0, typename:'', price:0, diamond:0 }
  188. }
  189. // 解析(在google/ios设置的档位名称) xxx.xxx.1001 返回最后的数据
  190. exports.parse_end = function(key){
  191. var a = key.split('.');
  192. var len = a.length;
  193. if (len > 0) {
  194. key = parseInt(a[len-1]);
  195. if(!key){
  196. key = a[len-1];
  197. }
  198. }
  199. return key
  200. }
  201. exports.parse = function(platform,channel,key) {
  202. platform = platform ? platform.toLowerCase() : 'null'
  203. channel = channel ? channel.toLowerCase() : "null"
  204. key = key ? key : 'null'
  205. var hash = null;
  206. if (platform == 'ios') {
  207. if (key) {
  208. var a = key.split('.');
  209. var len = a.length;
  210. if (len > 0) {
  211. key = parseInt(a[len-1]);
  212. if(!key){
  213. key = a[len-1];
  214. }
  215. hash = IOS;
  216. }
  217. }
  218. } else if (platform == 'android') {
  219. key = parseInt(key);
  220. hash = Android;
  221. } else if(platform == 'googleplay'){
  222. if (key) {
  223. var a = key.split('.');
  224. var len = a.length;
  225. if (len > 0) {
  226. key = parseInt(a[len-1]);
  227. if(!key){
  228. key = a[len-1];
  229. }
  230. hash = Android;
  231. }
  232. }
  233. } else if(platform == "web"){
  234. key = parseInt(key);
  235. hash = Web;
  236. }
  237. if (hash) {
  238. var option = hash[channel];
  239. if (option && option[key]) {
  240. return option[key]
  241. }
  242. }
  243. return { cfid:0, typename:'', price:0, diamond:0 }
  244. }
  245. //@TODO: 是否存在该渠道
  246. exports.allowed_ios_channel = function(channel) {
  247. var option = IOS[channel];
  248. return option ? true : false
  249. }
  250. //@TODO: 充值模式获取
  251. exports.get_ios_istest = function(channel){
  252. var option = IOS_ISTEST[channel];
  253. console.log("option.istest:%s",option.istest)
  254. if (option && (option.istest || 0 == option.istest)){
  255. return option.istest
  256. }
  257. return 2
  258. }
  259. //@TODO: 是否是安卓的充值
  260. exports.allowed_android_channel = function(channel) {
  261. var option = Android[channel];
  262. return option ? true : false
  263. }
  264. //@TODO: google充值秘钥
  265. exports.get_googleplay_sig = function(channel){
  266. var option = GooglePlay_SIG[channel];
  267. if (option && option.sig){
  268. return option.sig
  269. }
  270. return 2
  271. }
  272. // 配置 TalkingData 的 AppID
  273. exports.getAppID = function(channel) {
  274. if (channel=="yudha"){
  275. return "0FE175A24C984525AD76DBE6A46031A0"; // 屠龙简体
  276. }
  277. else if(channel == 'yuda_abd'){
  278. return "91BF1908F5554C0E8DF31C2F9B180A3E"; // 屠龙港澳台
  279. }
  280. else if(channel == 'yuda_abdof'){
  281. return "0645B126AF3642A8AF8A510BF657BA64"; // 屠龙港澳台3测
  282. }
  283. else {
  284. return null;
  285. }
  286. }
  287. // google 通过包名获取渠道配置
  288. exports.get_channel = function(open_appid){
  289. if (appid_channel[open_appid]){
  290. return appid_channel[open_appid].channel;
  291. }
  292. }
  293. // 获取 是否测试标识
  294. exports.get_istest = function(open_appid) {
  295. // console.log("####get_istest %s", open_appid)
  296. if (appid_channel[open_appid]){
  297. return appid_channel[open_appid].istest;
  298. }
  299. return 3
  300. }
  301. // 卓动 是否验证 md5(小游戏使用)
  302. exports.get_verify = function(open_appid) {
  303. if (appid_channel[open_appid]){
  304. return appid_channel[open_appid].verify;
  305. }
  306. return false;
  307. }
  308. //@TODO: 将传入的 data数据, 拼接在一起
  309. exports.url_sort = function(data){
  310. var sort_data = Object.keys(data).sort();
  311. // 生成本地签名验证签名
  312. var strsign = data[sort_data[0]];
  313. for(var i=1;i<sort_data.length;i++){
  314. if(sort_data[i] != "sign"){
  315. strsign = strsign + '&'+ data[sort_data[i]]
  316. }
  317. }
  318. return strsign
  319. }