全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworksBGVM服务器IP归属甄别会员请立即修改密码
查看: 1844|回复: 16

[经验] CF版Server酱,by企业微信通道

  [复制链接]
发表于 2021-2-13 17:18:09 | 显示全部楼层 |阅读模式
本帖最后由 arron 于 2021-2-13 17:16 编辑

在Hostloc上看了mjj的帖子- MJJ专用server酱 企业微信通道PHP版(https://www.hostloc.com/thread-806295-1-1.html),感觉整一个自己的消息推送的服务也不错,不过对于喜欢折(白)腾(票)的我,还是希望使用cf的workers来做。

文章首发在我的博客上(盼望Ip+1):https://blog.arrontg.cf/article/000007/.html

注册企业微信
第一步呢要先注册企业微信,我们直接看server酱的教程,记下教程里的应用ID( agentid ),应用Secret( secret ),企业ID。
原贴大佬把教程复制到石墨了,server酱的还需要登录才能看:https://shimo.im/docs/38dpjtwWtRRVQ6Wy

在CF上创建workers
这里只提供了卡片消息一种,有需要的可以参考企业微信的api文档:https://work.weixin.qq.com/api/doc/90000/90135/90236

访问时带上参数就行啦,
简单点:http://xxx.workers.dev/?msg=xxx
复杂点:http://xxx.workers.dev/?title=xxx&description=xxx&url=xxx
其中
title : 消息title,默认“Server酱通知”
description : 消息内容,默认“通知内容”
url : 跳转地址,默认“URL”

workers的代码如下:

  1. //教程:https://shimo.im/docs/38dpjtwWtRRVQ6Wy/read
  2. const OPT = {
  3.   corpid : '',//企业id
  4.   agentid:'',//应用id
  5.   corpsecret:'', //应用secret

  6.   access_token:undefined
  7. }

  8. addEventListener('fetch', event => {
  9.   event.respondWith(handleRequest(event.request))
  10. })

  11. /**
  12. * Respond to the request
  13. * @param {Request} request
  14. */
  15. async function handleRequest(request) {
  16.   let url = new URL(request.url);
  17.   //消息title
  18.   let title = url.searchParams.get('title')||"Server酱通知";
  19.   //消息内容
  20.   let description = url.searchParams.get('description')||url.searchParams.get('msg')||"通知内容";
  21.   //跳转地址
  22.   let jumpUrl = url.searchParams.get('url')||"URL";

  23.   //获取access_token,写入OPT中
  24.   let msg = await getAccessToken();
  25.   if(msg.errcode){
  26.     return new Response(JSON.stringify(msg), {
  27.       status: 200,
  28.       headers:{
  29.         'content-type':'application/json; charset=UTF-8'
  30.       }
  31.     })
  32.   }

  33.   //发送消息
  34.   return await pushMsg(title, description, jumpUrl);
  35. }

  36. //获取access_token,写入OPT中
  37. async function getAccessToken(){
  38.   let result = await fetch("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+OPT.corpid+"&corpsecret="+OPT.corpsecret);
  39.   let json = await result.json();
  40.   console.log(json)
  41.   if(json.errcode==0){
  42.     OPT.access_token = json.access_token
  43.   }
  44.   return json
  45. }

  46. //发送消息
  47. async function pushMsg(title, description,url="URL",btntxt="更多"){
  48.   let body = {
  49.     /**
  50.      * 指定接收消息的成员,成员ID列表(多个接收者用‘|’分隔,最多支持1000个)。
  51.      * 特殊情况:指定为”@all”,则向该企业应用的全部成员发送
  52.      */
  53.     "touser" : "@all",//非必须,但touser、toparty、totag不能同时为空,后面不再强调。
  54.     /**
  55.      * 指定接收消息的部门,部门ID列表,多个接收者用‘|’分隔,最多支持100个。
  56.      * 当touser为”@all”时忽略本参数
  57.      */
  58.     //"toparty" : "PartyID1|PartyID2",//非必须
  59.     /**
  60.      * 指定接收消息的标签,标签ID列表,多个接收者用‘|’分隔,最多支持100个。
  61.      * 当touser为”@all”时忽略本参数
  62.      */
  63.     //"totag" : "TagID1 | TagID2",//非必须
  64.     "msgtype" : "textcard",//必须,消息类型,此时固定为:textcard
  65.     "agentid" : OPT.agentid,//企业应用的id,整型。企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值
  66.     "textcard" : {
  67.       "title" : title,//必须,标题,不超过128个字节,超过会自动截断(支持id转译)
  68.       "description" : description, //必须,消息内容,最长不超过2048个字节,超过将截断(支持id转译)
  69.       "url": url,//点击后跳转的链接。最长2048字节,请确保包含了协议头(http/https)
  70.       "btntxt":btntxt //非必须,按钮文字。 默认为“详情”, 不超过4个文字,超过自动截断。
  71.     },
  72.     "safe":0, //非必须, 表示是否是保密消息,0表示可对外分享,1表示不能分享且内容显示水印,默认为0
  73.     "enable_id_trans": 0,//非必须,表示是否开启id转译,0表示否,1表示是,默认0。仅第三方应用需要用到,企业自建应用可以忽略。
  74.     "enable_duplicate_check": 0,//非必须,表示是否开启重复消息检查,0表示否,1表示是,默认0
  75.     "duplicate_check_interval": 1800 //非必须,表示是否重复消息检查的时间间隔,默认1800s(3小时),最大不超过4小时
  76.   }

  77.   return fetch("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+OPT.access_token,{
  78.     method:'post',
  79.     body: JSON.stringify(body)
  80.   });
  81. }
复制代码
发表于 2021-2-13 17:31:11 来自手机 | 显示全部楼层
不错,感谢分享。可能某一天可以用上
发表于 2021-2-13 17:34:06 | 显示全部楼层
感谢老哥分享!一会试试
发表于 2021-2-13 17:36:09 | 显示全部楼层
第一步呢要先注册企业微信
发表于 2021-2-13 18:13:54 来自手机 | 显示全部楼层
感谢大佬,这东西拿来插在签到程序里很好用
发表于 2021-2-13 18:20:22 | 显示全部楼层
出门打野,路过插眼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2021-6-21 19:22 , Processed in 0.076174 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表