页面错误!请稍后再试_微信内嵌H5页面授权和分享

近期新上线项目,用到了微信授权获取用户信息和分享,掉坑无数次,遂写此篇,为后人指路

项目情况

技术选型

  • 项目语言:HTML、CSS、JavaScript
  • 项目框架:Vue.js
  • 项目搭建脚手架:vue-cli
  • 工程化工具:webpack、Npm
  • 源码管理:gitlab
  • 运行环境:WeChatBrowser
  • 第三方服务:微信JS-SDK

项目需求

  • 微信授权获取用户信息
  • 微信分享统计
  • 提交表单携带微信部分信息
以下技术实现方式和方案都是基于公众号已分配相关授权和权限的情况下,具体授权和权限申请请查看微信官方文档,此处不做赘述

微信授权(基于公众号的授权方案)

  • 目前网上大多分为两种方式去获取微信授权,一种是前端主导的微信授权,一种是server端主导的微信授权,两种方式实现的结果是一样的,具体采用何种方式可以根据自己项目情况去选择

授权方法

  • 客户端中转的授权方式

ecdd33241d4dbf6366467e28bc3ab8ad.png
  • 完全由服务端主导的授权方式

授权流程

  • 客户端中转的授权方式
    • 微信用户进入页面(动态网址需要提前向服务器端获取授权地址)
    • 客户端携带redirect_uri向微信服务器发起授权请求
    • 微信服务器授权成功会携带一个codeurl上返回
    • 客户端随即携带code向服务端发送请求
    • 服务端返回用户信息
  • 完全由服务端主导的授权方式

客户端中转的授权方式技术实现

  • 获取微信授权code
let redirectUri = encodeURI(window.location.href)
window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`
  • 携带code向服务器端获取用户授权
let code = getQuery(window.location.href).code
axios.get("/xxx/getWxInfo?code=" + code).then(res => {
    if (res && res.data && res.data.code == 10000) {
        this.userInfo = res.data.data
        //获取成功后将userInfo存储在cookie中方便其他页面使用
        //localstorge存储在微信端存在问题,建议使用cookie存储
        //后续会写篇文章专门讲解微信端cookie存储和localstorge存储
        setCookie('userInfo', this.userInfo);
    }else {
        alert('微信授权失败,请重新微信授权后打开文章', res.code)
    }
}).catch(error => {
    this.userInfo = ''
    alert('微信授权失败,请重新微信授权后打开', res.code)
    console.log('获取微信授权出错了', error)
})
  • 授权成功,此时已经拿到用户的微信的授权信息和个人信息

微信分享

分享流程

  • 获取微信分享授权
  • 自定义分享标题,分享摘要,分享图片,并写入微信配置(wx.config)
  • 调用分享接口(wx.ready)
  • 分享成功

微信分享技术实现

  • 微信分享是个频繁调用的方法,实现过程中可以抽象一下
//调用服务器端接口验证授权信息
function $setShare(options) {
    axios.get('/xxx/getWxSignature?url=' + encodeURIComponent(location.href.split('#')[0])).then(function(resp) {
        if (!resp || !resp.data || resp.data.code != 10000) { return }
        wx.config({
            // debug: true,// 开启debug模式
            appId: resp.data.data.appid,
            timestamp: resp.data.data.timestamp,
            nonceStr: resp.data.data.noncestr,
            signature: resp.data.data.signature,
            jsApiList: ["onMenuShareTimeline", "onMenuShareAppMessage"]
        });

        var shareTimeLineData = options || {
            title: '分享标题',
            desc: '分享摘要',
            link: '',
            imgUrl:'',
        };

        var shareAppData = options || {
            title: '分享标题',
            desc: '分享摘要',
            link: '',
            imgUrl:'',
        };
        wx.ready(function() {
            wx.onMenuShareAppMessage(shareAppData);
            wx.onMenuShareTimeline(shareTimeLineData);
        });
        wx.error(function(res){
            console.log('分享签证失败', res)
        });
    },function(err){
        if (err) {
            alert(err);
        }else{
            alert('网络错误,请稍后重试!');
        }
    });
}
  • 调用分享代码实现
let shareWxData = {
     title: '测试微信分享标题',
    desc: '测试微信分享摘要',
    link: window.location.href,
    imgUrl: 'xxxxxxx',
    success: function(res) {
        // 这是微信分享的回调
        // 注意这个地方并不是用户分享成功的回调,而是用户点击了分享的回调,微信现有版本不会告知开发者用户是否分享成功
    }
}
$setWxShare(shareWxData)

作者:

轻易科技研发中心-前端部-张晓斌

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
V6.0.7版本发布,本版本主要针对上个版本做了一些路由修正,还意外收获了一些性能提升,是一个建议更新的版本。主要更新 修正Validate类的PHP8兼容性 改进redis驱动的append方法 修正路由匹配检测问题 优化路由变量正则规则生成 改进responseView的内容渲染 安装和更新 V6版本开始仅支持Composer安装及更新,支持上个版本的无缝更新,直接使用composer update 更新到最新版本即可。如果需要全新安装,使用:composer create-project topthink/think tpThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。全面的WEB开发特性支持最新的ThinkPHP为WEB应用开发提供了强有力的支持,这些支持包括:MVC支持-基于多层模型(M)、视图(V)、控制器(C)的设计模式ORM支持-提供了全功能和高性能的ORM支持,支持大部分数据库模板引擎支持-内置了高性能的基于标签库和XML标签的编译型模板引擎RESTFul支持-通过REST控制器扩展提供了RESTFul支持,为你打造全新的URL设计和访问体验云平台支持-提供了对新浪SAE平台和百度BAE平台的强力支持,具备“横跨性”和“平滑性”,支持本地化开发和调试以及部署切换,让你轻松过渡,打造全新的开发体验。CLI支持-支持基于命令行的应用开发RPC支持-提供包括PHPRpc、HProse、jsonRPC和Yar在内远程调用解决方案MongoDb支持-提供NoSQL的支持缓存支持-提供了包括文件、数据库、Memcache、Xcache、Redis等多种类型的缓存支持安全性框架在系统层面提供了众多的安全特性,确保你的网站和产品安全无忧。这些特性包括:XSS安全防护表单自动验证强制数据类型转换输入数据过滤表单令牌验证防SQL注入图像上传检测
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值