各位知友大家好!我是量潮科技创始人 @iGuo ,这篇文章和大家分享我们公司目前的一些技术进展和一些开源项目的规划。

在技术方面,我们目前还处在搭建平台的早期阶段;在架构完善以后,我会专门写一篇文章介绍量潮应用系统的设计思路和实现方案。在这个过程中,我们需要使用大量腾讯系( @腾讯 )的API和SDK,包括腾讯云( @腾讯云 @腾讯云技术社区 )、微信公众号( @微信 )、微信小程序、微信开放平台、微信支付( @微信支付 )、企业微信( @企业微信 @企业微信团队 )等等。我们遇到的最大困难是SDK不好用。这里不得不吐槽一下,腾讯系的API文档十分难读且返回值略微有些混乱,SDK十分难用且内部实现十分糟糕,还有很多API并没有官方SDK,我们的开发进度遇到了极大的阻碍,大部分时间都浪费在了和API、文档、源码做斗争中。

这里大概介绍一下腾讯系Python SDK的情况。

腾讯云:有官方SDK(Python - SDK 中心 - 腾讯云),但是腾讯云官网给的SDK使用样例的文档实在太难理解,使用的过程中主要还是需要去翻源码。深入研究源码以后,我们发现腾讯云SDK的源码实现十分糟糕,有很多多余的代码,接口也十分不友好。(PS:阿里云、支付宝的Python SDK情况基本差不多,源码甚至更加让人匪夷所思……)在启动非官方SDK的开发计划的时候我们会详细介绍。

微信系(微信公众号、微信小程序、微信开放平台、微信支付):没有SDK,其中微信公众号、微信支付、微信开放平台是比较早的产品,API文档十分混乱,重复信息很多,遗漏的要点很多,demo过少,等等,基本来说是不说人话的,只能意会。且测试环境十分糟糕,微信支付的沙箱环境等于不可用,且在社区没有看到成功使用的案例。(PS:隔壁支付宝的沙箱好用多了……)而且由于安全限制,微信系几乎很难在本地测试。(PS:企业微信和腾讯云是可以本地测试的。)

企业微信:没有官方SDK,API文档还算比较清楚。加密算法的文档有小问题,在后文中我会详细介绍一下。加密算法提供了所谓SDK,但是……我看了以后表示,这也能叫SDK?勉强可以算demo,而且不太能用,最后我参考了一些小的实现以后重新写了一遍算法……

为了把这些坑填上,我们在量潮应用系统里做了一层SDK二次封装,把外部API和SDK重新封装处理,并且统一了接口风格。因此我们积累了一些SDK代码,打算分步把SDK库开源出来。由于企业微信的文档最说人话,SDK生态比较空白,而且封装相对容易做,所以我们先从这边开始开源。

下面介绍一下封装思路。

企业微信有两大类接口,一类是主动接口,是向企业微信服务器发送请求并且返回;一类是被动接口,是企业微信服务器向开发者服务器发送的回调数据。

主动接口的逻辑比较简单,只有两步。第一步,开发者发送corpid和应用sercet,接收access_token,有效期三十分钟。第二步,开发者向具体接口发送access_token和请求数据,并且接收返回数据。以通讯录读取成员API(读取成员 - 企业微信API)为例:

# 定义

class ContactSDK(object):

def __init__(self, corpid, secret):

self.corpid = corpid

self.secret = secret

@property

def access_token(self):

return get_access_token(corpid, secret)

def get_user_info(self, data):

return get_user_info(self. access_token, data)

# 调用

sdk = ContactSDK(corpid, secret)

return_data = sdk.get_user_info()

由于企业微信的接口是比较有规律的,所以可以首先定义一个基本SDK,比如

class WeChatWorkSDK(object):

def __init__(self, corpid, secret):

self.corpid = corpid

self.secret = secret

self._api_root = 'xxx' # 顶层URL

@property

def access_token(self):

# 包含缓存和refresh逻辑

return get_access_token(corpid, secret)

def request_api(api, method, params, data):

import requests

params['access_token'] = self.access_token

return requests.request(method, self._api_root+api, params, data)

然后继承:

class ContactSDK(WeChatWorkSDK):

def __init__(self, corpid, secret):

super().__init__(corpid, secret)

self._api_root = self._api_root + 'ttt' # 下级URL

def get_user_info(self, params):

return self.request_api('ddd', 'GET', params)

这样会更加简单清晰。

回调SDK基本同理,复杂的点在于需要实现加密解密算法,这里就不贴源代码了。加密解密算法如下:加解密方案说明 - 企业微信API。文档里面有一处没有说清楚的小错误。在最后的示例中的第三步,伪代码如下:

content = rand_msg[16:] # 去掉前16随机字节

msg_len = str_to_uint(content[0:4]) # 取出4字节的msg_len

msg = content[4:msg_len+4] # 截取msg_len 长度的msg

receiveid = content[xml_len+4:] = "wx5823bf96d3bd56c7" # 剩余字节为receiveid

其中xm_len的解析略微有一些小的处理,我在Python demo中看到了处理方式,还没有来及详细确认具体的算法。文档对于怎么获得xml_len这个东西没有仔细说明,因此加密解密的文档不可以直接完全follow。

项目的地址在:https://github.com/quanttide/wechatwork-sdk-py​github.com

目前我们项目周期比较紧张,所以暂时只实现一些需要用到的接口,并且只在自己的开发环境中做初步的alpha测试,beta测试和接口的完善需要社区一起完成。感兴趣的同学可以私信 @iGuo 。初步覆盖完以后,会以Pypi包的形式发布,方便大家直接用pip下载使用,暂时还没有打包。

上文提到的其他SDK内部开发还没有完成,逻辑还没有完全梳理清楚,之后会单独写文章介绍和发布相关SDK的开发计划和项目地址。

欢迎大家联系和关注量潮科技!

python项目开发计划_开源项目 | 企业微信第三方Python SDK项目启动计划相关推荐

  1. python游戏开发引擎_师傅带徒弟学:Python视频课程之游戏开发引擎Cocos2d-Python

    本视频基于**Python 3.6版本 Python语言之所以受欢迎,很大的原因是有很多可以使用的库,Python社区也有很多游戏开发库,其中较为优秀有:Cocos2d.Pyglet和Pygame,还 ...

  2. python 深度 视差 计算_开源双目视觉BM算法-Matlab/Python/Javascript

    更新:应朋友要求,增加了一个Python版本的BM算法和Javascript版本 Python版本BM​github.com JAVASCRIPT版本BM​github.com 整理以前的代码,找到了 ...

  3. 软件项目开发流程以及人员职责 实行软件工程项目管理: ▲ 项目经理(负责人):项目经理(负责人)对整个项目负完全责任,是指导、控制、管理和规范某个软件和软/硬件系统建设的人,项目经理(负责人)是最终

    转载自csdn(danieldaniel19851023的专栏) 软件项目开发流程以及人员职责 实行软件工程项目管理: ▲ 项目经理(负责人):项目经理(负责人)对整个项目负完全责任,是指导.控制.管 ...

  4. 企业微信第三方应用开发--回调配置

    ** 企业微信第三方应用开发–回调配置 ** 前言:经过一段时间的研究,终于把相关配置成功实现.在这个过程中遇到各种坑,也查阅了不少的博客都未能解决问题,最后研究官方的java事例demo加已实现.下 ...

  5. 是什么软件_什么是企业微信软件

    随着移动互联网的发展,现在很多公司都是利用企业微信进行客户对接或者客户开发,所以管理微信是公司运行的重要内容.基于微信和企业微信提供的全新开放界面,许多企业已经意识到使用企业微信营销带来的优势.企业通 ...

  6. 企业微信第三方应用开发授权设置(PHP版)

    开发之前一定要搞明白,企业微信不是企业微信号,虽然有相似之处,但不尽相同!!! 企业微信第三方应用与企业微信自建应用也不相同,一定要区分! !! 本地测试完成,没问题了,直接提交上线,就OK啦!!! ...

  7. 【企业微信】企业微信开发整理(私有化部署企业微信 / 普通企业微信)

    使用工具类 https://gitee.com/binary/weixin-java-tools 1 pom引用 <!-- 企业微信工具集 https://mvnrepository.com/a ...

  8. 企业微信---第三方应用开发 笔记

    跳坑记录 要成为第三方供应商,先按开发文档步骤操作.服务商注册应用.也可以申请个企业微信帐号,然后成为服务商(可以做测试,但应用不能上线) 1,注册成功后,配置开发信息:通用开发参数 这里的CorpI ...

  9. 企业微信应用设置可信域名_怎么设置企业微信朋友圈功能?企业微信朋友圈功能有哪些限制?...

    文丨 @语鹦企服私域管家 原创,本文为<企业微信私域流量玩法>专栏第24篇 有小伙伴给小企留言说:企业微信朋友圈功能开放了,请问怎么设置企业微信朋友圈功能?企业微信朋友圈功能有哪些限制? ...

最新文章

  1. 【iOS】快速集成轮播控件
  2. 【干货分享】可能是东半球最全的.NET Core跨平台微服务学习资源
  3. ASA SSL ××× Anyconnect SBL(Start Before Logon)用于在外网登录域(上)
  4. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 16 章 从源代码安装_16.5. 安装后设置...
  5. redis nginx session tomcat
  6. atom对比 vscode_VS Code、ATOM这些开源文本编辑器的代码实现中有哪些奇技淫巧?...
  7. matlab改进 otsu法,otsu算法---matlab实现,和一种改进算法
  8. length()函数_掌握Kotlin中的标准库函数: run、with、let、also和apply(转)
  9. VideoView播放视频会引起其它音乐播放器暂停问题解决
  10. MATLAB 自带RS编码函数中 gf 数据转化为 double 数组的方法
  11. Ccharles 爬取微信公众号和小程序
  12. 【你离诺贝尔奖也就20米】记一次诺奖得主讲座聆听感受
  13. 笔记本计算机无线开关在哪里,笔记本电脑无线开关在哪怎么打开关闭
  14. 亚里士多德对于知识的分类
  15. Android手机红外开发—点击和长按事件
  16. 简易的学生社团管理(大二课设)
  17. 【CocosBuilder 开发系列之一】cocos2dx使用CocosBuilder(编辑器)完成基础骨骼动画
  18. 传智播客 微金所项目实战
  19. 学术会议 Rebuttal 模板资料留存
  20. BIO、NIO、AIO 有什么区别?

热门文章

  1. 怎样防止苹果系统更新_如何强制屏蔽苹果手机系统更新
  2. 编程思维可以有效简化问题
  3. iPhone 手机内存,
  4. android版本6是华为几,华为荣耀6手机系统是什么?荣耀6能升级安卓4.3吗?
  5. Linux实战教学笔记12-linux三剑客之sed命令精讲
  6. linux npm 要放到环境变量么?,node环境变量配置,npm环境变量配置
  7. java date当前时间_JAVA中获取当前系统时间
  8. 小学知识点~词语全覆盖专题
  9. 华为OD在线编程题准备
  10. LUA 编辑器 易语言版 源码