unicomRechargeDisc.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*
  2. 中国联通充值折扣券
  3. [Script]
  4. [MITM]
  5. */
  6. const scriptName = `中国联通充值折扣券`;
  7. const magicJS = MagicJS(scriptName, "INFO");
  8. const gUserAgent = `ChinaUnicom4.x/11.7 (com.chinaunicom.mobilebusiness; build:48; iOS 16.6.1) Alamofire/4.7.3 unicom{version:[email protected]}`;
  9. const gHost = `m.client.10010.com`;
  10. const gCommonHeaders = {
  11. 'Cookie': ``,
  12. 'Accept': `*`,
  13. 'Connection': `keep-alive`,
  14. 'Content-Type': `application/x-www-form-urlencoded`,
  15. 'Accept-Encoding': `gzip;q=1.0, compress;q=0.5`,
  16. 'Host': gHost,
  17. 'User-Agent': gUserAgent,
  18. 'X-Tingyun-Id': `4gA5HRiCw8g;c=2;r=1184031225;u=62ffa39b4f94b3f4742089def7690470bd24ba1846d5d369e5460f4f029537a331b0b70e1293dcfcd727cab6b63edf43::BD4E4C616020FB61`,
  19. 'Accept-Language': `zh-Hans-CN;q=1.0`,
  20. 'X-Tingyun': `c=A|uBuVhVARE0A`
  21. };
  22. const UnicomConstKey = {
  23. // 基础数据
  24. Cookie: 'UnicomActivityCookie',
  25. // 充值优惠折扣活动数据
  26. RechargeDiscData: 'UnicomRechargeDiscData',
  27. };
  28. let gRetBody;
  29. async function Main() {
  30. if (magicJS.isStrictRequest) {
  31. magicJS.checkRecordRequestBody();
  32. }
  33. if (magicJS.isRequest) {
  34. checkHandleRequest();
  35. } else {
  36. updateHeaders();
  37. await tryGrab();
  38. }
  39. magicJS.notification.msg('');
  40. if (gRetBody) {
  41. magicJS.done({
  42. body: JSON.stringify(gRetBody)
  43. });
  44. } else {
  45. magicJS.done();
  46. }
  47. }
  48. function checkHandleRequest() {
  49. }
  50. function setRechargeDiscReqData(id, paramStr) {
  51. let data = magicJS.data.read(UnicomConstKey.RechargeDiscData, null)
  52. let nowDateStr = magicJS.formatDate(nowDate, 'yyyy/MM/dd');
  53. if (!data || data.date != nowDateStr) {
  54. data = {
  55. date: nowDateStr,
  56. dict: {},
  57. }
  58. }
  59. data.dict = data.dict || {};
  60. data.dict[id] = paramStr;
  61. magicJS.data.write(UnicomConstKey.RechargeDiscData, data);
  62. }
  63. function deleteRechargeDiscReqData(id) {
  64. let data = magicJS.data.read(UnicomConstKey.RechargeDiscData, null)
  65. let nowDateStr = magicJS.formatDate(nowDate, 'yyyy/MM/dd');
  66. if (data && data.date == nowDateStr) {
  67. if (data.dict) {
  68. delete data.dict[id];
  69. magicJS.data.write(UnicomConstKey.RechargeDiscData, data);
  70. }
  71. }
  72. }
  73. function getRechargeDiscReqDataDict() {
  74. let data = magicJS.data.read(UnicomConstKey.RechargeDiscData, null)
  75. let nowDateStr = magicJS.formatDate(nowDate, 'yyyy/MM/dd');
  76. if (!data || data.date != nowDateStr) {
  77. return null;
  78. }
  79. return data.dict;
  80. }
  81. function updateHeaders() {
  82. gCommonHeaders[`Cookie`] = magicJS.data.read(UnicomConstKey.Cookie, '');
  83. }
  84. async function tryGrab() {
  85. let taskData = getRechargeDiscReqDataDict();
  86. let tipsText = ``;
  87. for (let i = 0; i < 5; i++) {
  88. for (let id in taskData) {
  89. let paramStr = taskData[id];
  90. let result = await grabDiscCoupon(id, paramStr);
  91. if (result) {
  92. switch (result.status) {
  93. case '0000':
  94. case '1004'://库存不足
  95. deleteRechargeDiscReqData(id);
  96. break;
  97. default:
  98. break;
  99. }
  100. tipsText += `优惠折扣券[${id}]${result.msg}\n`;
  101. }
  102. }
  103. }
  104. if (tipsText.length > 0) {
  105. magicJS.notification.appendNotifyInfo(`领取结果如下:\n${tipsText}`);
  106. }
  107. }
  108. async function grabDiscCoupon(id, paramStr) {
  109. let url = `https://m.client.10010.com/AppMonthly/appMonth/dddddddddd/${id}?p=${paramStr}`;
  110. let headers = { ...gCommonHeaders };
  111. let options = {
  112. url: url,
  113. headers: headers,
  114. body: ``,
  115. };
  116. let result = await magicJS.http.get(options).then(response => {
  117. try {
  118. let rspData = response.body;
  119. magicJS.logger.info(`rspData=${JSON.stringify(rspData)}`);
  120. return rspData;
  121. } catch (e) {
  122. magicJS.logger.error(e);
  123. }
  124. }).catch(err => {
  125. const msg = `请求抢充值折扣券异常\n${JSON.stringify(err)}`;
  126. magicJS.logger.error(msg);
  127. });
  128. return result;
  129. }