@[TOC]
⭐ 前言
大家好,我是yma16,不止前端,本文将介绍微信小程序结合django获取openid的功能实现。
⭐ 微信的openid获取流程
因为微信号的openid可以锁定微信账号,所以用它作为用户一个字段实现注册登录
openid获取分两个步骤
- 客户端前端发起请求获取code
- 服务器后端用code去访问api获取
⭐步骤分解
微信小程序获取code
在前端页面发起request去获取code
wx.login({
success(res) {
if (res.code) {
//发起网络请求
const path = '/common-api/wxProgramLogin/'
wx.request({
url: baseUrl + path,
method: 'GET',
data: {
code: res.code
},
success: (res => {
console.log('res', res)
console.log('res.data', res.data.data)
wx.setStorageSync('currentOpenid', res && res.data ? res.data.data : null)
resolve && resolve()
wx.hideLoading()
}),
fail: r => {
console.log('cloud r', r)
wx.hideLoading()
reject && reject()
}
})
} else {
console.log('登录失败!' + res.errMsg)
wx.hideLoading()
reject && reject()
}
},
fail: r => {
console.log('r', r)
wx.hideLoading()
reject && reject()
// wx.hideLoading()
}
})
requests访问code2Session接口
code2Session接口需要后端发起
django中的实现
views的视图
def get_openid(code):
appid='微信小程序的appid'
secret='小程序的密钥'
js_code=code
grant_type='authorization_code'
url = 'https://api.weixin.qq.com/sns/jscode2session?appid={appid}&secret={secret}&js_code={js_code}&grant_type={grant_type}'
url=url.format(appid=appid,secret=secret,js_code=js_code,grant_type=grant_type)
data = {
"code": code
}
# 请求代理
ret = requests.post(url,data=data)
return ret.json()
def wx_program_login(request):
if request.method == 'GET':
try:
code = request.GET.get('code', default='')
ret_json = get_openid(code)
return JsonResponse({
'code': 200,
'msg': 'success',
'data': ret_json
})
except Exception as e:
return JsonResponse({
'code': 500,
'msg':str(e),
'data': '获取微信openid失败'
})
return JsonResponse(
{
'code': 500,
'msg': 'method is not allowed',
'data': []
}
)
在url中把wx_program_login暴露出去
from django.contrib import admin
from .views import wx_program_login
from django.urls import path,include
urlpatterns = [
path(r'wxProgramLogin/', wx_program_login)
]
呼应了微信小程序中wx.request的请求wxProgramLogi换取opendid
测试成功!
根据code获取openid成功!
⭐结束
感谢你的阅读,如有错误,欢迎提出!