热门标签 | 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 来封装下。


推荐阅读
  • 本文全面解析了 gRPC 的基础知识与高级应用,从 helloworld.proto 文件入手,详细阐述了如何定义服务接口。例如,`Greeter` 服务中的 `SayHello` 方法,该方法在客户端和服务器端的消息交互中起到了关键作用。通过实例代码,读者可以深入了解 gRPC 的工作原理及其在实际项目中的应用。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文详细探讨了在ASP.NET环境中通过加密数据库连接字符串来提升数据安全性的方法。加密技术不仅能够有效防止敏感信息泄露,还能增强应用程序的整体安全性。文中介绍了多种加密手段及其实施步骤,帮助开发者在日常开发过程中更好地保护数据库连接信息,确保数据传输的安全可靠。 ... [详细]
  • MySQL数据库安装图文教程
    本文详细介绍了MySQL数据库的安装步骤。首先,用户需要打开已下载的MySQL安装文件,例如 `mysql-5.5.40-win32.msi`,并双击运行。接下来,在安装向导中选择安装类型,通常推荐选择“典型”安装选项,以确保大多数常用功能都能被正确安装。此外,文章还提供了详细的图文说明,帮助用户顺利完成整个安装过程,确保数据库系统能够稳定运行。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • 在拉斯维加斯举行的Interop 2011大会上,Bitcurrent的Alistair Croll发表了一场主题为“如何以云计算的视角进行思考”的演讲。该演讲深入探讨了传统IT思维与云计算思维之间的差异,并提出了在云计算环境下应具备的新思维方式。Croll强调了灵活性、可扩展性和成本效益等关键要素,以及如何通过这些要素来优化企业IT架构和运营。 ... [详细]
  • 本文详细介绍了在 React Native 开发过程中遇到的 'Could not connect to development server' 错误及其解决方法。该问题不仅影响开发效率,而且难以通过网络资源找到确切的解决方案。本文将提供详细的步骤,帮助开发者快速解决这一常见问题。 ... [详细]
  • 使用SQL命令创建数据库及其语句解析
    使用 `CREATE DATABASE` 命令可以创建一个新的数据库,并指定其名称。该 SQL 语句用于初始化数据库结构,执行后将生成一个新的数据库实例,用于存储相关的数据对象和表。在本例中,通过执行 `CREATE DATABASE 课程管理1`,系统将创建一个名为“课程管理1”的数据库,以便后续的数据管理和操作。 ... [详细]
  • 如何高效地安装并配置 PostgreSQL 数据库系统?本文将详细介绍从下载到安装、配置环境变量、初始化数据库、以及优化性能的全过程,帮助读者快速掌握 PostgreSQL 的核心操作与最佳实践。文章还涵盖了常见问题的解决方案,确保用户在部署过程中能够顺利解决遇到的各种挑战。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用
    深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用 ... [详细]
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社区 版权所有