qm_new_create_link.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. const fetch = require('node-fetch'); // Node.js 18以下版本需要安装 node-fetch
  2. const tools = require('../tools');
  3. const helper = require('../src/helper');
  4. const config = require('../etc/config.json')
  5. const crypto = require('crypto');
  6. const CMD = {}
  7. CMD.runTask = async function (data,main_info,PlatformInfo,call_back) {
  8. let timestamp = helper.getCurrentUnixTimestamp()
  9. let tg_link_config = JSON.parse(main_info.tg_link_config)
  10. let chongzhi_id = tg_link_config['chongzhi_id']
  11. let huichuan_id = tg_link_config['huichuan_id']
  12. let f_chongzhi_id = tg_link_config['f_chongzhi_id']
  13. let chongzhi_list = JSON.parse(PlatformInfo.chongzhi)
  14. let huichuan_list = JSON.parse(PlatformInfo.huichuan)
  15. let f_chongzhi_list = JSON.parse(PlatformInfo.f_chongzhi)
  16. let recharge_template_id = ""
  17. let f_recharge_template_id = ""
  18. let call_back_template_id = ""
  19. for (let index = 0; index < chongzhi_list.length; index++) {
  20. const cz_obj = chongzhi_list[index];
  21. if(cz_obj.id==chongzhi_id){
  22. recharge_template_id = cz_obj.value
  23. break
  24. }
  25. }
  26. for (let index = 0; index < huichuan_list.length; index++) {
  27. const hc_obj = huichuan_list[index];
  28. if(hc_obj.id==huichuan_id){
  29. call_back_template_id = hc_obj.value
  30. break
  31. }
  32. }
  33. for (let index = 0; index < f_chongzhi_list.length; index++) {
  34. const cz_obj = f_chongzhi_list[index];
  35. if(cz_obj.id==f_chongzhi_id){
  36. f_recharge_template_id = cz_obj.value
  37. break
  38. }
  39. }
  40. let param_list = main_info.qm_id.split(',')
  41. let target_id = param_list[0]
  42. let random_id = tools.generateCryptoNumericUUID(5)
  43. if(data.product_name.length>40){
  44. data.product_name = data.product_name.substring(0,39)
  45. }
  46. let postData = {
  47. admin_account_name:"zhuoyue",
  48. account_id:target_id,
  49. project:PlatformInfo.mini_program_platform_id==config.wx?8:6, // 6 抖音小程序 8 微信小程序
  50. appid:main_info.app_id,
  51. book_id:data.product_id,
  52. chapter_num:1,
  53. name:`${data.product_name}_${main_info.id}_${random_id}`,
  54. media_id: '1', //1 巨量 2 广点通 3 百度 4 微博 5 B站
  55. is_platform_postback:true,
  56. postback_rule_id: call_back_template_id, //# 回传规则 value
  57. // first_panel_id:recharge_template_id, //首充模板id
  58. recharge_panel_id:recharge_template_id
  59. // repeated_panel_id:f_recharge_template_id, //# 复充模板id
  60. }
  61. console.log("postData:",postData)
  62. try{
  63. let client = tools.getOneNewClinet()
  64. let uuid = tools.generateCryptoNumericUUID()
  65. // let params = `?access_key=${config.qimao_config.access_key}&random=${uuid}&timestamp=${timestamp}`
  66. // let url = `${config.qimao_config.new_create_link_host}${params}`
  67. // let sign = tools.generateQMSignature(url,config.qimao_config.access_key)
  68. const baseUrl =config.qimao_config.new_create_link_host;
  69. const params = {
  70. access_key: config.qimao_config.access_key,
  71. random: uuid,
  72. timestamp: timestamp
  73. };
  74. // 按参数名排序并拼接
  75. const sortedParams = Object.keys(params)
  76. .sort()
  77. .map(key => `${key}=${params[key]}`)
  78. .join('&');
  79. // 假设这是您的secret_key,请替换成实际的值
  80. const secretKey = config.qimao_config.secret_key; // 这里需要替换成您的实际secret_key
  81. // 计算签名
  82. const sign = crypto.createHash('md5')
  83. .update(sortedParams + secretKey)
  84. .digest('hex');
  85. // 构建最终URL
  86. const finalUrl = `${baseUrl}?${sortedParams}&sign=${sign}`;
  87. console.log("finalUrl:",finalUrl)
  88. let response = await client.post(finalUrl,postData)
  89. if(response.data.code!=0){
  90. throw response.data
  91. }
  92. let n_data = response.data.data
  93. console.log("生成连接:",n_data)
  94. let promotion_id = n_data.id
  95. let promotion_info = n_data.link
  96. let t_params = promotion_info.split('?')
  97. let start_page = t_params[0]
  98. let start_param = t_params[1]
  99. data.start_page = start_page
  100. data.start_param = start_param
  101. data.promotion_id = promotion_id
  102. await call_back(data,null)
  103. } catch (error) {
  104. await call_back(data,error)
  105. console.error('请求错误:', error);
  106. }
  107. }
  108. module.exports = CMD;