kaoqin-services
Version:
考勤系统服务库
1 lines • 3.26 kB
JavaScript
;const axios=require("axios"),BaseNotificationService=require("./base-notification"),{TimeUtils}=require("kaoqin-utils");class WeChatService extends BaseNotificationService{constructor(a){super(),this.configManager=a,this.accessToken=null,this.tokenExpireTime=0,this.axios=axios.create({headers:{"Content-Type":"application/json"},proxy:!1})}async getAccessToken(){if(this.accessToken&&Date.now()<this.tokenExpireTime)return this.accessToken;const a={grant_type:"client_credential",appid:this.configManager.get("WX_APP_ID"),secret:this.configManager.get("WX_APP_SECRET")},b=await this.axios.get("https://api.weixin.qq.com/cgi-bin/token",{params:a});if(!b.data.access_token)throw new Error("\u83B7\u53D6 access_token \u5931\u8D25");return this.accessToken=b.data.access_token,this.tokenExpireTime=Date.now()+1e3*b.data.expires_in,this.accessToken}async sendKaoqinTemplateMessage(a,b,c,d,e="https://www.201807.xyz"){try{const f=await this.getAccessToken(),g=await this.axios.post(`https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${f}`,{touser:this.configManager.get("WX_OPEN_ID"),template_id:this.configManager.get("WX_TEMPLATE_ID"),url:e,data:{title:{value:`${this.configManager.get("USERNAME")} ${a}`,color:"#173177"},message:{value:b,color:"#E15241"},shangban:{value:c,color:"#173177"},xiaban:{value:d,color:"#173177"}}});if(0!==g.data.errcode)throw new Error(`发送失败: ${g.data.errmsg}`);return console.log("\u6253\u5361\u6D88\u606F\u53D1\u9001\u6210\u529F:",{date:a,message:b,shangbanTime:c,xiabanTime:d,url:e}),g.data}catch(a){throw console.error("\u53D1\u9001\u5FAE\u4FE1\u6D88\u606F\u5931\u8D25:",a.message),a}}async sendTemplateMessage(a,b,c="https://www.201807.xyz"){try{const d=await this.getAccessToken(),e=await this.axios.post(`https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${d}`,{touser:this.configManager.get("WX_OPEN_ID"),template_id:"siruDL2iqu9eIRbgGTGlYXAqD-4jZVQw4ltvTktGsX4",url:c,data:{title:{value:`${this.configManager.get("USERNAME")} ${a}`,color:"#173177"},content:{value:b,color:"#173177"}}});if(0!==e.data.errcode)throw new Error(`发送失败: ${e.data.errmsg}`);return console.log("\u63D0\u9192\u6D88\u606F\u53D1\u9001\u6210\u529F:",{title:a,content:b.substring(0,100)+(100<b.length?"...":""),url:c}),e.data}catch(a){throw console.error("\u53D1\u9001\u5FAE\u4FE1\u6D88\u606F\u5931\u8D25:",a.message),a}}async sendNotification(a,b,c={}){return this.sendTemplateMessage(a,b,c.url)}async sendKaoqinNotification(a,b,c,d,e={}){return this.sendKaoqinTemplateMessage(a,b,c,d,e.url)}async sendDetailedRecords(a,b,c={}){if(!b||0===b.length)return null;let d=`${a}打卡记录详情:\n\n`;return b.forEach((a,b)=>{const c=a.dx_29_dxlxmc||"\u672A\u77E5\u7C7B\u578B",e=TimeUtils.formatTimestamp(a.dx_29_dksj)||"\u672A\u77E5\u65F6\u95F4",f=a.dx_29_dxztmc||"\u672A\u77E5\u72B6\u6001",g=a.dx_29_dkwz||"\u672A\u77E5\u4F4D\u7F6E";d+=`${b+1}. ${c}: ${e}\n`,d+=` 状态: ${f}\n`,d+=` 位置: ${g}\n\n`}),this.sendTemplateMessage("\u6253\u5361\u8BE6\u7EC6\u8BB0\u5F55",d,c.url)}async sendErrorNotification(a,b,c={}){return this.sendTemplateMessage(a,b,c.url)}async sendHolidayGreeting(a,b,c,d={}){return this.sendTemplateMessage(`${a} ${b}问候`,c,d.url)}}module.exports=WeChatService;