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创建微信聊天机器人
Mar 31 Python
python自动化报告的输出用例详解
May 30 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
Python玩转Excel的读写改实例
Feb 22 Python
python实现爬取百度图片的方法示例
Jul 06 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
Sep 25 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
Dec 09 Python
python颜色随机生成器的实例代码
Jan 10 Python
如何用Django处理gzip数据流
Jan 29 Python
django学习之ajax post传参的2种格式实例
May 14 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 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python打印输出数组中全部元素
2018/03/13 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
树莓派实现移动拍照
2019/06/22 Python
django解决订单并发问题【推荐】
2019/07/31 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
采购主管岗位职责
2014/02/01 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
社区志愿者活动总结
2014/06/26 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
第一军规观后感
2015/06/12 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang