本文简单说下微信登录以及获取并解密比如手机号这样的数据。

微信登录

首先自行阅读小程序开发文档,构造请求。基本上前端给个jscode,后台就能向微信服务器发请求了,大概是这样:

url = "https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code".format(

self.appid, self.secret, jscode)

rc = requests.get(url)

result = rc.json()

errcode = result.get('errcode')

if errcode and errcode != 0:

self.logger.error('微信登录错误: %s' % traceback.format_exc())

openid = result['openid']

session_key = result['session_key']

假设我们有个内置的用户表。那么因为openid与微信号是唯一的,可以用来入库,与用户表绑定(第一次当然得提供用户名密码),下次就直接用openid到用户库里查一下,有的话就免登,构造一个含有有效期的token返回给前端。

前端可以把这个token本地化存储,如果没过期就直接用。如果过期了,就拿openid重新比对。

session_key也入库,用于解密。

获取并解密数据

image.png

下载里面有示例代码,还挺方便的。里面提到了一个数据签名校验,比如获取用户手机号,用户授权后,前端会返回两个字段encryptedData和iv。

根据用户id从库里拿出sessionKey,一起解密下:

def unpad(s):

return s[:-ord(s[len(s)-1:])]

# base64 decode

sessionKey = base64.b64decode(sessionKey)

encryptedData = base64.b64decode(encryptedData)

iv = base64.b64decode(iv)

cipher = AES.new(sessionKey, AES.MODE_CBC, iv)

decrypted = json.loads(unpad(cipher.decrypt(encryptedData)))

decrypted就是最终的数据,有手机号什么的。当然还可以加个判断,如果decrypted['watermark']['appid'] != self.appid,那么水印不对。

说的坑主要是库,要导入:

from Crypto.Cipher import AES

这个库不是自带的,需要安装,比较坑的是,一般人都会这么安装:pip install Crypto或者pip install crypto,都不对,或者都不够,需要安装这个:

pip install pycrypto

本文建议先安装pycrypto,然后去安装目录看看,如果是这样:

image.png

且crypto目录下有Cipher目录,那就接近成功了。接下来还需要把crypto目录改成Crypto,就大功告成!

至于安装目录,Windows在C:\Users\你的用户名\AppData\Local\Continuum\anaconda3\envs\你得环境名\Lib\site-packages,Mac在/Users/你的用户名/anaconda3/envs/你的环境名/lib/python3.7/site-packages,自己试试找找。

其实还没完,在Windows下安装pycrypto也有坑。会各种编译不过去,报错:

image.png

然后就去微软找,后来找了这个下载链接,http://go.microsoft.com/fwlink/?LinkId=691126,下载,默认,安装时还挺慢的,十几分钟,安装完成后,继续安装pycrypto,又报错,

image.png

网上有一些解决方法,但是路径跟这个版本对不上,后来采纳了这种方法,安装前先set一个变量:

set CL=/FI"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\include\\stdint.h"

这里的路径请自行确认,确认文件在。

然后再pip install pycrypto,终于成功了!记得去安装目录改下目录名。

参考

微信小程序后端用python_Python开发微信小程序后端开发小坑相关推荐

  1. 微信小程序开发-微信支付功能【WxMaService 获取openid,WxPayService建微信订单,接收微信支付异步通知回调方法,附有完整前后端代码】

    前提:对小程序开发有一定的基础:小程序已发布使用,已开通微信支付,关联商户号. 微信小程序平台:小程序平台 微信开发者文档:开发者文档 微信小程序支付API 地址:微信支付文档地址 微信支付平台:微信 ...

  2. 用 Django 开发微信小程序后端实现用户登录

    本文将介绍采用 Django 开发微信小程序后端,通过将用户模块进行重构,并采用JWT来进行用户认证,来解决以下问题: 微信小程序不支持 Cookie,因此不能采用 Django 默认的 Sessio ...

  3. 关于开发微信小程序后端linux使用xampp配置https

    关于开发微信小程序后端linux使用xampp配置https 背景 由于最近开发微信小程序,前后端交互需要使用https协议,故需要配置https服务 服务器环境 服务器系统 ubuntu 环境 xa ...

  4. 如何开发微信小程序(全解过程包括前端、后端)

    微信小程序开发基础知识: (1)手机的屏幕宽度的最大为750rpx(数据与rpx连写): (2)ctrl+s 保存即可运行新写的代码: (3)新建项目的过程: 1. 创建时不要选择云开发: 2. 生成 ...

  5. Django之开发微信小程序后端-微信小程序篇①

    开始上班~~~ 文章目录 第1章.课程介绍 三类技术要点 小程序技术要点 Django技术要点 服务端技术要点 第2章 小程序开发入门 2-2 小程序开发的准备工作 小程序开发规范 2-3 项目工程的 ...

  6. python开发微信小程序-微信小程序开发:python+sanic 实现小程序登录注册

    开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + sanic + 微信小程序实现用户快速注册登录全栈方案. 微信小程 ...

  7. python开发微信小程序-Python 开发者的微信小程序开发实践

    导读 在知乎上,有人提问"如何使用 Python 开发微信小程序". 其实微信小程序作为一个前端的机制,Python 并不能插上边.只不过可以作为后端接口为微信小程序提供数据服务而 ...

  8. 使用牛刀云开发微信小程序(问题集锦)

    前不久,起步科技正式推出牛刀云1.0,我想这也应该是许多WeX5的忠诚追随者(我也算是其中之一吧)期望的结果了.使用牛刀云开发微信小程序,能够实现使用类似于WeX5的所见即所得组件积木搭建方式构建前端 ...

  9. Mpvue+koa开发微信小程序——腾讯云开发环境的搭建及部署实现真机测试

    为什么写这篇文章? 之前写过一篇文章:微信小程序开发错误:LoginError {type: "ERR_WX_GET_USER_INFO"}解决方法 有的伙伴在这篇文章中评论为什么 ...

  10. 小程序和vue语法对比_React语法开发微信小程序 Demo

    前言 从16年微信小程序内测的时候至今,微信小程序用实践证明了自己的创新和价值,微信小程序的规则也在社区的影响下变得更加完善. 但是不得不说,用惯了VSCode,官方的开发工具确实不怎么好用.之前没有 ...

最新文章

  1. winform能连MySQL吗_c# winform中怎么连接mysql
  2. 【离散数学中的数据结构与算法】六 排列与组合二
  3. 我心目中的Asp.net核心对象
  4. 基础算法:与、或、异或运算
  5. html table 显示最后一条,漂亮CSS表格(Table),最后一行是汇总行【实例】
  6. java工具类(六)根据经纬度计算距离
  7. 禁用电子邮件服务器,启用或禁用对邮箱中的邮箱的 POP3 或 IMAP4 Exchange Server
  8. 智能管家---1.项目搭建
  9. Django之DRF自定义action
  10. 史上最全的Java进阶书籍推荐
  11. 视频播放库Vitamio的使用以及功能扩展
  12. Linux报错:tar: Error Is Not Recoverable: Exiting Now
  13. 周边pd是什么意思_饭圈说的pd意思 饭圈pb是什么意思的缩写
  14. Scratch模拟题(二级)_1
  15. mysql 聚簇索引 和聚簇索引 (二级索引)的 那些事
  16. 02-leveldb入门
  17. 利用SPSS可视化分箱轻松给数据进行等分分组
  18. ChemOffice Suite 2018 18.1.2.18
  19. 敞开心扉,来聊聊跨域方式吧!
  20. Job for network.service failed because the control process exited with error code. 的解决办法

热门文章

  1. python rtf读取_如何使用Python读取RTF文件,python,格式,的
  2. 网站性能并发测试工具
  3. 微信公众号与服务器ip,微信公众号服务器IP网段与实际IP不一致?无法通过微信公众号推送消息到自己的服务器...
  4. 【机器视觉】线阵相机模型说明以及使用HALCON标定助手对线阵相机进行标定
  5. 74ls系列中文资料功能介绍
  6. ceshi wenz
  7. 火星坐标-84坐标-百度地图坐标相互转换
  8. 线性链表 — 单链表
  9. 耦合矩阵 matlab,耦合矩阵变换(化简)的问题
  10. php银联支付接口 demo,php版银联支付接口开发简明教程