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 相关文章推荐
通过数据库向Django模型添加字段的示例
Jul 21 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
Jun 29 Python
windows下安装Python和pip终极图文教程
Mar 05 Python
python字典DICT类型合并详解
Aug 17 Python
Flask模拟实现CSRF攻击的方法
Jul 24 Python
python实现五子棋小程序
Jun 18 Python
django 中的聚合函数,分组函数,F 查询,Q查询
Jul 25 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 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自定义函数之递归删除文件及目录
2010/08/08 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
zend framework重定向方法小结
2016/05/28 PHP
PHP数据库表操作的封装类及用法实例详解
2016/07/12 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
JavaScript实现瀑布流图片效果
2017/06/30 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
python flask中静态文件的管理方法
2018/03/20 Python
python中嵌套函数的实操步骤
2019/02/27 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
中专毕业生自我鉴定范文
2013/11/09 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
投资意向书范本
2014/04/01 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python