zoukankan      html  css  js  c++  java
  • 微信小程序登录流程

    先从我们的小程序代码开始


    这是我们小程序的代码结构,登录的主要功能在login.js中

    简单的说一下我们小程序的js代码登录流程

    login ->获取code ->getUserInfo获取iv和encryptedData ->传给自己的服务器处理 ->返回给小程序结果

    var API_URL = "自己的服务器地址";
    Page({
      onLoad: function () {
      console.log("iv");
      wx.login({//login流程
      success: function (res) {//登录成功
        if (res.code) {
          var code = res.code;
          wx.getUserInfo({//getUserInfo流程
            success: function (res2) {//获取userinfo成功
            console.log(res2);
            var encryptedData = encodeURIComponent(res2.encryptedData);//一定要把加密串转成URI编码
              var iv = res2.iv;
              //请求自己的服务器
             Login(code,encryptedData,iv);
            }
          })
    
        } else {
          console.log('获取用户登录态失败!' + res.errMsg)
        }
      }
    });
    • code:服务器用来获取sessionKey的必要参数。
    • IV:加密算法的初始向量,encryptedData:加密过的字符串

    把code iv encryptedData 传递给我们的服务器

    function  Login(code,encryptedData,iv){     console.log('code='+code+'&encryptedData='+encryptedData+'&iv='+iv);
     //创建一个dialog
              wx.showToast({
                title: '正在登录...',
                icon: 'loading',
                duration: 10000
              });
              //请求服务器
              wx.request({
                url: API_URL,
                data: {
                  code:code,
                  encryptedData:encryptedData,
                  iv:iv
                },
                method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
                header: {
                  'content-type': 'application/json'
                }, // 设置请求的 header
                success: function (res) {
                  // success
                  wx.hideToast();
                  console.log('服务器返回'+res.data);
    
                },
                fail: function () {
                  // fail
                  // wx.hideToast();
                },
                complete: function () {
                  // complete
                }
              })
      }

    看文档的话,应该知道,我们所需要的unionId就在encryptedData中,所以服务器需要这些信息来把unionId解析出来。

    服务器处理逻辑

    先下载微信的解密demo


    这里写图片描述


    这里我选择的是PHP代码,把除了demo外的三个class文件,放入我们自己的项目,以后后面调用。

    这里讲解一下服务器的处理流程:
    通过微信的https://api.weixin.qq.com/sns/jscode2session 接口获取seesionKey,然后在通过sessionKey和iv来解密encryptedData数据获取UnionID。
    具体文档 : https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html?t=20161122

    根据官方文档给的demo进行处理。

    原文地址:https://phperzh.com/articles/1207

  • 相关阅读:
    网络IO之阻塞、非阻塞、同步、异步总结
    C语言栈与调用惯例
    多个文件目录下Makefile的写法
    利用 mount 指令解决 Read-only file system的问题
    error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
    Centos6.4下安装protobuf及简单使用
    Centos下修改启动项和网络配置
    Centos下配置单元测试工具gtest
    Centos配置为驱动程序开发环境
    Centos安装gcc及g++
  • 原文地址:https://www.cnblogs.com/kiimi/p/8667907.html
Copyright © 2011-2022 走看看