網(wǎng)站維護 代碼開封網(wǎng)站設計
現(xiàn)在創(chuàng)建應用想要使用需要設置企業(yè)可信IP,而配置企業(yè)可信IP需要先配置?設置可信域名?或?設置接收消息服務器URL,域名需要花錢而且配置麻煩,這里選擇?設置接收消息服務器URL。
不設置就報這個錯誤:
真麻煩呀!!!
{u'errcode': 60020, u'errmsg': u'not allow to access from your ip, hint: [1692000515331], from ip: xxx.xxx.xxx.xx, more info at https://open.work.weixin.qq.com/devtool/query?e=60020'}
這里其實是一個類似防火墻的功能,只要在里面配置可以訪問過來的 IP 就可以了
配置條件:
* 找一臺有公網(wǎng)的linux服務器 沒有可以選擇內(nèi)網(wǎng)穿透軟件? 都沒有我也沒辦法
* 安裝python3? 百度一下?
創(chuàng)建自定義應用
登錄網(wǎng)頁版 >應用管理>創(chuàng)建應用>進入應用>最下面有個企業(yè)可信IP>選擇設置接收消息服務器URL
?
腳本里的這段代碼配置一下
點擊一下這里獲取個隨機值Token 和 EncodingAESKey 粘貼進去就行了,注意: 不要關(guān)閉網(wǎng)頁一會還要用。
?企業(yè)信息的ID在我的企業(yè)可以找到
這里提示下:下面改 2.py 文件時,改的時候只要改下面文件里的這個部分就好了
qy_api = [WXBizMsgCrypt("XXXXXXX", "XXXXXXX", "XXXXXXX"),
] #對應接受消息回調(diào)模式中的token,EncodingAESKey 和 企業(yè)信息中的企業(yè)id
引入WXBizMsgCrypt模塊步驟?
將這個文件放在和腳本同一個目錄即可
# 下載項目
wget https://github.com/sbzhu/weworkapi_python/archive/refs/heads/master.zip# 解壓
unzip master.zip# 改名
mv weworkapi_python-master weworkapi_python
??:引入模塊上面這里切記要修改模塊名為?weworkapi_python ,否則無法使用
隨便起個名vim到一個文件即可 我這里叫2.py? ?這里改的時候只要改上面框出的企業(yè)的信息即可
[root@apphost dba]# cat 2.py
#-*- encoding:utf-8 -*-
from flask import abort, request
from flask import Flask
from xml.dom.minidom import parseString
import _thread
import time
import os
import sys
sys.path.append("weworkapi_python/callback") # 正確的模塊導入路徑
from WXBizMsgCrypt3 import WXBizMsgCrypt # https://github.com/sbzhu/weworkapi_python 項目地址
app = Flask(__name__)# 對應步驟4中接受消息回調(diào)模式中的URL,如域名是'www.example.com' 那么在步驟4中填入的url就為"http://www.example.com/hook_path"
@app.route('/hook_path', methods=['GET','POST'])
def douban():if request.method == 'GET':echo_str = signature(request, 0)return(echo_str)elif request.method == 'POST':echo_str = signature2(request, 0)return(echo_str)qy_api = [WXBizMsgCrypt("XXXXXXX", "XXXXXXX", "XXXXXXX"),
] #對應接受消息回調(diào)模式中的token,EncodingAESKey 和 企業(yè)信息中的企業(yè)id # 只改這里即可# 開啟消息接受模式時驗證接口連通性
def signature(request, i): msg_signature = request.args.get('msg_signature', '')timestamp = request.args.get('timestamp', '')nonce = request.args.get('nonce', '')echo_str = request.args.get('echostr', '')ret,sEchoStr=qy_api[i].VerifyURL(msg_signature, timestamp,nonce,echo_str)if (ret != 0):print("ERR: VerifyURL ret: " + str(ret))return("failed")else:return(sEchoStr)# 實際接受消息
def signature2(request, i):msg_signature = request.args.get('msg_signature', '')timestamp = request.args.get('timestamp', '')nonce = request.args.get('nonce', '')data = request.data.decode('utf-8')ret,sMsg=qy_api[i].DecryptMsg(data,msg_signature, timestamp,nonce)if (ret != 0):print("ERR: DecryptMsg ret: " + str(ret))return("failed")else:with open ("/var/log/qywx.log", 'a+') as f: # 消息接收日志doc = parseString(sMsg)collection = doc.documentElementname_xml = collection.getElementsByTagName("FromUserName")msg_xml = collection.getElementsByTagName("Content")type_xml = collection.getElementsByTagName("MsgType")pic_xml = collection.getElementsByTagName("PicUrl")msg = ""name = ""msg_type = type_xml[0].childNodes[0].dataif msg_type == "text": #文本消息name = name_xml[0].childNodes[0].data #發(fā)送者idmsg = msg_xml[0].childNodes[0].data #發(fā)送的消息內(nèi)容f.write(time.strftime('[%Y-%m-%d %H:%M:%S]') + "[ch%d] %s:%s\n" % (i, name, msg))_thread.start_new_thread(os.system, ("python3 command.py '%s' '%s' '%d' '%d'" % (name, msg, i, 0), )) #此處將消息進行外部業(yè)務處理elif msg_type == "image": #圖片消息name = name_xml[0].childNodes[0].datapic_url = pic_xml[0].childNodes[0].dataf.write(time.strftime('[%Y-%m-%d %H:%M:%S]') + "[ch%d] %s:圖片消息\n" % (i, name))_thread.start_new_thread(os.system, ("python3 command.py '%s' '%s' '%d' '%d'" % (name, pic_url, i, 1), )) #此處將消息進行外部業(yè)務處理f.close()return("ok")if __name__=='__main__':app.run("0.0.0.0", 888) #本地監(jiān)聽端口,可自定義
運行項目
python3 2.py
這里運行的時候可能會缺少模塊,缺少什么模塊會提示使用下面的命令安裝即可,安裝不上百度直接貼百度,有些包名不一樣
pip3 install 模塊名
這樣就運行起來了
運行時注意引入的庫是否引入正確
腳本里的端口注意不要和現(xiàn)有的端口沖突了
防火墻或云主機網(wǎng)絡限制是否開放了888端口
解決以上問題后訪問你的url即可
# 路徑要寫上
http://你的IP地址:888/hook_path
這樣就說明好了
然后在API接收消息的網(wǎng)頁上輸入這個路徑點擊保存即可成功
注意:
確保網(wǎng)頁上的Token 和?EncodingAESKey 和腳本里的一致
即:上面提示不要關(guān)的網(wǎng)頁
點擊保存成功后就可以寫進去 IP 了
這樣就可以寫可信IP了 鐵汁
把你的IP寫進去就不報錯了
用完把腳本關(guān)了就行,鐵汁們,點個贊咋樣