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的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
python3.6编写的单元测试示例
Aug 17 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
Python如何给函数库增加日志功能
Aug 04 Python
anaconda升级sklearn版本的实现方法
Feb 22 Python
Python之matplotlib绘制折线图
Apr 13 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实现mysql数据库操作类分享
2014/02/14 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
2014/05/04 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
php源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
深入理解Django-Signals信号量
2019/02/19 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
新媒传信软件测试面试题
2013/02/24 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
软件工程毕业生自荐信
2014/07/04 职场文书
大专毕业生求职信
2014/07/05 职场文书
经理助理岗位职责
2015/02/02 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL