热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

grpc对微信小程序token进行分发

最近开发一个小程序,有一些功能需要用到微信的token比如分享海报,发送模板消息等。官方建议:建议开发者使用中控服务器统一获取和刷新access_token,其他业务逻辑服务器所

最近开发一个小程序,有一些功能需要用到微信的token 比如分享海报,发送模板消息等。
官方建议:


建议开发者使用中控服务器统一获取和刷新 access_token,其他业务逻辑服务器所使用的 access_token 均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致 access_token 覆盖而影响业务;


在这里插入图片描述
因为之前 一直用 nameko开发rpc ,所以这次准备尝试点新的东西。
准备工作

pip install grpcio==1.19.0
pip install grpcio-tools==1.19.0
pip install protobuf==3.12.2

环境已经搭建好了,创建 .proto 结尾的文件。
.proto 文件主要用来 定义接口和数据类型,我定义的 名字叫 grpcdatabase.proto


syntax = “proto3”; //proto3语法
package grpcServer;
service Greeter {
rpc GetContent (Request) returns (Return) {} //定义要调用的函数(GetContent)+(Request)接受的
}
message Request { //传参数据类型
string appid = 1;// 字符串 微信小程序的、appid
string secret =2; // 字符串 微信小程序的、secret
}
message Return { //返回数据类型
string message = 1;//字符串
int32 code=2; // int 类型
string results = 4;//
}


客户端调用传参 就是2个 appid 和 secret
服务端 返回 值 是三个 message code results

接下来生成客户端 服务端的代码

python -m grpc_tools.protoc -I. --python_out=./ --grpc_python_out=./ grpcdatabase.proto
// 在当前目录下生成 服务端和客户端代码 运行后如图

在这里插入图片描述
编辑客户端 与 服务段的业务代码

# -*- coding: utf-8 -*-
# @author: tianya
# Servers.py
import sys
import requestssys.path.append('grpc_base_models')
import grpc
import time
from concurrent import futures
import grpcdatabase_pb2
import grpcdatabase_pb2_grpc
import redis
import jsonr_cache = redis.StrictRedis(host='127.0.0.1', port=6379, db=6)# from grpc_base_models import grpcdatabase_pb2
# from grpc_base_models import grpcdatabase_pb2_grpc_SLEEP_TIME = 60
_HOST = "0.0.0.0"
_PORT = "19999"class RpcServer(grpcdatabase_pb2_grpc.GreeterServicer):def GetContent(self, request, context):''':param request::param context::return:'''appid = request.appidsecret=request.secret# print(appid)# print(r_cache)token_tmpl = r_cache.get("access_token")# print(token_tmpl,1111111111)if not token_tmpl:result = requests.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}".format(appid, secret)).json()token = result.get('access_token') # 获取tokenexpires_in_seconds = int(result.get('expires_in') * 0.9) # 获取token的过期时间r_cache.set(name="access_token",value=token,ex=expires_in_seconds # 第三个参数表示Redis过期时间)else:token = token_tmpl.decode("utf8")print(token)_content = "success"code = 200results = tokenreturn grpcdatabase_pb2.Return(message=_content, results=results, code=code)def server():print(sys.argv.__len__())if sys.argv.__len__() >= 2:_PORT = sys.argv[1]else:_PORT = "19999"grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=10))grpcdatabase_pb2_grpc.add_GreeterServicer_to_server(RpcServer(), grpcServer)grpcServer.add_insecure_port("{0}:{1}".format(_HOST, _PORT))grpcServer.start()# grpcServer.wait_for_termination()try:while True:time.sleep(_SLEEP_TIME)except KeyboardInterrupt:grpcServer.stop(0)if __name__ == '__main__':server()

客户端代码

在这里插入图片描述
这样就简单的实现了我们的功能,后期会优化。添加新功能,准备把项目中的定时任务也用grpc 来封装下。


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
author-avatar
uigrdg更好_154
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有