uni-app开发H5应用中实现第三方微信授权登录的完整指南

2026-02-08 0 773

初涉uniapp开发H5项目微信授权登录对不少开发者来说是个难题。我最近也尝试了这个项目,第一次操作微信授权登录,过程中遇到了不少挑战,有很多心得体会想要和大家交流。

初次接触的困境

在着手开发项目时,一听说要实现微信授权登录,我顿时感到有些棘手。毕竟,在此之前我对此一无所知,要在uni-app开发的H5项目中融入这一功能,感觉像是无头苍蝇。微信授权登录涉及诸多参数和流程,每种授权方式都有其独特之处。尽管如此,项目进度不能拖延,我只能硬着头皮去深入探究。那时我就暗自下定决心,一旦成功实现,一定要将所学经验分享给大家。

在着手探究微信授权登录的具体操作步骤之前,我内心颇感不安,生怕自己无法掌握这个看似繁复的功能。然而,坚信自己能够逐步找到解决方法,我便开始仔细研读官方发布的资料。

onLoad(e) {
    let code = this.getUrlCode(\'code\')
    console.log(code)
    if(code !== null || code !== \"\") {
        this.getOpenidAndUserinfo(code)
    }
},

微信授权方式

// 获取code
    // 先判断url中有没有code,如果有code,表明已经授权,如果没有code,跳转微信授权链接
    getCode () {
        if(isWechat()) {
            // 截取地址中的code,如果没有code就去微信授权,如果已经获取到code了就直接把code传给后台获取openId
            let code = this.getUrlCode(\'code\')
            if (code === null || code === \'\') {
                window.location.href = \'https://open.weixin.qq.com/connect/oauth2/authorize?appid=\'+appid+\'&redirect_uri=\' + encodeURIComponent(\'http://127.0.0.1/pages/views/profile/login/login\') + \'&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect\'
                // redirect_uri是授权成功后,跳转的url地址,微信会帮我们跳转到该链接,并且通过?的形式拼接code,这里需要用encodeURIComponent对链接进行处理。
                // 如果配置参数一一对应,那么此时已经通过回调地址刷新页面后,你就会再地址栏中看到code了。
                // http://127.0.0.1/pages/views/profile/login/login?code=001BWV4J1lRzz00H4J1J1vRE4J1BWV4q&state=1
            }
        }
    },
    
    getUrlCode (name) {
        return decodeURIComponent((new RegExp(\'[?|&]\' + name + \'=\' + \'([^&;]+?)(&|#|;|$)\').exec(location.href) || [, \'\'])[1].replace(/+/g, \'%20\')) || null
    },
    
    const isWechat = () => {
        return String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === \"micromessenger\";
    }

微信授权主要有两种形式值得注意。第一种是静默授权,它的权限范围有特定设定。这种方式不会出现授权窗口,仅能获取用户的部分信息。第二种是非静默授权,其权限配置则有所不同。这种方式会有授权窗口弹出,且需用户手动点击确认授权。虽然如此,这种方式可以获取到用户更多的信息,比如昵称、头像、性别等。这两种授权方式适用的场合各异,在项目中需根据实际需求来选择启用哪一种。

某些项目不需要收集过多用户信息,对用户使用体验的干扰应尽量减少,可能就会采用静默授权方式。然而,对于社交或互动性较强的项目,可能就需要非静默授权来搜集更多用户数据,以便为用户提供更加个性化的服务。

授权流程第一步

加载页面初期,必须进行一个重要判断。得确认是否存在code。授权一旦成功,页面会自动刷新。若此时出现code,应立即将其传递至后台服务器。这一步骤,代码逻辑必须严谨。记得我操作时,差点忽略了这一判断,若遗漏,后续功能可能会受到影响。

从技术实现上讲,编写这段判断代码并不复杂。然而,要确保其精确无误。此外,还需确保每次页面加载时,无论是初次还是授权成功后的刷新,这个判断都能正常工作。

引导用户授权

uni-app开发H5应用中实现第三方微信授权登录的完整指南

确保用户顺利进入授权页面并同意授权以获取code是关键环节。为此,我们需提供明确的指引,否则用户可能对操作步骤感到困惑。在我负责的项目中,我精心设计了简洁易懂的提示语,帮助用户明白授权的必要性。同时,在页面布局上,我也特别突出了授权入口的位置。

若引导不当,用户可能会放弃授权,进而使项目流程受阻。务必保证用户能顺畅地进入授权页面执行操作。这一环节对用户体验至关重要,处理得当能增强用户对项目的正面印象。

uni-app开发H5应用中实现第三方微信授权登录的完整指南

参数的重要性

uni-app开发H5应用中实现第三方微信授权登录的完整指南

这里有许多参数是不可或缺的。比如appid,它是公众号的独有标识,没有它,授权过程就无法进行。另外,授权后的回调链接地址也需要经过特定处理。返回类型必须准确填写为code。scope,正如之前所述,它决定了授权方式。而state参数,在重定向后也会被带上,同样不能遗漏,开发者可以在规定的参数值范围内进行填写。

getOpenidAndUserinfo(code) {
    uni.request({
        url: \'http://127.0.0.1/api/wxLogin?code=\'+code+\'&state=state&appid=\'+appid,
        success: (res) => {
            console.log(\'通过code获取openid和accessToken\', res)
            if(res.data.code === 200) {
                // 登录成功,可以将用户信息和token保存到缓存中
                uni.setStorageSync(\'userInfo\', res.data.result.userInfo)
                uni.setStorageSync(\'token\', res.data.result.token)
            }
        }
    })

每个参数都如同拼图的一部分,少了哪一块,整个拼图就无法完整。同时,在填写这些参数时,必须认真核对,稍有差错,调试过程将会变得非常耗时。

处理后台返回数据

{
    code: 200
    message: \"登录成功\"
    result: {
        token: \"54f663ca-45d4-4758-97a7-f727b942c09a\"
        userInfo: {
            avatar: \"http://thirdwx.qlogo.cn/mmopen/vi_32/MXuWgYbeVv5icyS4XBz28vpdh4iaRJAP3WYQ2uHMBUFcjvcHwykZ5wYPJG4CibJGAMv73n813vypau7Rs4iaA1uiaIw/132\",
            nickName: \"Allen\",
            sex: 2,
            openid: \"oPSEKwuzvwfZ5NEHhn9FBMJrNXpM\",
            unionid: \"o_ra9t3byZL5dMG1M-p2xOBFRAyc\",
        }
    }
}

前端获取的后台数据有特定要求。这些数据中包括用户的头像,头像旁边附有不同尺寸的标签。用户的性别也用特定的数字来表示。用户的唯一标识信息同样包含在内。在我负责的项目中,对这些数据进行了妥善的处理。同时,还要考虑到用户更换头像后,旧的头像链接可能失效的问题。

依据不同数据资料,对项目内的用户展示计划进行相应调整。例如,头像的尺寸会根据页面的布局来适当调整。性别信息则可用于某些个性化内容的推荐。

在开发过程中,你是否遇到过类似微信授权登录那样,初次接触感觉颇为棘手的功能?欢迎点赞和转发这篇文章,同时,我也期待大家在评论区分享你们的经验和观点。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 uni-app开发H5应用中实现第三方微信授权登录的完整指南 https://www.zuozi.net/78606.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务