导航菜单

更新日志

2023年11月1日蜻蜓C影视追剧系统v1.2.2更新-与时俱进调整微信登录授权获取方式-修复无法登陆授权

2023年11月1日蜻蜓C影视追剧系统v1.2.2更新-与时俱进调整微信登录授权获取方式-修复无法登陆授权

问题背景:

小程序用户头像昵称获取规则调整公告官方
微信团队2022-05-09
更新时间:2022年11月9日

由于 PC/macOS 平台「头像昵称填写能力」存在兼容性问题,对于来自低于2.27.1版本的访问,小程序通过 wx.getUserProfile 接口将正常返回用户头像昵称,插件通过 wx.getUserInfo 接口将正常返回用户头像昵称。

更新时间:2022年9月28日

考虑到近期开发者对小程序用户头像昵称获取规则调整的相关反馈,平台将接口回收的截止时间由2022年10月25日延期至2022年11月8日24时。

调整背景

在小程序内,开发者可以通过 wx.login 接口直接获取用户的 openId 与 unionId 信息,实现微信身份登录,支持开发者在多个小程序或其它应用间匿名关联同一用户。

同时,为了满足部分小程序业务中需要创建用户的昵称与头像的诉求,平台提供了 wx.getUserProfile 接口,支持在用户授权的前提下,快速使用自己的微信昵称头像。

但实践中发现有部分小程序,在用户刚打开小程序时就要求收集用户的微信昵称头像,或者在支付前等不合理路径上要求授权。如果用户拒绝授权,则无法使用小程序或相关功能。在已经获取用户的 openId 与 unionId 信息情况下,用户的微信昵称与头像并不是用户使用小程序的必要条件。为减少此类不合理的强迫授权情况,作出如下调整。

蜻蜓c系统最后一次调整是2022年10月19日更新,因此完美中招遇到此问题,此问题排查了不少时间才发现原来是官方问题造成的,开始排查的时候很莫名其妙,本更新以此记录。

更新日志

·修复微信小程序接口权限由于政策调整导致整个小程序无法正常使用的bug
·增加手动强制上传微信头像,获取微信昵称
·额外新增头像管理页面
·调整绑定用户手机号的步骤在微信获取授权这步

截图

本次更新前端相关文件

主要更新内容,其他细节内容忽略

            }44    44            },45    45               watch: {46                            status: function (newData, oldData) {47                                

    46                        status: function (newData, oldData) {            

48    47                           if(newData==true){49    48                                this.getUserWxHead();50    49                           }


    @@ -74,7 +73,22 @@74    73                        uni.setStorageSync('user', res.data.data.user)75    74                        let startTime = new Date().getTime()76    75                        uni.setStorageSync('validity', startTime);77                            this.getModifyuserinfo(this.avatarUrl,this.nickName);    76                        // uni.navigateTo({

    77                        //     url: '/pages/uploadHeader/index'   

    78                        // });

    79                            if(res.data.data.user.hasOwnProperty('nickname')==false){    80                                uni.navigateTo({    81                                    url: '/pages/uploadHeader/index'   

    82                                });    83                                return;    84                            }    85                        if(res.data.data.user.nickname=='微信用户' || res.data.data.user.nickname=='' ){    86                            uni.navigateTo({    87                                url: '/pages/uploadHeader/index'   

    88                            });    89                        }    90                

    91                        // this.getModifyuserinfo(this.avatarUrl,this.nickName);78    92                              this.$emit("update",'')79    93                    })80    94                },


    @@ -97,6 +111,7 @@97    111                },98    112                // 获取微信用户头像99    113                getUserWxHead() {    114                     console.log(222)  

100    115                    let that = this101    116                    uni.showModal({102    117                        title: '温馨提示',
复制<template>

    2        <view class="body">

    3            <view class="body-top">

    4                <view class="item">

    5                    <text>

    6                        账号名称

    7                    </text>

    8                    <view class="item-name">

    9                         <input class="input-name" type="nickname" maxlength="16" minlength="2" v-model="nickName"

    10                            @change="inputWord" placeholder="点击获取昵称" />

    11                        <image class="my_back" src="./static/back.png"></image>

    12                    </view>

    13                </view>

    14                <view class="divider"></view>

    15                <view class="item">

    16                    <text>

    17                        头像设置

    18                    </text>

    19                    <view class="item-xq">

    20                        <button class="my_txImg1" open-type="chooseAvatar" @chooseavatar="onChooseAvatar" plain="true" style="display: flex; justify-items: center;">

    21                            <view v-if="avatarUrl">    <image class="my_txImg" :src="avatarUrl"></image></view>

    22                            <view v-else  style="font-size: 14px;"> 点击上传图片</view>

    23                        

    24                        </button>

    25                        <image class="my_back" src="./static/back.png"></image>

    26                    </view>

    27                </view>

    28            </view>

    29     

    30        </view>

    31    </template>

    32    

    33    <script>

    34        import {    35        getModifyuserinfo,    36        getnewUpload    37        } from '@/api/login.js';    38        export default {    39            data() {    40                return {    41                    BASE_URL: getApp().globalData.BASE_URL,    42                    userInfo: uni.getStorageSync("userInfo"),    43                    nickName: uni.getStorageSync("userInfo").nickName,    44                    avatarUrl: uni.getStorageSync("userInfo").avatarUrl,    45                };    46            },    47            methods: {    48                base64(url, type) {    49                  return new Promise((resolve, reject) => {    50                    wx.getFileSystemManager().readFile({    51                      filePath: url, //选择图片返回的相对路径

    52                      encoding: 'base64', //编码格式

    53                      success: res => {    54                        // resolve('data:image/' + type.toLocaleLowerCase() + ';base64,' + res.data)

    55                        resolve("data:image/jpg" +";base64,"+res.data)    56                      },    57                      fail: res => reject(res.errMsg)    58                    })    59                  })    60                },    61            

    62                // 清除登录

    63                exit() {    64                    uni.showModal({    65                        title: "提示",    66                        content: "确定要退出登录吗?",    67                        cancelText: "取消",    68                        confirmText: "确定",    69                        success: (res) => {    70                            if (res.confirm) {    71                                uni.clearStorageSync();    72                                uni.reLaunch({    73                                    url: "../index/index",    74                                });    75                            }    76                        },    77                    });    78                },    79                onChooseAvatar(e) {    80                    this.avatarUrl= e.detail.avatarUrl    81                    if(this.nickName=='' || this.nickName==undefined){    82                        uni.showToast({    83                            title: '请先点击获取昵称',    84                            duration: 2000,    85                            icon:"none",    86                            mask: true,    87                        });    88                        return;    89                    }    90                    this.base64(this.avatarUrl).then(rest=>{    91                        var data={    92                            image:rest    93                        }    94                        getnewUpload(data).then(res=>{    95                                var data={    96                                         avatar: res.data.data.image_url,    97                                         nickname:this.nickName    98                                }    99                                 getModifyuserinfo(data).then(res=>{    100                                                 if(res.data.code==200){    101                                    

    102                                                    uni.setStorageSync('user', res.data.data)    103                                                    uni.navigateBack({    104                                                            delta:1,//返回层数,2则上上页

    105                                        })    106                                       }    107                                 })    108                        })    109                            

    110                        

    111                    })    112            

    113                },    114                

    115                inputWord(e) {    116                    this.nickName = e.detail.value    117                                    let str = this.nickName.trim();    118                            //         if(str.length==0){

    119                            //             uni.showToast({

    120                            //                 title: '请输入合法的昵称',

    121                            //                 duration: 2000,

    122                            //                 icon:"none",

    123                            //                 mask: true,

    124                            //             });

    125                            //   return

    126                            // }

    127                        if((/[^/a-zA-Z0-9\u4E00-\u9FA5]/g).test(str)){    128                            uni.showToast({    129                                title: '请输入中英文和数字',    130                                duration: 2000,    131                                icon:"none",    132                                mask: true,    133                            });    134                        return

    135                        }    136                    setTimeout(() => {    137                        if(this.nickName == e.detail.value){    138                            console.log('this.nickName',this.nickName.trim())    139                            this.userInfo.nickName = this.nickName.trim()    140                            uni.showModal({    141                                title: "提示",    142                                content: "确定修改昵称为:"+this.nickName+"?",    143                                cancelText: "取消",    144                                confirmText: "确定",    145                                success: (res) => {    146                                    if(res.confirm){    147                                        this.updateUserInfo()    148                                    }    149                                },    150                            });    151                        }    152                    }, 2000)    153                },    154                

    155                /* 上传 头像 转 话格式*/

    156                uploadFile(){    157                    console.log('上传图片',this.avatarUrl)    158                    uni.uploadFile({    159                        url: this.BASE_URL + '/put-file', //服务器地址

    160                        filePath: this.avatarUrl, //这个就是我们上面拍照返回或者先中照片返回的数组

    161                        name: 'file',    162                        formData: {    163                            'user': 'test'

    164                        },    165                        header: {    166                            'Authorization': 'Basic d2VjaGF0OndlY2hhdF9zZWNyZXQ',    167                            'Blade-Auth': 'bearer ' + uni.getStorageSync('token')    168                        },    169                        success: (uploadFileRes) => {    170                            let json = JSON.parse(uploadFileRes.data)    171                            console.log('json',json)    172                            this.avatarUrl = json.data.link    173                                                    this.userInfo.avatarUrl = this.avatarUrl    174                                                    // uni.setStorageSync('userInfo', this.userInfo)

    175                            this.updateUserInfo();    176                            setTimeout(function() {    177                                uni.hideLoading();    178                            }, 1000);    179                        },    180                        fail: e => {    181                                                uni.showToast({    182                                                    title: '上传失败',    183                                                    duration: 2000,    184                                                    icon:"error",    185                                                    mask: true,    186                                                });    187                        }    188                    });    189                },    190                

    191                updateUserInfo(){    192                 

    193                    console.log( this.avatarUrl,this.nickName.trim())    194                    uni.request({    195                        url: this.BASE_URL + "/wechatuser/update",    196                        method: "POST",    197                        data: this.userInfo,    198                        header: {    199                            Authorization: "Basic d2VjaGF0OndlY2hhdF9zZWNyZXQ",    200                            "Blade-Auth": "bearer " + uni.getStorageSync("token"),    201                        },    202                        success(res) {    203                                            uni.showToast({    204                                                title: '修改成功',    205                                                duration: 2000,    206                                                mask: true,    207                                            });    208                        }    209                    })    210                },    211            }    212        }    213    </script>

    214    

    215    <style lang="scss">

    216        button[plain] {    217            border: 0

    218        }    219        .body-top{    220            margin: 20rpx 20rpx 0rpx 20rpx;    221            background-color: #FFF;    222            border-radius: 20rpx;    223            padding-bottom: 20rpx;    224            display: flex;    225            flex-direction: column;    226        }    227        .item{    228            margin: 20rpx 20rpx 20rpx 20rpx;    229            min-height: 70rpx;    230            display: flex;    231            flex-direction: row;    232            justify-content: space-between;    233            align-items: center;    234            font-size: 28rpx;    235        }    236        .item-name{    237            min-height: 70rpx;    238            display: flex;    239            flex-direction: row;    240            align-items: center;    241            font-size: 28rpx;    242            text-align: end;    243        }    244        .input-name{    245            margin-right: 10rpx;    246            text-align: end;    247        }    248        .item-xq{    249            display: flex;    250            flex-direction: row;    251            align-items: center;    252        }    253        .my_txImg1{    254            height: 140rpx;    255            background-color: #FFF;    256            // border-radius: 50%;    257        }    258        .my_txImg{    259            width: 140rpx;    260            height: 140rpx;    261            border-radius: 50%;    262        }    263        .my_back {    264            width: 19rpx;    265            height: 24rpx;    266            

    267        }    268        .divider{    269            background: #E0E3DA;    270            width: 95%;    271            height: 2rpx;    272            margin-left: 20rpx;    273        }    274        .exit {    275            width: 590rpx;    276            height: 80rpx;    277            display: flex;    278            align-items: center;    279            justify-content: center;    280            margin: 0 auto;    281            // border: 1rpx rgba($color: #000000, $alpha: 0.1) solid;    282            background-color: #FA5F4A;    283            position: absolute;    284            color: #fff;    285            border-radius: 20rpx;    286            // box-shadow: 0rpx 0rpx 9rpx rgba($color: #000000, $alpha: 0.1);    287            bottom: 100rpx;    288            margin-left: 80rpx;    289        }    290    </style>

本次更新服务端相关文件

内容过多本次略

本次更新后台管理相关文件

内容过多本次略

本次数据库结构改动

内容过多本次略