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实现的爬取网易动态评论操作示例
Jun 06 Python
python实现给微信指定好友定时发送消息
Apr 29 Python
python实现文件的备份流程详解
Jun 18 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
Python 导入文件过程图解
Oct 15 Python
Python Flask上下文管理机制实例解析
Mar 16 Python
django修改models重建数据库的操作
Mar 31 Python
python图片指定区域替换img.paste函数的使用
Apr 09 Python
python针对Oracle常见查询操作实例分析
Apr 30 Python
什么是Python中的顺序表
Jun 02 Python
pytorch 中forward 的用法与解释说明
Feb 26 Python
Python如何让字典保持有序排列
Apr 29 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脚本数据库功能详解(中)
2006/10/09 PHP
一个捕获函数输出的函数
2007/02/14 PHP
PHP 批量删除数据的方法分析
2009/10/30 PHP
php对大文件进行读取操作的实现代码
2013/01/23 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
JavaScript学习笔记之数组求和方法
2016/03/23 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
angular动态表单制作
2018/02/23 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
Python操作SQLite简明教程
2014/07/10 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
信息工程学院毕业生推荐信
2013/11/05 职场文书
节约用水的口号
2014/06/20 职场文书
三八节活动主持词
2015/07/04 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
MySQL学习之基础命令实操总结
2022/03/19 MySQL
python游戏开发之pygame实现接球小游戏
2022/04/22 Python