cherbim 大佬有话说 :
大家新年快乐,大清早发个教程吧(待完善中!)
本帖最后由 cherbim 于 2021-2-11 09:22 编辑
反正也闲着没事,与其蹲在墙角晒太阳,不如代码撸起来(昨天撸的,今天发教程)
cf worker反代企业微信接口 (用get请求代替post请求)
GitHub地址(不建议看,纯代码没啥说明):https://github.com/w2r/cfworker_WeCom
简介:
正常的企业微信应用通知,需要构建发送文本json,获得token,然后构建post请求
通过cf反代简化流程,直接一个get请求解决所有步骤
通俗易懂点:正常企业微信应用发送信息,需要你访问网址https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=********&corpsecret=************,获得token和推送接口组成post url,然后构造发送文本(一个json),再去找一个在线post网站,填写参数发送post请求发送到微信,很麻烦,我把这些步骤全部打包,交给cf worker来做,步骤简化为,搭建好cf worker反代后, 用你的浏览器直接访问你的cf worker域名地址:https://******-sound-f816.qyu0615.workers.dev/123456 然后机器人就会发送123456到微信
具体流程图:
https://s3.ax1x.com/2021/02/10/ywsTUO.png
操作步骤:
第一步:获得企业id(corpid), AgentId和Secret(corpsecret),记得用你的微信关注那个微信插件二维码,然后微信才可以收到推送 (不会操作的看找个)https://github.com/w2r/hostloc2tg/blob/master/hostloc2wechat/README.md#%E4%BB%A5%E4%B8%8B%E4%BB%8B%E7%BB%8D%E7%9A%84%E6%98%AF%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E5%BA%94%E7%94%A8%E5%8F%AF%E4%BB%A5%E5%BE%AE%E4%BF%A1%E6%8E%A5%E4%BF%A1%E6%81%AF%E6%97%A0%E9%9C%80%E5%AE%89%E8%A3%85%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1)
第二步:登录cf, 创建新的worker,清空代码区域,然后修改以下代码*****内容,总共四处修改(自行寻找,都有中文说明),分别为企业id(corpid), AgentId和Secret(corpsecret),还有你的cf worker地址(记得包含结尾的/)
然后复制进去worker 代码区域,保存代码,访问你的cf worker地址+推送内容,形式类似于:https://******-sound-f816.qyu0615.workers.dev/推送内容
发送成功则会返回:{"errcode":0,"errmsg":"ok","invaliduser":"","invalidtag":"2"}
addEventListener(‘fetch’, event => {
event.respondWith(postWeChatUrl(event.request))
})
async function gatherResponse(response) {
const { headers } = response
const contentType = headers.get("content-type") || ""
if (contentType.includes("application/json")) {
return JSON.stringify(await response.json())
}
else if (contentType.includes("application/text")) {
return await response.text()
}
else if (contentType.includes("text/html")) {
return await response.text()
}
else {
return await response.text()
}
}
async function postWeChatUrl(request) {
// 获取token链接,自行修改企业id和秘钥
const url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=*************&corpsecret=***********"
const init = {
headers: {
"content-type": "application/json;charset=UTF-8",
},
}
// 发出get请求获得token
const response = await fetch(url, init)
const results = await gatherResponse(response)
var jsonObj = JSON.parse(results)
// 从cf workers截取发送内容,需要替换成自己的cf work地址
var text = decodeURI(request.url.replace("https://*******816.qyu0615.workers.dev/", ""))
var key = jsonObj["access_token"]
var wechat_work_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + key;
var template =
{
"touser": "",
"toparty": "1",
"totag": "2",
"msgtype": "text",
// 应用id
"agentid": ******,
"text": {
// 发送文本内容,网页版发送莫名奇妙出现的玩意,替换成空白
"content": text.replace("favicon.ico", "")
},
"safe": 0,
"enable_id_trans": 0,
"enable_duplicate_check": 0,
"duplicate_check_interval": 1800
}
const init2 = {
body: JSON.stringify(template),
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
},
}
// 发送post请求
const response1 = await fetch(wechat_work_url, init2)
returnresponse1
}
目前存在bug:
1. 不能推送#号,遇到#号后面内容就会丢失,企业微信的#作为标签,会默认链接到视频号,尝试过编码发送还是不行
2.有极低的概率推送打断的内容(可能又是一些特殊符号在搞事情)
以上问题暂时无法解决,js我是一点都不会(主学python的),这个还是我照着cf模板硬撸出来的(来个会js的大佬完善完善吧)
最后放一下效果吧:
任务栏效果:因为微信不支持html和markdown,内容会出现链接,但是点到插件里就支持了
https://s3.ax1x.com/2021/02/11/y0zJrd.png
微信插件效果:
https://s3.ax1x.com/2021/02/11/y0zUat.png
#号bug:上图手动发的123456#测试,点击导流到视频号,可能企业微信默认#为视频号标签(所以如果你的推送内容含有#,则#后面内容会”消失“),目前我是无法搞定,尝试多种方法都不行,等以后试试markdown语法,不用文本
https://s3.ax1x.com/2021/02/11/y0z7L9.png
zxxx 大佬有话说 :
技术贴,虽然看不懂,还是支持一下。祝新年快乐!
KuYeHQ 大佬有话说 :
啊哈,看不懂+2
百年建站老手 大佬有话说 :
技术贴,稳!
xJogger 大佬有话说 :
会Python的话,这种东西可以去Vercel上撸,也挺舒服的。
wifitry 大佬有话说 :
前排关注一波
honey 大佬有话说 :
技术帖啊 给大佬顶起来
kissmk3515 大佬有话说 :
用处是?
jqbaobao 大佬有话说 :
没有企业WX:lol
dforel 大佬有话说 :
支持支持,赞一个。