小程序循环获取授权的method

今天把微信小程序转到头条上,发现头条有个自检环节
要求检查:用户取消授权后是否可以再次进入授权流程
才发现似乎之前并未考虑这点,折腾一番,记录一下:

//获取用户权限设置
uni.getSetting({
	success(res) {
		if (res.authSetting['scope.camera'] == false) {
			//第一次执行,实际authSetting并没有值,也就不是false,故进入的是最后的授权流程
			//再次进入时如果未授权则打开设置页面
			console.log('用户拒绝授权')
			uni.openSetting({
				success(res) {
					if(res.authSetting['scope.camera'] == true){
						//用户在设置页面给予授权
						console.log('用户设置授权')
						//执行代码
					}else{
						//用户在设置页面未授权返回,弹出提示
						console.log('用户未设置授权')
						uni.showToast({
							icon:'none',
							title:'未授权将无法使用'
						})
					}
				}
			});
		} else {
			//进入首次授权流程
			uni.authorize({
				scope: 'scope.camera',
				success() {
					//如果这里直接就给了授权,则一切正常;
					//否则下次进入后直接进入权限设置页面
					console.log('用户已同意授权')
					//执行代码
				}
			})
		}
	}
})

不知道大家是否也是类似的流程,琢磨了半天才弄清楚……
我用的是uniapp开发,uni. == wx.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用uniapp开发的抖音小程序授权获取手机号的完整代码: 1. 在页面中引入抖音小程序授权组件 ```html <template> <view> <phone-auth :visible.sync="isShowPhoneAuth" @success="onPhoneAuthSuccess" @cancel="onPhoneAuthCancel" /> <button @click="showPhoneAuth">授权手机号</button> </view> </template> <script> import PhoneAuth from '@/components/phone-auth' export default { components: { PhoneAuth }, data() { return { isShowPhoneAuth: false } }, methods: { showPhoneAuth() { this.isShowPhoneAuth = true }, onPhoneAuthSuccess(phoneNumber) { console.log('授权手机号成功', phoneNumber) // 处理手机号授权成功后的逻辑 }, onPhoneAuthCancel() { console.log('取消授权') // 处理取消授权的逻辑 } } } </script> ``` 2. 在 `components` 目录下新建 `phone-auth` 组件 ```html <template> <view class="phone-auth" v-if="visible"> <view class="phone-auth__mask"></view> <view class="phone-auth__dialog"> <view class="phone-auth__title">手机号授权</view> <view class="phone-auth__content"> <button class="phone-auth__btn" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber"> 授权手机号 </button> <button class="phone-auth__btn phone-auth__btn--cancel" @click="onCancel">取消</button> </view> </view> </view> </template> <script> export default { props: { visible: { type: Boolean, default: false } }, methods: { onGetPhoneNumber(e) { if (e.mp.detail.errMsg === 'getPhoneNumber:ok') { const encryptedData = e.mp.detail.encryptedData const iv = e.mp.detail.iv uni.request({ url: 'https://your-api.com/getPhoneNumber', method: 'POST', data: { encryptedData, iv }, success: res => { if (res.statusCode === 200) { console.log('授权成功', res.data.phoneNumber) this.$emit('success', res.data.phoneNumber) } else { console.error('授权失败', res) } }, fail: err => { console.error('授权失败', err) } }) } else { console.error('授权失败', e) } }, onCancel() { this.$emit('cancel') } } } </script> <style scoped> .phone-auth { position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 999; } .phone-auth__mask { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.5); } .phone-auth__dialog { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 80%; max-width: 320rpx; background-color: #fff; border-radius: 8rpx; overflow: hidden; } .phone-auth__title { font-size: 32rpx; color: #333; text-align: center; padding: 32rpx 0; } .phone-auth__content { display: flex; flex-direction: column; align-items: center; justify-content: center; } .phone-auth__btn { width: 100%; height: 96rpx; font-size: 32rpx; color: #fff; background-color: #ff5040; border-radius: 48rpx; margin-bottom: 32rpx; } .phone-auth__btn--cancel { background-color: #999; } </style> ``` 3. 在 `your-api.com/getPhoneNumber` 接口中解密手机号码 ```php <?php // 解密手机号码 function decryptPhone($encryptedData, $iv, $sessionKey) { $aesKey = base64_decode($sessionKey); $aesIV = base64_decode($iv); $aesCipher = base64_decode($encryptedData); $result = openssl_decrypt($aesCipher, 'AES-128-CBC', $aesKey, OPENSSL_RAW_DATA, $aesIV); $data = json_decode($result, true); return $data['phoneNumber']; } // 获取小程序会话密钥 function getSessionKey($appId, $appSecret, $code) { $url = "https://developer.toutiao.com/api/apps/jscode2session?appid={$appId}&secret={$appSecret}&code={$code}"; $result = file_get_contents($url); $data = json_decode($result, true); return $data['session_key']; } // 获取加密数据和向量 $encryptedData = $_POST['encryptedData']; $iv = $_POST['iv']; // 获取小程序会话密钥 $appId = 'your_app_id'; $appSecret = 'your_app_secret'; $code = $_POST['code']; $sessionKey = getSessionKey($appId, $appSecret, $code); // 解密手机号码 $phoneNumber = decryptPhone($encryptedData, $iv, $sessionKey); // 返回解密后的手机号码 header('Content-Type: application/json'); echo json_encode([ 'phoneNumber' => $phoneNumber ]); ``` 注意,上述代码中的 `$appId` 和 `$appSecret` 分别是您在今日头条开发平台创建小程序应用后所分配的应用ID和应用密钥。您还需要将该文件上传到您的Web服务器上,并将接口地址替换为您实际上线的地址。 以上就是使用uniapp开发抖音小程序授权获取手机号的完整代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万符网络

走过路过,欢迎打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值