4.微信登入小程序与后端实现
生活随笔
收集整理的這篇文章主要介紹了
4.微信登入小程序与后端实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
微信登入小程序與后端實(shí)現(xiàn)
**需求:**實(shí)現(xiàn)小程序端實(shí)現(xiàn)登入以后,后端實(shí)現(xiàn)登入狀態(tài)
小程序端
app.js
App({onLaunch: function () {// 展示本地存儲(chǔ)能力001bHJ281qo7rS1JR1481OQC281bHJ2Bvar _this = this; wx.login({success: res => {// console.log(res);wx.request({url: _this.globalData.apiDomain +'/api/member/code/login',data: {code: res.code},method: "POST",header: {'content-type': 'application/json' // 默認(rèn)值},success: function (res) {console.log(res);wx.setStorageSync('login_key', res.data.data.login_key);},fail:function(res){console.log(res)}})}});},//設(shè)置全局的變量,apiDomain這是我們接口的ipglobalData: {apiDomain:'http://127.0.0.1:8000',//保存登入的標(biāo)識(shí)login_key:''} })服務(wù)端
1添加登入路由user.login.as_view(),接收小程序中傳過來(lái)的code。
2 我們通過code請(qǐng)求微信接口獲取session_key和用戶唯一標(biāo)識(shí)openid,當(dāng)我們拿到openid后,保存至Wxuser表
3 我們隨機(jī)生成一個(gè)login_key,作為鍵,將session_key和openid拼接,作為值,保存到redis,在將login_key(相當(dāng)于web中的session)返回小程序,后面小程序需要登入請(qǐng)求的接口,必須帶login_key,作為用戶標(biāo)識(shí)
url.py
from django.contrib import admin from django.urls import path from django.conf.urls import url from api.views import product,userurlpatterns = [path('admin/', admin.site.urls),url(r'^api/indexlist/categoryList$', product.caetgoryList.as_view()),url(r'^api/indexlist/IndexProductList$', product.ProductList.as_view()),url(r'^api/indexlist/categoryProductsList$', product.categoryProductsList.as_view()),url(r'^api/indexlist/detailProduct$', product.detailProduct.as_view()),url(r'^api/member/code/login$', user.login.as_view()), ]user.py
from django.shortcuts import render,HttpResponse from rest_framework.views import APIView from api.wx import wxlogin,UserInfo,setting from api import baseResponse import time from django.core.cache import cache #引入緩存模塊 from api import models from django.http import JsonResponse import hashlib # Create your views here. class login(APIView):def post(self,request):# 用apiview之后,再取數(shù)據(jù),從request.dataparams=request.data#判斷前端是否傳入code參數(shù)if params.get('code'):code=params['code']#調(diào)用wxloing.getLoginInfo獲取session_key和openiduser_data=wxlogin.getLoginInfo(code)if user_data:#將session_key和openid拼接成字符串,不要亂選拼接字符串,因?yàn)閛penid中有特殊符號(hào)val=user_data['session_key']+'&'+user_data['openid']#生成MD5值獲取keymd=hashlib.md5()md.update(code.encode('utf-8'))md.update(str(time.clock()).encode('utf-8'))key = md.hexdigest()data={}try:#將key和上面的val存入rediscache.set(key,val)#返回login_key到小程序data['login_key'] = key#將用戶數(shù)據(jù)存入數(shù)據(jù)庫(kù)try:user = models.Wxuser.objects.get(openid=user_data['openid'])except Exception as e:user=None#如果數(shù)據(jù)沒有則創(chuàng)建記錄if not user:models.Wxuser.objects.create(openid=user_data['openid'])re_data = baseResponse.resdic("success", "成功",data )return JsonResponse(re_data)except Exception as e:print(e)re_data = baseResponse.resdic("error", "redis程序出錯(cuò)" )return JsonResponse(re_data)else:re_data = baseResponse.resdic("error", "獲取session_key失敗")return JsonResponse(re_data)else:re_data = baseResponse.resdic("error", "缺少參數(shù)")return JsonResponse(re_data)api.wx.setting.py
AppId="wxd1eba74200bc40c8" AppSecret="0d7168052febae147f1d70eb6b8996d5" code2session_url= "https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code" acces_url= 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}'api.wx.wxlogin
from api.wx import setting import requests import jsondef getLoginInfo(code):url=setting.code2session_url.format(setting.AppId,setting.AppSecret,code)re_data= requests.get(url)json_response = re_data.content.decode() # 獲取r的文本 就是一個(gè)json字符串# 將json字符串轉(zhuǎn)換成dic字典對(duì)象data = json.loads(json_response)if data.get('session_key'):return datareturn False總結(jié)
以上是生活随笔為你收集整理的4.微信登入小程序与后端实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ctfshow练习
- 下一篇: 分页计算起始页和总页数