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基于Tkinter库实现简单文本编辑器实例
May 05 Python
Python写入数据到MP3文件中的方法
Jul 10 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
python做反被爬保护的方法
Jul 01 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
Aug 06 Python
python3连接kafka模块pykafka生产者简单封装代码
Dec 23 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 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读取PDF内容配合Xpdf的使用
2012/11/24 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
初识Node.js
2015/03/20 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
Vue-Router的使用方法
2018/09/05 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
python中私有函数调用方法解密
2016/04/29 Python
Python面向对象特殊成员
2017/04/24 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
python实现一个简单的ping工具方法
2019/01/31 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
创新比赛获奖感言
2014/02/13 职场文书
志愿者服务感言
2014/02/27 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
教师个人考察材料
2014/12/16 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS