主题
常见问题
小程序登录
- 调用
wx.getUserInfo获取用户信息(可选)。 - 调用
wx.login获取 code。 - 调用后端提供的 “微信登录” 接口,将 code 等用户信息传递给后端。
- 如果没有注册,提示注册/调用注册接口自动注册。
- 判断是否绑定过手机号
- 如果没有绑定过,提示绑定手机号。
- 执行登录成功逻辑,例如:返回首页/我的。
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' }) // 登录成功,跳转到个人中心
}
}小程序支付
- 用户点击“立即下单”。
- 一般都是传递给自身业务的订单号,调用后端接口,然后返回小程序支付所需要的参数。
- 调用
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('微信支付参数获取失败')
}