python获取微信小程序手机号并绑定遇到的坑

yizhihongxing

下面是“Python获取微信小程序手机号并绑定遇到的坑”的完整攻略。

1. 准备工作

在进行微信小程序手机号获取之前,需要先获取用户的授权。授权方式分为两种:一种是通过用户点击事件展示授权窗口;另一种是在页面加载时就调用授权接口。由于第一种较为常见,本攻略也采用第一种方式进行讲解。

授权窗口的代码如下:

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号</button>

获取用户信息的方法如下:

//点击获取手机号时,显示微信授权窗口
getPhoneNumber: function (e) {
  console.log(e.detail.errMsg)
  console.log(e.detail.iv)
  console.log(e.detail.encryptedData)
}

2. 解密微信提供的手机号加密数据

根据微信文档描述,encryptedData 是「包括敏感数据在内的完整用户信息的加密数据」,而 iv 是加密算法的初始向量。前往微信公众平台获取小程序的 AES Key 和 AppID。

首先我们需要将加密数据和其指定的密文算法(AES/CBC/PKCS7Padding)进行解密。代码示例:

def decrypt_wechat_user_phone_info(session_key, iv, encrypted_data):
    try:
        #解密手机号加密信息
        aes_key_bytes = base64.b64decode(session_key)
        iv_bytes = base64.b64decode(iv)
        encrypted_data_bytes = base64.b64decode(encrypted_data)

        cipher = AES.new(key=aes_key_bytes, mode=AES.MODE_CBC, iv=iv_bytes)
        decrypted_data = unpad(cipher.decrypt(encrypted_data_bytes), AES.block_size)
        decrypted_data = decrypted_data.decode('utf-8')

        decrypted_data = json.loads(decrypted_data)
        return decrypted_data.get('phoneNumber')
    except Exception as e:
        return None

3. 绑定手机号

获取到用户的手机号之后,我们需要进行头像昵称、手机号及发起该次请求的微信用户的openId、session_key等信息绑定。代码示例:

def wx_get_user_phone(request):
    """
    获取微信小程序用户手机号
    """
    code = request.data.get('code')
    iv = request.data.get('iv')
    encrypted_data = request.data.get('encryptedData')

    # 获取微信openid,微信session_key
    code2session_resp = requests.get(
        'https://api.weixin.qq.com/sns/jscode2session',
        params={
            'appid': WECHAT_APP_ID,
            'secret': WECHAT_APP_SECRET,
            'js_code': code,
            'grant_type': 'authorization_code'
        })

    if code2session_resp.status_code != 200:
        return {"message": "Failed to get wechat session key."}, status.HTTP_500_INTERNAL_SERVER_ERROR

    code2session_resp_data = code2session_resp.json()

    wx_openid = code2session_resp_data.get('openid')
    wx_session_key = code2session_resp_data.get('session_key')

    # 解密手机号信息
    wx_user_phone = decrypt_wechat_user_phone_info(wx_session_key, iv, encrypted_data)

    # 对于已经有注册信息的用户,在不存在其他情况的前提下,不用重复绑定,直接获取用户id即可
    user_profile = UserProfile.objects.filter(wx_openid=wx_openid).first()
    if user_profile:
        user_profile.wx_phone = wx_user_phone
        user_profile.save(update_fields=('wx_phone',))
    else:
        ...

以上是Python获取微信小程序手机号并绑定的一个简单示例。需要注意的是,由于该过程需要在后端进行解密与交互,请务必确保前端与后端的数据完整性及安全性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python获取微信小程序手机号并绑定遇到的坑 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Python疫情数据可视化分析

    让我们来详细讲解一下Python疫情数据可视化分析的完整攻略吧。 简介 疫情数据是目前热门话题之一,通过可视化分析可以更好地呈现数据,并对疫情走向进行预测和分析。在本文中,我们会详细介绍如何使用Python进行疫情数据的可视化分析。 准备工作 在我们开始进行数据分析之前,需要先安装一些必要的Python库,主要包括: pandas:用于数据处理和清洗。 ma…

    python 2023年5月18日
    00
  • 8行代码实现Python文件去重

    下面我会详细讲解“8行代码实现Python文件去重”的完整攻略。这个过程中包含以下步骤: 安装Python所需依赖库 创建去重脚本 运行脚本进行去重 1. 安装Python所需依赖库 在开始使用Python进行文件去重之前,我们需要安装一个名叫pandas的Python依赖库。可以使用以下命令进行安装: pip install pandas 这个命令将会在你…

    python 2023年6月5日
    00
  • 刷新 Python tkinter TreeView

    【问题标题】:Refresh Python tkinter TreeView刷新 Python tkinter TreeView 【发布时间】:2023-04-04 05:29:01 【问题描述】: 我正在创建一个与 Postgresql 数据库交互的 GUI。程序启动时,GUI 会显示某个表的所有内容。我有一个按钮被编程来添加/删除条目。这些按钮的工作方式…

    Python开发 2023年4月6日
    00
  • python批量压缩图像的完整步骤

    下面是使用Python批量压缩图片的完整步骤: 步骤一:安装必要的Python库 在使用Python批量压缩图片前,我们需要安装Python的pillow库和os库。 pip install pillow 安装完成后,使用import语句载入pillow库和os库: import os from PIL import Image 步骤二:定义压缩图片函数 我…

    python 2023年6月3日
    00
  • Python实现打印金字塔图案的方法详解

    Python实现打印金字塔图案的方法详解 本篇文章将详细讲解如何使用Python打印金字塔图案,包括基本思路、代码实现以及示例演示等内容。 基本思路 打印金字塔图案的基本思路是循环嵌套,从第一层开始,每一层打印的字符数逐渐增加。具体实现步骤如下: 获取用户输入的金字塔层数n,可以使用input函数让用户自行输入。 外层循环控制金字塔的总层数,内层循环控制每一…

    python 2023年6月5日
    00
  • Python的历史与优缺点整理

    Python的历史 Python是由Guido van Rossum于1989年在荷兰创建的,它是一种解释型、交互式、面向对象的高级程序设计语言。Python的发展历程中经历了以下几个阶段: Python 1.x:1991-1999年,是Python的初始版本,包含了基本的语法、面向对象、异常处理等特性。 Python 2.x:2000-2010年,是Pyt…

    python 2023年5月13日
    00
  • Pycharm如何对python文件进行打包

    当我们编写好一个 Python 应用程序后,有时候我们希望将其发布到其他机器上,此时打包就成为非常必要的一个环节。PyCharm 集成了一些打包工具,可以方便的打包 Python 应用程序。下面,我将详细介绍如何使用 PyCharm 对 Python 文件进行打包。 1. 新建PyCharm项目 在 PyCharm 中新建一个 Python 项目并添加需要打…

    python 2023年6月3日
    00
  • 浅谈python字典多键值及重复键值的使用

    当我们需要使用键-值(key-value)对的数据结构时,Python 字典(dict) 是一个很好的选择。常规的字典是单一键对应单一值,但是有一些情况下,一个键可能需要对应多个值,或多个键对应同一个值。在这时我们就需要使用字典的多键值和重复键值功能。 多键值 在 Python 中使用字典的多键值功能有两种方法:一种是将键对应的值设置为列表,另一种则是将键对…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部