python获取微信小程序手机号并绑定遇到的坑


Posted in Python onNovember 19, 2018

最近在做小程序开发,在其中也遇到了很多的坑,获取小程序的手机号并绑定就遇到了一个很傻的坑。

流程介绍

python获取微信小程序手机号并绑定遇到的坑

官方流程图

python获取微信小程序手机号并绑定遇到的坑

小程序使用方法

需要将 <button> 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> </button>

返回参数说明

参数 类型 说明
encryptedData String 包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法
iv String 加密算法的初始向量,详细见加密数据解密算法

接受到这些参数以后小程序把code,encryptedData,iv发给后台,然后后台解密

后台解密

在解密以前需要session_key进行配合解密,所以首先通过code获取session_key

# 获取openid,session_key
 # Appid为小程序id
  openid_url = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code" % (
    APP_ID, APP_KEY, code
  )
  req = requests.get(openid_url)
  rep = req.json()
  session_key = rep.get("session_key")

在得到session_key,encryptedData,iv以后就可以进行解密了,python2实现代码如下:

import base64
 import json
 from Crypto.Cipher import AES
 class WXBizDataCrypt:
   def __init__(self, appId, sessionKey):
     self.appId = appId
     self.sessionKey = sessionKey
   def decrypt(self, encryptedData, iv):
     # base64 decode
     sessionKey = base64.b64decode(self.sessionKey)
     encryptedData = base64.b64decode(encryptedData)
     iv = base64.b64decode(iv)
     cipher = AES.new(sessionKey, AES.MODE_CBC, iv)
     decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)))
     if decrypted['watermark']['appid'] != self.appId:
       raise Exception('Invalid Buffer')
     return decrypted
   def _unpad(self, s):
     return s[:-ord(s[len(s)-1:])]

调用传参

# APP_ID为小程序id不是openid!!!
pc = wx_jm(APP_ID, session_key)
res = pc.decrypt(encryptedData, iv)

参数详情参照微信官方文档https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html

微信官方提供了多种编程语言的示例代码点击下载

返回数据格式

{
  "phoneNumber": "13580006666", 
  "purePhoneNumber": "13580006666", 
  "countryCode": "86",
  "watermark":
  {
    "appid":"APPID",
    "timestamp":TIMESTAMP
  }
}

总结

以上所述是小编给大家介绍的python获取微信小程序手机号并绑定遇到的坑,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
python 网络编程常用代码段
Aug 28 Python
Python实现的维尼吉亚密码算法示例
Apr 12 Python
对python程序内存泄漏调试的记录
Jun 11 Python
Python实现端口检测的方法
Jul 24 Python
python中cPickle类使用方法详解
Aug 27 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
Jul 24 Python
Python中私有属性的定义方式
Mar 05 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 Python
opencv实现图像几何变换
Mar 24 Python
python Polars库的使用简介
Apr 21 Python
python实现推箱子游戏
Mar 25 #Python
详解python中的Turtle函数库
Nov 19 #Python
python绘制简单彩虹图
Nov 19 #Python
python微信好友数据分析详解
Nov 19 #Python
python生成九宫格图片
Nov 19 #Python
python实现简易动态时钟
Nov 19 #Python
python使用Turtle库绘制动态钟表
Nov 19 #Python
You might like
PHP控制网页过期时间的代码
2008/09/28 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
php实现的简单检验登陆类
2015/06/18 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
js判断浏览器的比较全的代码
2007/02/13 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
Node.js实现数据推送
2016/04/14 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
Angular2实现组件交互的方法分析
2017/12/19 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
layer更改皮肤的实现方法
2019/09/11 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
在Python中关于中文编码问题的处理建议
2015/04/08 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
python中的set实现不重复的排序原理
2018/01/24 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
Django 路由控制的实现
2019/07/17 Python
Python随机数函数代码实例解析
2020/02/09 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
新教师个人总结
2015/02/06 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
入党积极分子考察意见
2015/06/02 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
MySQL数据库简介与基本操作
2022/05/30 MySQL