在按照上面文章实现微信通知twikoo新消息提醒时,因为我是利用Vercel部署的Twikoo,发现和教程有一些出入,特此写一下如何用Vercel 创建云函数。
本教程基于https://guole.fun/posts/626/
创建Vercel 云函数
之前创建企业微信的步骤跟上面文章走就行。在创建API云函数时候,首先找到你部署twikoo到Vercel 的文件夹(如果还没有clone到本地过就先clone一遍。)
进入应用文件夹。在此文件夹下 pipenv install requests
(如果还没下载过pipenv 的先下载pipenv)
进入/api
文件夹,创建一个名为python.py
的文件并贴入以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| from http.server import BaseHTTPRequestHandler import json import requests from urllib.parse import parse_qs
class handler(BaseHTTPRequestHandler):
def do_GET(self): def getTocken(id, secert, msg, agentId): url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + \ id + "&corpsecret=" + secert
r = requests.get(url) tocken_json = json.loads(r.text) sendText(tocken=tocken_json['access_token'], agentId=agentId, msg=msg)
def sendText(tocken, agentId, msg): sendUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + tocken data = json.dumps({ "safe": 0, "touser": "@all", "msgtype": "text", "agentid": agentId, "text": { "content": str(msg) } }) requests.post(sendUrl, data) try: params = parse_qs(self.path[12:]) apiid = params['id'][0] apisecert = params['secert'][0] apiagentId = params['agentId'][0] apimsg = params['msg'][0] except: apimsg = self.path else: getTocken(id=apiid, secert=apisecert, msg=apimsg, agentId=apiagentId)
self.send_response(200) self.send_header('Content-type', 'text/plain') self.end_headers() self.wfile.write(apimsg) return
|
此代码是修改于上篇文章的云函数代码,所以只改了必要改的地方,注释了不需要的地方。本来想用JS 重写一下但是想着能用就行。
push当前的更改之后,当Vercel完成部署后,你可以到
1
| https://< vercel_app_address>/api/python?id=<ww....>&secert=<secret...>&agentId=<agentId...>&msg=测试一下吧
|
测试你的访问路径是否有效 (在对应的位置填入你的信息)。
如果成功的话你的手机会接收到对应的推送(如果你的企业微信注册成功且所填信息正确)。
注意文件名命名必须是python.py
否则你可能需要更改 获取query parameters 部分的代码。
之后只需要回到上篇文章再做Twikoo配置并且关联到微信就大功告成!
有问题可以下面评论告诉我。Happy coding!