范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

小白Python脚本使用Python对接微信公众号测试号推送消息

  小白Python脚本:使用Python对接微信公众号测试号推送消息
  使用Python对接微信公众平台接口测试账号推送消息,比如将收集的数据或者一些消息及时推送给自己或者团队成员,本小白曾长时间运行类似脚本,将监测的异常情况及时发送给自己,提高了异常发现的及时性、提高工作效率。
  这是一个对于初学者可以尝试的一个小小的测试项目,具有一定的较易入手性与可玩性,比较容易上手。
  本文以使用微信公众平台接口测试帐号为例,直接使用微信公众号的用法是一样的,在生产环境中有一定的适用性,但是具体的实现逻辑需要根据实际需要进行编制。
  ‍ 一、 申请微信公众平台接口测试帐号
  链接: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
  点击"登录",在新打开的页面使用自己的微信进行扫一扫。
  ​
  在手机微信端确认登录后,电脑上的网页将会自动进入测试号管理界面,如下:
  ​
  ​
  appID与appsecret可记录一下,后续会用到。
  ​
  关于接口配置信息部分,可在服务器端配置完成后,再进行配置。 二、 服务器端配置
  对于服务器端,需有要公网可访问的服务器。由于一般的家用宽带的80、443等入端口被封禁等情况,难以直接使用家用宽带中的电脑作为服务器,当然可以通过使用一些公网服务器端口转发本地端口的方式;也可以申请云服务器,把服务端脚本部署在服务器上,也是比较方便的方式。像当前的阿里云、百度云、或者腾讯云的一些类似轻量服务器,对于新用户,一年几十元即可购得,成本较低,后续可使用的地方也比较多。亚马逊云的EC2对于一些配置的云服务器可以免费使用一年,但是需要校验绑定信用卡。
  我的服务器端环境:操作系统是采用的是Linux ,Ubuntu kylin 20.04发行版;Python为Python3.8。
  如果没有安装pip3的话,可以使用sudo apt install python3-pip安装。
  需要安装flask及sqlite,安装指令如下: sudo pip3 install flask sudo apt-get install sqlite3
  ‍
  以下是服务器端的python脚本wechatOfficialAccountsServer.py文件内容: #!/usr/bin/env python3 # -*- coding: UTF-8 -*- import os import hashlib import datetime import time import urllib3 import json import random import string from json import * import requests from flask import Flask, g, request, render_template ,redirect, url_for, escape, session, flash  app = Flask(__name__) app.secret_key = "A0Zr98j/3yX R~XHH!jmN]LWXXSXAE89"  import sqlite3 DATABASE = "OfficialAccounts.db"  def connect_db():     return sqlite3.connect(DATABASE)  @app.before_request def before_request():     g.db = connect_db()  @app.teardown_request def teardown_request(exception):     if hasattr(g, "db"):         g.db.close()     def fetchaccesstoken_APPID(APPID):     timenow = datetime.datetime.now()     c=g.db.cursor()     sql = "select  APPID,APPSECRET,accesstoken,updatetime  from OfficialAccounts where APPID="%s";"  %APPID     c.execute(sql)     row= c.fetchone()     appId=row[0]     secret=row[1]     accesstoken=row[2]     #time=row[3]     time=datetime.datetime.strptime(row[3],"%Y-%m-%d %H:%M:%S")     if (accesstoken is None) or ((timenow-time).total_seconds()>6000) :         url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + secret         r = requests.get(url)         tokeninfo = json.loads(r.text)         accesstokenstr=tokeninfo["access_token"]         sql_set_accesstoken="update OfficialAccounts set accesstoken="" + accesstokenstr +"",updatetime=dateTime("now","localtime") where appid="%s";"  %APPID         c.execute(sql_set_accesstoken)         g.db.commit()         accesstoken=accesstokenstr     return accesstoken   @app.route("/wechatMsgReceiver", methods=["GET", "POST"]) def wemsgre():     if request.method == "GET":         #verify wechat connect configuration.         id=request.args.get("id")         if id is not None:             signature=request.args.get("signature")             timestamp=request.args.get("timestamp")             nonce=request.args.get("nonce")             echostr=request.args.get("echostr")             c=g.db.cursor()             sql="select Token from OfficialAccounts where id=%d;"  %(int(id))             c.execute(sql)             row= c.fetchone()             token= row[0]             tmplist = [ token, timestamp, nonce ]             tmplist.sort()             tmpstr = "".join( tmplist )             hashstr = hashlib.sha1( tmpstr.encode() ).hexdigest()             if hashstr == signature:                 return echostr             else:                  return "Error" + echostr         else:             return "fault"     elif request.method == "POST":         return "SUCCESS"    #send text message. @app.route("/sendtxtmsg", methods=["GET", "POST"]) def sendtxtmsg():     if request.method == "POST":         #print(request.data)         receivedData=json.loads(request.data.decode())         #print(receivedData["appID"])         token=fetchaccesstoken_APPID(receivedData["appID"])         data=json.dumps(receivedData["messageContent"],ensure_ascii=False).encode("utf-8")         url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+token         r = requests.post(url,data)         response = json.loads(r.text)         return response    #send text message. @app.route("/", methods=["GET", "POST"]) def index():     return "Just a test!"     if __name__ == "__main__":     app.run(host="0.0.0.0")
  以上脚本的app.secret_key = "A0Zr98j/3yX R~XHH!jmN]LWXXSXAE89" 建议自己再修改一下,当然测试使用就无所谓了。
  上传wechatOfficialAccountsServer.py脚本到某一路径,以下操作在同路径中进行。
  创建数据库、建立表、插入数据。
  对于insert into OfficialAccounts (Id, Name, APPID, APPSECRET, Token) values ("", "", "", "", ""); 这条指令中的"", "", "", "", ""这几个参数,根据配置进行修改,这里的,是服务端系统中自己随便定义的参数,比如Id 为 1, Name为testAccounts, 而"", ""是来自于测试公众号中的参数,见上一步"申请微信公众平台接口测试帐号"中的参数,是自定义的,与"申请微信公众平台接口测试帐号"中设置一致即可。
  sqlite指令示例: sqlite3   OfficialAccounts.db    CREATE TABLE "OfficialAccounts" (   "Id" integer,    "Name" char,    "APPID" char,   "APPSECRET" char,    "Token" char,    "accesstoken" char,    "EncodingAESKey" char,    "updatetime" TIMESTAMP DEFAULT current_timestamp);  #exapmle : insert into OfficialAccounts (Id, Name, APPID, APPSECRET, Token) values ("", "", "", "", ""); insert into OfficialAccounts (Id, Name, APPID, APPSECRET, Token) values (2, "testAccount", "wx9276144e23c95xxx", "a320ddd3ae51c363b294086f031d0xxx", "testtoken"); .exit
  ‍
  运行脚本 wechatOfficialAccountsServer.py。
  以下为在开发测试环境中直接使用flask运行,如果长期使用或者在生产环境中可以配置使用apache、ngnix等。
  在脚本所在目录中执行: export FLASK_APP=wechatOfficialAccountsServer.py flask run --host 0.0.0.0 -p 8080
  ​
  ​
  端口根据实际使用定义,如80,8080等。
  如果遇到缺少某些库,自行安装即可。
  ‍ 三、 微信公众平台接口测试帐号的接口配置确认:
  返回第1步微信公众平台接口测试帐号配置页面,在如下"接口配置信息"部分进行配置。
  ​
  在"接口配置信息"部分,需要填写URL与Token,结合自己的服务器端资源情况进行填写,如我的填写为:
  URL: http://:8080/wechatMsgReceiver?id=2
  Token: testtoken
  以上示例中的代替实际IP,请按实际配置更改。
  在服务器端正常运行后,再进行此处的接口配置修改。一切正常的话,将会看到"配置成功"的提示。
  ‍ 四、推送文本消息测试:
  ​
  在测试号管理页面可以看到"测试号二维码",使用微信客户端扫描关注后,此页面可以看到用户,测试号最多可以100个用户关注。如下,所示:
  记录下用户微信号那一长串字符串,后面将会使用。
  本处使用的脚本sendMsgClient.py,在任意可以与服务器端正常通信的电脑上使用都可以,也可以直接放在服务器端。
  脚本中的Server、appID,根据实际配置进行修改,receiveUserList为接收者微信号列表,多个接收者使用逗号分隔。(接收者微信号标识是在微信公众号管理页面里看到的用户的那一长串用户标识。)
  sendMsgClient.py脚本内容如下: #!/usr/bin/env python3 import json import requests import datetime  ###修改此部分配置信息 Server="http://xx.xx.xx.xx:8080"  #根据实际配置修改服务端信息 appID="xxxxxxxx"  #修改为实际使用的appID receiveUserList=["yyyyyyyyyyyyyyyyyyyy"]  #接收消息用户列表   def send_wechat_msg(content):     for touser in receiveUserList:         data={                 "appID":appID,                 "messageContent":                     {                     "touser":touser,                     "msgtype":"text",                     "text":{                     "content": content}                     }                 }         data = json.dumps(data,ensure_ascii=False).encode("utf-8")         url = Server + "/sendtxtmsg"         r = requests.post(url,data)         result = json.loads(r.text)         print(result)   def main():     message="This is just a test message. 这是一条测试消息。"     send_wechat_msg(message)  if __name__ == "__main__":     main()
  message="This is just a test message. 这是一条测试消息。" 这部分是定义的发送的测试消息内容,发送内容可根据需要修改。
  执行发送消息脚本,运行如下:
  ​
  ​
  手机微信微收到消息,示例如下:
  ​
  ​
  ‍
  这里是使用微信公众号的客服消息接口进行的推送消息,会有一定的下发额度及有效期限制,如果由于用户长时间与测试号未交互造成不在客户消息下发规则内,可以使用手机微信端先给测试号发送一下消息,再进行推送消息测试。
  发送客服消息的额度与有效期如下:
  ​
  ​
  如果格式比较固定,也可以使用"模板消息(业务通知)"进行消息发送,在用户长时间没有与公众号交互的情况下也可以推送模板消息。相应的脚本、配置等,需要进行新的适配,相关可参考微信公众号体验接口权限表接口链接。
  ​
  ‍
  ‍
  以上是关于使用python对接微信公众号测试号推送消息的记录,也是学习途中一点小小的快乐,如果对于探索途中的初学者有所帮助,本人将深感幸甚。

心脏不好的人吃什么食物最好?心脏不好的人吃蜂王浆有用吗心脏的跳动是代表着生命的迹象,也是每一个生命表示存活的一个证明,如果某一天心脏停止了跳动,那就代表着一个生命的离去,为了让自己的生命可以更为长久的延续,保持一颗良好的心脏自然是必不女性题材剧开始温暖诗意作者师文静近日,聚焦一对姐妹成长的都市女性剧心想事成开播,以生活流治愈感的鲜明特征得到关注。今年以来多部女性剧开播,在叙事风格故事结构女性话题等方面都有延展和创新,女性题材剧可以像很多女性更年期时,容易被这5种疾病盯上,在了解后,要及时调理中年是一个人一生中的多事之秋。这个时候不仅身体的代谢率会降低,而且不良生活习惯对身体的影响也在逐渐显露出来。此时,身体的各个器官也会受到不同程度的损失,尤其是绝经后,女性体内的激素养护经络,活力无限!大家好,我是健康汪汪侠,我们来继续深入探讨与经络养生相关的内容!一经络养护的重要性经络养护,是让我们健康青春,活力无限的重要法宝。但是,很多人对经络养护还没有太多的了解,也不知道如清明将至,禁止焚烧纸扎为哪般?原话是自4月1日起,在全区范围内禁止焚烧纸扎等祭祀用品,笔者在标题上动了几个字,应该没有曲解原意。1hr按照此地发布的禁烧令,纸钱(冥币)纸轿纸车纸楼纸手机纸动物纸佣人等各类去世之清明将至!俗语闰月清明不上坟,上坟祸事将临门上坟咋办?清明将至,清明节是我们传统重要的节日之一,几千年的历史,老祖宗留下了许多讲究和习俗,比如祭拜祖先扫墓烧香上供品等等。今年清明节不一般,不仅是在周三,不能跟着周末连休,还赶上闰月!俗深度近800只公募基金变更基金经理,减负潮透露哪些信号?界面新闻记者杜萌界面新闻编辑宋烨珺与以往开年众多知名基金经理争相新发产品不同,今年开年基金经理流行减负。谢治宇冯明远王宗合邬传雁何广等在内的多位百亿基金经理纷纷官宣在管产品卸任或者苹果高管离职潮到来,库克带头降薪40,一年少赚2。36亿人民币?头条创作挑战赛3月财经新势力原创首发作者英财文章约2700字,阅读时长约为6分钟,阅读前麻烦点一下关注,便于您后期持续关注相关内容。今年,被誉为打工之王的苹果CEO库克带头要求降薪江西资溪农民纯收入六成来自面包产业成致富金饭碗图为3月14日,江西省政府新闻办举行第七届资溪面包文化节新闻发布会。朱莹摄中新网南昌3月14日电(朱莹)记者14日从江西省政府新闻办举行的第七届资溪面包文化节新闻发布会上了解到,面1000辆中国造新能源客车俏销乌兹别克斯坦中新网乌鲁木齐3月14日电(李明赵远李辉慧)14日,16辆中国制造的新能源客车在办理完海关查验手续后,由新疆霍尔果斯公路口岸出境,这是乌兹别克斯坦向中国企业采购的1000辆新能源客世界上最时髦的粮仓在西班牙,已有数十座旧时代的粮仓已经改造成或即将改造成酒店水疗中心剧院观景台攀岩公园艺术商店城市艺术家的乡村俱乐部甚至是停车场。旨在改变这种旧时代粮仓的项目数量逐年增加,其中大多数
联想到底是怎么了,现在被各种负面消息缠身?绝不仅仅是一个联想被质疑,亿万个联想的身世来历不明!貌似合法的盗窃也是贼的行径,怎么办,吐出来!归还人民!国有的,全民的,耶就不是你的!任何冠冕堂皇的借口都欺骗不了同胞们日渐觉醒的大二绩点比较差应该怎么办?欢迎来到老穆说语文问答领地,老穆将用最大的热忱和最好的回答来回馈您!老穆有话说我今年大二了,我平时真的有好好学,但大学水课太多,总是拉我绩点,好累啊!咋整?大学里到底有没有水课呢?生姜有假的吗?怎么分辨真假生姜?根据我从业多年的经验,对真假生姜从以下三个方面即可辨别1,闻味道真的生姜闻起来有一股天然的辛辣味,并具有一定的香气。不喜辣的宝宝可能闻起来有点辣眼睛哟!而假的用硫磺淹制过的则闻起来做了血脂检查,怎么看报告?你好,血脂检查是在体检和疾病筛时,都是常规则检查,好多患者看作血脂检查报告,疑问重重!其实,若是了解血脂检查报告的特点及相关意义,即怎么看血脂报告,不必过分担心的。血脂检查报告如图恒大集团承受不住了,购房者损失巨大,老板许家印应该负责吗?恒大集团是有限公司,不是无限公司,不是中字头公司,不是央企,更不是国企,倒闭了就倒闭了,只要还注册资金那部分钱就行了。在中国开公司,都要去工商注册,去税务法人登记,写明公司性质,经男足主教练李铁为什么辞职?现在辞职是不是在推卸责任?口诛笔伐,辞职是唯一的路人走茶凉,李铁依然很难脱身!说是推卸责任,就有些言不由衷了。热身赛8连胜,李铁成为国足主帅历史上最黑的黑马国足40强赛一波4连胜,让这匹黑马有点脱缰。国足世如何给婴幼儿刷牙?01岁自从第一颗乳牙萌出就要开始刷牙了(一般宝宝在47个月时就会长牙),即父母手指缠上湿润的纱布或用指套牙刷轻轻清洁牙面和按摩牙龈组织,只要父母觉得使用牙刷安全,选择一个软毛且适宜大男当婚中曹小强最后选择了谁?相信很多人都有看过徐峥主演的电视剧大男当婚,里面的情节相当逗人,笑中带泪。男主角曹小强在与这么多漂亮的女人纠缠过后,却没有和一个人有结果,每个人都是相恋后却又无奈分手。只有大结局最16岁我就得了冠心病,我该怎么办?今年大年初一,我值班,抢救了一位19岁的心肌梗死患者,和这位16岁的差不多大,当时我们很纠结,当时小伙子胸痛,心电图也提示急性心肌梗死,我们都不敢相信,但是没办法,证据充分,只能先中国足球的路在哪里?解足协,目前的国足,成立真正的民间足球联盟,用U17去代表国足出战(主抓思想教育)这是一块臭豆腐,别过于担心。乒乓球怎么成功就怎么干。静下心来,不要把足球当赚钱,当事业。回到过去,vivooppo为什么用安卓而不用华为的鸿蒙操作系统?虽然从各方面的测试来看鸿蒙系统的体验确实要优于安卓,但华为受美国制裁自己都前途未卜,作为竞争对手的OV怎么会用华为的系统呢?如果其他安卓厂商用了鸿蒙系统,一方面也有被美国制裁的风险