本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

大家好,我是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成功!
    image.png

    感谢你的阅读,如有错误,欢迎提出!
    image.png