4.微信登入小程序与后端实现
生活随笔
收集整理的這篇文章主要介紹了
4.微信登入小程序与后端实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
微信登入小程序與后端實現
**需求:**實現小程序端實現登入以后,后端實現登入狀態
小程序端
app.js
App({onLaunch: function () {// 展示本地存儲能力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' // 默認值},success: function (res) {console.log(res);wx.setStorageSync('login_key', res.data.data.login_key);},fail:function(res){console.log(res)}})}});},//設置全局的變量,apiDomain這是我們接口的ipglobalData: {apiDomain:'http://127.0.0.1:8000',//保存登入的標識login_key:''} })服務端
1添加登入路由user.login.as_view(),接收小程序中傳過來的code。
2 我們通過code請求微信接口獲取session_key和用戶唯一標識openid,當我們拿到openid后,保存至Wxuser表
3 我們隨機生成一個login_key,作為鍵,將session_key和openid拼接,作為值,保存到redis,在將login_key(相當于web中的session)返回小程序,后面小程序需要登入請求的接口,必須帶login_key,作為用戶標識
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之后,再取數據,從request.dataparams=request.data#判斷前端是否傳入code參數if params.get('code'):code=params['code']#調用wxloing.getLoginInfo獲取session_key和openiduser_data=wxlogin.getLoginInfo(code)if user_data:#將session_key和openid拼接成字符串,不要亂選拼接字符串,因為openid中有特殊符號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#將用戶數據存入數據庫try:user = models.Wxuser.objects.get(openid=user_data['openid'])except Exception as e:user=None#如果數據沒有則創建記錄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程序出錯" )return JsonResponse(re_data)else:re_data = baseResponse.resdic("error", "獲取session_key失敗")return JsonResponse(re_data)else:re_data = baseResponse.resdic("error", "缺少參數")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的文本 就是一個json字符串# 將json字符串轉換成dic字典對象data = json.loads(json_response)if data.get('session_key'):return datareturn False總結
以上是生活随笔為你收集整理的4.微信登入小程序与后端实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ctfshow练习
- 下一篇: 分页计算起始页和总页数