Skip to content

常见问题

小程序登录

  1. 调用 wx.getUserInfo 获取用户信息(可选)。
  2. 调用 wx.login 获取 code。
  3. 调用后端提供的 “微信登录” 接口,将 code 等用户信息传递给后端。
    • 如果没有注册,提示注册/调用注册接口自动注册。
  4. 判断是否绑定过手机号
    • 如果没有绑定过,提示绑定手机号。
  5. 执行登录成功逻辑,例如:返回首页/我的。
js
async function wxLogin() {
  const wxUserInfo = await wx.getUserInfo()
  const { code } = await wx.login({ provider: 'weixin' })
  const res = await request('/api/wechat/login', { code })

  let token = ''
  let userInfo = null

  // 假如 50001 表示未注册
  if (!res.code === 50001) {
    // 自动注册
    const registerRes = await request('/api/wechat/register', { code, userInfo: wxUserInfo })
    token = registerRes.token
    userInfo = registerRes.userInfo
  }
  token = res.token
  userInfo = res.userInfo
  // 保存
  wx.setStorageSync('token', token)
  wx.setStorageSync('userInfo', userInfo)

  if (!res.phone) {
    wx.navigateTo({ url: '/pages/bind-phone/bind-phone' }) // 没有绑定手机号,跳转到绑定手机号页面
  } else {
    wx.navigateTo({ url: '/pages/profile/profile' }) // 登录成功,跳转到个人中心
  }
}

小程序支付

  1. 用户点击“立即下单”。
  2. 一般都是传递给自身业务的订单号,调用后端接口,然后返回小程序支付所需要的参数。
  3. 调用 wx.requestPayment,传入小程序支付参数,调起微信支付。
js
const result = getPaymentPara(orderno)

if (result) {
  wx.requestPayment({
    timeStamp: result.timeStamp.toString(),
    nonceStr: result.nonceStr,
    package: result.package,
    signType: result.signType,
    paySign: result.paySign,
    success: (res) => {
      console.log('requestPayment:', res)
      wx.toast('支付成功')
      setTimeout(() => {
        wx.redirectTo({
          url: '/pages/reportWait/index?fromType=' + this.data.fromType + '&payType=' + this.data.payType,
        })
      }, 1500)
    },
    fail: (res) => {
      console.log('requestPayment:', res)
      if (res && res.errMsg.indexOf('cancel') === -1) {
        wx.showToast(res.errMsg || '支付失败')
      }
    },
  })
} else {
  wx.showToast('微信支付参数获取失败')
  console.log('微信支付参数获取失败')
}

基于 MIT 许可发布