微信小程序登录、授权用户手机号、授权用户信息、支付、提现、拨打电话、地图导航、获取剪贴板内容

mac2023-06-10  15

登陆:

调用wx.login()方法获取code。调用后端接口,传入code获取用户openid。 wx.login({ success: (res)=>{ if(res.code){ // 调用后端接口,传入code获取用户openid ... } } })

授权用户信息:

为了优化用户体验,微信小程序不再支持直接弹出授权框,可以将 button 组件open-type的值设置为getUserInfo ,当用户点击之后,可以通过bindgetuserinfo事件回调获取到用户的基本信息。

//authorize.wxml <button open-type="getUserInfo" bindgetuserinfo="getUserInfo">授权用户信息</button> //authorize.js getUserInfo(e) { //存在e.detail.rawData,表明授权面板用户点击了允许;否则表明用户点击了拒绝; if (e.detail.rawData) { ... } }

授权用户手机号:

需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 button 组件的点击来触发。

获取微信用户绑定的手机号,需先调用wx.login接口(不建议在bindgetphonenumber事件回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,可能会导致解密失败)。

目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)。

//authorize.wxml <button open-type="getPhoneNumber" bingtap="login" bindgetphonenumber="getPhoneNumber">授权用户手机号</button> //authorize.js //点击按钮触发bingtap,调用wx.login()获取code;同时系统会弹出授权面板 login(){ wx.login({ success: (res)=>{ _this.setData({ code: res.code }) } }) } // 点击授权面板的允许/拒绝后触发bindgetphonenumber,此时携带code肯定是新鲜的,不会过期 getPhoneNumber(e) { //存在e.detail.encryptedData,表明授权面板用户点击了允许;否则表明用户点击了拒绝; if (e.detail.encryptedData) { //调用后端接口,传入code、encryptedData、iv获取用户解密的手机号 ... } }

支付:

调用后端接口,返回微信支付API所需的参数。调用微信支付API,发起微信支付。

调用前需在小程序微信公众平台 -功能-微信支付入口申请接入微信支付。

//调用后端接口 wxPay({}).then((data)=>{ if(data){ //调用微信支付API const prepayId = `prepay_id=${data.prepayId}`; wx.requestPayment({ timeStamp: data.timeStamp, //时间戳 nonceStr: data.nonceStr, //随机字符串 package: prepayId, //统一下单接口返回的 prepay_id 参数值,需拼接固定格式 signType: data.signType, //签名算法 paySign: data.paySign, //签名 success (res) { wx.navigateTo({ url: '../success/success' }) }, fail (err) { showToast(err); } }) } })

提现:

微信小程序没有提现相关的API,一般用企业付款到零钱实现。

企业付款到零钱功能是微信支付的功能,需要后端去调用微信支付的功能;小程序只需要去调用后端的接口即可。

拨打电话:

handleCallPhone(val){ wx.makePhoneCall({ phoneNumber: val }) }

地图导航:

latitude和longitude是数值类型,不能是字符串类型。

handleNav(item){ //​使用微信内置地图查看位置 wx.openLocation({ latitude:parseFloat(item.lat),//地址的纬度 longitude: parseFloat(item.lon),//地址的经度- address: item.deliveryAddress//详细地址 }) }

获取剪贴板内容:

wx.getClipboardData({ success (res){ console.log(res.data); } })
最新回复(0)