小程序原生js获取用户权限

1.首先要有一个按钮

<view name="authorizemodal">
    <view class="drawer_screen" wx:if="{{isauthorizeModal}}">
        <view class="drawer_box fishqccenter phonechoosebox">
            <view>
                <image style="width:90%;" src="https://try.fishqc.com/img/Try-sm/authorization.png" mode="widthFix"></image>
            </view>
            <view>
                <button class="authorization-btn" open-type="getUserInfo" bindgetuserinfo="getlogincode" style="border-radius: 1rpx"></button>
            </view>
            <!-- <view class="weChatAuth">授权提示</view>
            <view class="phonechoosetxt">放心试小程序需授权获取微信权限信息</view>
            <view class="phonechoosebtncontain">
               <view class="getPhoneContain">
                    <button class="author-btn"  open-type="getUserInfo" bindgetuserinfo="getlogincode" style="border-radius: 1rpx">授权</button>
               </view>
            </view> -->
        </view>
    </view>
</view>

2.授权的js代码

var app = getApp()
Component({
    properties: {

    },
    data: {
        isauthorizeModal:false
    },
    methods: {
        toasttips: function (text, icon, time) {
            wx.showToast({
                title: text == null ? '' : text,
                icon: icon,
                duration: time == null ? '1000' : time
            })
        },
        getlogincode: function () {
            var that = this;
            wx.login({
                success: function (res) {
                    if (res.code) {
                        var logincode = res.code

                        // 弹窗授权
                        wx.getUserInfo({
                            success: function (res) {
                                if (res.errMsg == 'getUserInfo:ok') {
                                    var encryptedData = res.encryptedData
                                    var iv = res.iv;
                                    that.setData({
                                        isauthorizeModal: false
                                    })
                                    that.triggerEvent('myevent',{arg:false})
                                    that.WeixinLogin(logincode, encryptedData, iv);
                                }

                            },
                            fail: function (res) {
                                // console.log('点击确认取消')
                                that.checkauthorize();
                            }
                        })
                    } else {
                        // console.log('登录失败!' + res.errMsg)

                    }
                }
            });

        },
        // 检查是否授权过
        checkauthorize: function () {
            var that = this;
            wx.getSetting({
                success(res) {
                    // 没有授权过的,进入如下
                    if (!res.authSetting['scope.userInfo']) {
                        that.authorizemodal();
                    }else{
                        that.setData({
                            isauthorizeModal:false
                        })
                        that.triggerEvent('myevent',{arg:false})
                    }
                }
            })
        },
        // 授权失败,弹窗
        authorizemodal: function () {
            var that = this;
            wx.showModal({
                title: '获取用户信息授权',
                content: '当前功能需授权获取用户信息',
                confirmText: '继续授权',
                confirmColor: '#64c8bc',
                success: function (res) {
                    if (res.confirm) {
                        // console.log("点击去设置")
                        that.authorize();
                    } else if (res.cancel) {
                        // console.log("点击取消")
                        // console.log(res)
                    }

                }
            })
        },
        authorize: function () {
            var that = this;
            wx.openSetting({
                success: function (res) {
                    // console.log("授权不成功")
                    if (!res.authSetting['scope.userInfo']) {
                        that.setData({
                            isauthorizeModal:true
                        })
                        that.triggerEvent('myevent',{arg:true})

                    }else{
                        // console.log("授权成功")
                        wx.login({
                            success: function (res) {
                                if (res.code) {
                                    var logincode = res.code
                                    // 弹窗授权
                                    wx.getUserInfo({
                                        success: function (res) {
                                            // console.log('点击确认授权')
                                            if (res.errMsg == 'getUserInfo:ok') {
                                                var encryptedData = res.encryptedData
                                                var iv = res.iv;
                                                that.setData({
                                                    isauthorizeModal: false
                                                })
                                                that.triggerEvent('myevent',{arg:false})
                                                that.WeixinLogin(logincode, encryptedData, iv);
                                            }

                                        },
                                        fail: function (res) {
                                        }
                                    })
                                } else {
                                    // console.log('登录失败!' + res.errMsg)

                                }
                            }
                        });

                    }

                },
                fail: function () {
                    that.checkauthorize();
                }
            })
        },
        show:function(){
            var that = this;
            wx.getSetting({
                success(res) {
                    // console.log(res)
                    // 没有授权过的,进入如下
                    if (!res.authSetting['scope.userInfo']) {

                        var modalarg  = wx.getStorageSync('modalarg')
                        console.log(modalarg)
                        if(modalarg == ''){   //没缓存,调接口
                            wx.request({
                                url: 'https://try.fishqc.com/getAb', //请求接口地址
                                data: {},
                                method:'GET',
                                header: {
                                    'content-type': 'application/x-www-form-urlencoded', // 默认值
                                    'skey': wx.getStorageSync('getstoreskey')
                                },
                                success: function(res) {
                                    if(res.data.code == 200){ 

                                        if(res.data.data.abstatus == 1){ //abstatus为1时,授权弹窗开启

                                            wx.setStorageSync('modalarg',res.data.data)  //设置已经调用过该接口的标识缓存
                                            if(res.data.data.abvalue  == 'a'){  //abvalue为a时,授权弹窗
                                                wx.getSetting({
                                                    success(res) {

                                                        // 没有授权过的,进入如下
                                                        if (!res.authSetting['scope.userInfo']) {
                                                            that.setData({
                                                                isauthorizeModal:true
                                                            })
                                                            that.triggerEvent('myevent',{arg:true})
                                                        }
                                                    }
                                                })

                                            }
                                        }

                                    }

                                }
                            })

                        }else{  //有缓存,直接判断
                            if(modalarg.abstatus == 1){ //abstatus为1时,授权弹窗开启
                                if(modalarg.abvalue  == 'a'){   //abvalue为a时,授权弹窗
                                    console.log('有缓存')
                                    wx.getSetting({
                                        success(res) {

                                            // 没有授权过的,进入如下
                                            if (!res.authSetting['scope.userInfo']) {
                                                that.setData({
                                                    isauthorizeModal:true
                                                })
                                                that.triggerEvent('myevent',{arg:true})
                                            }
                                        }
                                    })
                                }
                            }
                        }
                    }else{

                        that.setData({
                            isauthorizeModal:false
                        })
                        that.triggerEvent('myevent',{arg:false})
                    }
                }
            })

        },
        WeixinLogin: function (logincode, encryptedData, iv) {
            var that = this;
            var arg = wx.getStorageSync('modalarg')?wx.getStorageSync('modalarg'):''
            var channel = wx.getStorageSync('channel')?wx.getStorageSync('channel'):''
            console.log('channel test')
            console.log(channel)
            wx.request({
                url: 'https://product.fishqc.com/Api/WeixinLogin/weiXinMini',
                data: {
                    code: logincode,
                    iv: iv,
                    encryptedData: encryptedData,
                    device_id:arg.deviceId,
                    abtest:'1',
                    is_login:0,
                    channel:channel

                },
                method: 'POST',
                header: {
                    'content-type': 'application/x-www-form-urlencoded' // 默认值
                },
                success: function (res) {

                }
            })
        }
    }
})

原文地址:https://www.cnblogs.com/antyhouse/p/9857871.html

时间: 2024-08-29 12:05:06

小程序原生js获取用户权限的相关文章

小程序中首次获取位置权限失败后,主动引导用户授权方案

最近做的"湖北垃圾治理"小程序 在初次进入监督举报页面后,会使用  wx.getLocation 调起用户的位置授权, 如果点击允许,则能在地图上显示当前定位:但是当用户点击取消后,就无法正常使用地图定位功能. 并且小程序会记录用户的这个授权设置,除了删除小程序再重新进入,否则位置权限就一直无法获得,地图一直无法定位. 因此我们需要主动引导用户给予位置权限.以下是代码: onLoad() { wx.getLocation({ type: "wgs84", succe

[小程序]微信小程序登陆并获取用户信息

1.小程序js端调用框架登陆API,获取到一个临时code,拿着这个code去调用自己的服务端接口 2.在自己的服务器端,使用app_id app_secrect code可以获取到用户的openid,这个id是用户唯一的id并且不会改变,可以把这个id返回给小程序端小程序端本地保存openid 3.获取用户信息很简单,并且不需要自己的服务器处理,只需要小程序端提供的API.前端页面wxml使用一个按钮,按钮里增加几个属性,就可以回调到小程序js部分的方法上,并且带着用户的个人信息,如昵称 头像

移动开发之【微信小程序】的原理与权限问题以及相关的简易教程

这几天圈子里到处都在传播着这样一个东西,微信公众平台提供了一种新的开放能力,开发者可以快速开发一个小程序,取名曰:微信公众平台-小程序 据说取代移动开发安卓和苹果,那这个东东究竟是干吗用的?但很多人觉得是网页版应用. 有的人很鸡冻,但是--最后文章会提及具体的权限开放问题,所以,还是保持一颗冷静的?比较好. 那我们先来看看组件和API开放了哪些服务: 视图容器:视图(View).滚动视图.Swiper 基础内容:图标.文本.进度条 表单组件:按钮.表单等等 操作反馈 导航 媒体组建:音频.图片.

【小程序+ thinkphp5】 获取微信运动数据

配置.请参看上篇文章.这里直接上代码 PHP 代码: //获取微信运动数据: public function test(){ $code = input("code"); $signature = input("signature"); //数据签名 $rawDate = $_GET['rawData']; //记住不应该用TP中的input方法,会过滤掉必要的数据 $encryptedData = $_GET['encryptedData']; //微信运动数据

小程序开发总结一:mpvue框架及与小程序原生的混搭开发

mpvue-native:小程序原生和mpvue代码共存 问题描述 mpvue和wepy等框架是在小程序出来一段时间之后才开始有的,所以会出现的问题有:需要兼容已有的老项目,有些场景对小程序的兼容要求特别高的时候需要用原生的方式开发 解决思路 mpvue的入口文件导入旧版路由配置文件 公共样式 字体图标迁移 app.wxss -> app.vue中less(mpvue的公共样式) 旧项目导入 旧项目(native)拷贝到dist打包的根目录 这个要注意的就是拷贝的旧项目不能覆盖mpvue打包文件

[技术博客] 微信小程序的formid获取

微信小程序的formid获取 formId的触发 微信小程序可以通过收集用户的formid,获取formid给用户主动推送微信消息.获取formid有两个途径,一个是触发一次表单提交,或者触发一次支付行为.如果要给用户主动推送模板消息,就需要拿到足够多的formid. 用表单的方法一定需要绑定bindsubmit,button的form-type设置为submit,在js代码中可以通过e.detail.formId 获取formId. 实例: <form bindsubmit="submi

小程序app.js小结

小程序app.js //app.js import { ApiUrl } from 'utils/apiurl.js'; import { httpReq } from 'utils/http.js'; //以上两个文件为封装的请求数据的接口,文件内容我会放在最后,不用这俩文件的可以安装wx.request(微信开发文档提供方法来请求),这两个文件也是在原方法上做了改动但效果一样的. App({ onLaunch: function () { var logs = wx.getStorageSy

微信小程序传值以及获取值方法

微信小程序传值以及获取值方法,传值有两种方法,对应也有获取值得方法, 1.设置id的方法标识跳转后传递的参数值: 2.通过使用data - xxxx 的方法来标识要传递的值 微信小程序设置id的方法标识来传值 在要跳转的item处,设置一个id并给当前的id赋值上对应的key值,比如一部电影的id(后面带着id去下一个页面查询,详细信息)如: 后我们在js的bindtap的响应事件中获取,并传递到下一个界面中: 获取到id传的值 通过e.currentTarget.id;获取设置的id值,并通过

微信小程序之动态获取元素宽高

我以前一直以为微信小程序不能动态获取view元素的宽高.但是自从看到: wx.createSelectorQuery() 这个api接口,以前的某些问题就能得到解决了... 那么,这个api接口怎么用呢? 首先,这个接口会返回一个对象实例. var obj=wx.createSelectorQuery(); 下面的就是返回的对象实例 obj 的所有内容. 返回的 obj 有五个方法: 1.  obj.in(component):没用过这个方法,多用于组件的选择器. 2.   obj.select