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自动化构建工具scons使用入门笔记
Mar 10 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
Apr 05 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
Python中分支语句与循环语句实例详解
Sep 13 Python
python移位运算的实现
Jul 15 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
Python如何使用argparse模块处理命令行参数
Dec 11 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
Jupyter 无法下载文件夹如何实现曲线救国
Apr 22 Python
python相对企业语言优势在哪
Jun 12 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
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
php+ajax+json 详解及实例代码
2016/12/12 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
js 三级关联菜单效果实例
2013/08/13 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
2015/04/06 Javascript
jquery使用经验小结
2015/05/20 Javascript
boostrapTable的refresh和refreshOptions区别浅析
2017/01/22 Javascript
微信小程序实战之登录页面制作(5)
2020/03/30 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
python实现简单文件读写函数
2021/02/25 Python
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
股份转让协议书
2014/04/12 职场文书
民事赔偿协议书
2014/11/02 职场文书
个人委托书范文
2015/01/28 职场文书
小学中队活动总结
2015/05/11 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
python turtle绘制多边形和跳跃和改变速度特效
2022/03/16 Python