微信小程序的常用方法--微信登陆/客服功能/wxRequest的请求封装(1)

1,590 阅读3分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

微信登录

在开发微信小程序的时候,我们经常需要用到微信登录,通过wx的接口来获取微信用户的信息,然后存储到我们数据库来创建属于我们系统的用户信息。

所以我们就要使用到wx.login(),wx.getUserProfile(),这两个方法。

wx.login()

wx.login(),是调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。

我们通过获取到的code,传给后端,由后端通过调用 auth.code2Session 接口,来获取用户唯一标识 OpenID、 用户在微信开放平台帐号下的唯一标识UnionID(若当前小程序已绑定到微信开放平台帐号) 和 会话密钥 session_key。

wx.login({
      success (res) {
        console.log(res);
        if (res.code) {  //获取到code之后,传给后端,接口
          wx.request({
            url: url,
            data: {
              code: res.code,
              user_name:e.nickName
            },
            success: (res) => {
              console.log(res.data);
              if(res.data.ret){
                let userInfo = Object.assign(e,res.data)
                console.log(userInfo);
                wx.setStorage({
                  key:"userInfo",
                  data:JSON.stringify(userInfo) 
                })
              }else{
                wx.showToast({title: '登录失败',icon:'error',duration:2000})
              }
            }
          })
          
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })

wx.getUserProfile()

wx.getUserProfile(),获取用户信息。页面产生点击事件(例如 buttonbindtap 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 userInfo。该接口用于替换 wx.getUserInfo

这个是新的微信获取用户的方法了,之前的wx.getUserInfo(),已经不能弹窗了。

getUserProfile(e){
      let that = this
      wx.getUserProfile({
        desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
        success: (res) => {
          console.log(res);
        },
        fail:(res)=>{
          console.log(res);
        }
      })
    },

两者合一

但是在实际的使用的时候,我们之后点击一次来获取这些信息,所以就会出现一个问题,wx.getUserProfile(),是不能通过API调用,所以只能先调用wx.getUserProfile(),然后再去调用wx.login()

这样就可以完美获取用户的信息了,并且转化为系统需要的用户和信息

客服

微信小程序有个自带的客服功能,在小程序的后台管理,添加

因为客服功能是必须要用户自己触发的,不能使用api触发的,但是有时候我们使用,单元格来做点击联系客服的时候就有点麻烦了,因为不能使用openType: 'contact'

所以使用了,点击之后,出现一个弹窗,再由用户去触发

<van-cell title="联系客服" is-link bind:click='getContact'>
            <view slot='icon' class="center">
               <van-icon name="service-o" color="#1c91e0" class="center" style="margin-right:5px;font-size:16px;" />
            </view>
        </van-cell>
getContact(){
      Dialog.alert({
        message: '是否联系在线客服?',
        theme: 'round-button',
        confirmButtonOpenType:'contact',//这个是弹框的自带的属性,可以触发客服的会话弹框
        showCancelButton:'false'
      })
      .then(() => {
        // on confirm
      })
    },

但是我发现一个问题,这个Dialog的功能,必须还要再额外的引入一次,才可以使用

import Dialog from '@vant/weapp/dist/dialog/dialog';

具体的客服功能可以去参考文档:developers.weixin.qq.com/doc/offiacc…

wxRequest的请求

设置全局请求URL

   urlData:{
     URL: 'http://182.61.13.123:8080'
  },

封装wx.request请求; method: 请求方式; url: 请求地址; data: 要传递的参数; callback: 请求成功回调函数; errFun: 请求失败回调函数;

wxRequest(method, url, data, callback, errFun) {
     wx.request({
      url: url,
      method: method,
      data: data,
      header: {
       'content-type': method == 'GET'?'application/json':'application/x-www-form-urlencoded',
       'Accept': 'application/json'
      },
      dataType: 'json',
      success: function (res) {
       callback(res.data);
      },
      fail: function (err) {
       errFun(res);
      }
     })
    },