最新小程序授权+php后端(附demo源码)

参考博客:

1.小程序端

先看说明,原先的授权是通过按钮的开放能力open-type="getUserInfo"进行授权的,而现在的getUserProfile只能通过点击事件进行调用。我们直接通过按钮点击事件触发方法看一下结果。会看到关键信息都返回过来了,和getUserInfo一样所需要的关键变量encryptedData,iv也都在。那么由此可见,后端php代码基本可以不用改了。

我们直接改一下js文件和wxml文件就好。

index.js

//index.js
//获取应用实例
const app = getApp()
 
Page({
  data: {
    motto: Hello World,
    userInfo: {},
    hasUserInfo: false,
    canIUse:false,
    canIUseGetUserProfile: true
  },
  //事件处理函数
  bindViewTap: function () {
    wx.navigateTo({
      url: ../logs/logs
    })
  },
  onLoad: function () {
    if (app.globalData.userInfo) {
      this.setData({
        userInfo: app.globalData.userInfo,
        hasUserInfo: true
      })
    } else if (this.data.canIUse) {
      // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      app.userInfoReadyCallback = res => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    } else {
      console.log(1241);
      // 在没有 open-type=getUserInfo 版本的兼容处理
      wx.getUserProfile({
        desc: 用于完善会员资料,
        success: res => {
          app.globalData.userInfo = res.userInfo
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true
          })
        }
      })
    }
  },
  getUserProfile: function () {
    wx.getUserProfile({
      desc: 用于完善会员资料,
      success: e => {
        console.log("授权信息:",e);
        wx.login({
          success(res) {
            if (res.code) {
              //发起网络请求
              wx.request({
                url: http://localhost:8080/tp5/public/wxlogin/Login/login,
                data: {
                  encryptedData: e.encryptedData,
                  iv: e.iv,
                  code: res.code,
                },
                success(res) {
                  console.log(res.data);
                }
              })
            } else {
              console.log(登录失败! + res.errMsg)
            }
          }
        })
        app.globalData.userInfo = e.userInfo
        this.setData({
          userInfo: e.userInfo,
          hasUserInfo: true
        })
      }
    })
  }
})

index.wxml

<!--index.wxml-->
<view class="container">
  <view class="userinfo">
    <block wx:if="{
         
  {!hasUserInfo}}">
      <button wx:if="{
         
  {canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
      <view wx:else> 请使用1.4.4及以上版本基础库 </view>
    </block>
    <block wx:else>
      <image bindtap="bindViewTap" class="userinfo-avatar" src="{
         
  {userInfo.avatarUrl}}" mode="cover"></image>
      <text class="userinfo-nickname">{
         
  {userInfo.nickName}}</text>
    </block>
  </view>
  <view class="usermotto">
    <text class="user-motto">{
         
  {motto}}</text>
  </view>
</view>

我们开始奔放一下,成功。

tips:这里有个注意事项,新的授权登录接口getUserProfile不能获取到openId了。所以如果在操作过程中报错和openId有关,可以改这个地方。将 $save[openId] = &$userinfo[openId];替换成 $save[openId] = null; 如果没报错的话,那就不用管了
经验分享 程序员 微信小程序 职场和发展