python-django实现微信小程序登录以及获取用户信息

小程序登录:

       小程序可以通过微信官方提供的登录方法方便地获取微信提供的用户身份标识

功能描述:

调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台账号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台账号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。

示例代码

后端通过拿到前端发送的code进行对官方进行请求,获取openid和session_key

请求前需要传入参数

小程序id:appid(自己小程序)

小程序密钥:secret(自己小程序)

code:js_code(前端发送的code)

请求url示范:

https://api.weixin.qq.com/sns/jscode2session?appid=wx78a9ebfc7f6e5199&secret=e52eb8157527a5065dd4a66d3b8c4f58&js_code=0c16Z51w3suTc33vJi0w3WJECK06Z51M&grant_type=authorization_code

响应成功示范:

{'session_key': 'fAXZyFh2sOJtetJARvJBTQ==', 'openid': 'oFrt47e5vwxzynVGB_apbBxixRr8'}

 如果是下面情况,表示code被使用过,已经失效:

{
"errcode": 40163,
"errmsg": "code been used, rid: 66a0b364-6dea0ee5-656dbeef"
}

django实现代码:

stting.py文件中:

AppID = "wx78a9ebfc7f6e5199"
AppSecret = "e52eb8157527a5065dd4a66d3b8c4f58"
code2Session = 'https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code'  # 获取微信小程序code

url.py

from django.urls import path
from appFrontLP.views import *

urlpatterns=[
    path("login",UserLogin.as_view()),#登录
]

视图文件实现方法:

from rest_framework.views import APIView
from travelWechatApp import settings



def get_user_info(code):
    code_url = settings.code2Session.format(AppID, AppSecret, code)
    response = requests.get(code_url)
    json_response = response.json()  # 把它变成json的字典
    if json_response.get("session_key"):
        return json_response
    else:
        return False

class UserLogin(APIView):
    """登录授权"""
    def post(self, request):
        param = request.data
        number = param.get("phone")
        if not param.get('code'):
            return JsonResponse({'status': 1, "msg": "缺少参数"},status=status.HTTP_400_BAD_REQUEST)
        else:
            code = param.get('code')
            user_data = get_user_info(code)
            if user_data:
                val = user_data['session_key'] + "&" + user_data['openid']
                key = user_data['session_key']
                sql = f"""SELECT * FROM wechatusers WHERE openid = '{user_data['openid']}'"""
                has_user = self.Fetchone(sql)
                if not has_user:
                    into_sql = f"""INSERT INTO wechatusers (openid, session_key, number) VALUES ('{user_data['openid']}', '{key}','{number}')"""
                    self.Fetchone(into_sql)
                return JsonResponse({
                    'status': 0,
                    'msg': 'ok',
                    'data': {'token': key,"openid":user_data['openid']}
                },status=status.HTTP_200_OK)
            else:
                return JsonResponse({'status': 2, 'msg': "无效的code"},status=status.HTTP_400_BAD_REQUEST)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值