浙江政务服务网(含单点登录、mgop、zwlog埋点)对接流程

首先由业主单位在IRS平台上注册申请应用,等审批通过后,会给开发商提供开发商账号,使用开发商账号登录IRS平台,就可以进行应用的接口申请和部署了。

一、API接口注册

在IRS平台API管理界面中,新建API,设置生产环境、测试环境的服务地址,GET/POST类型,以及入参和出参。(我司没有定义入参和出参,仅通过在header中增加特定参数,然后通过网关转发api请求。)

注册成功之后,可以进行在线调试,按接口参数定义规则,传入相应参数,调试获取结果。调试成功后,需要上线接口,这样才可以在页面中调用该接口。

备注:经钉钉技术答疑群中相关人员确认,应用可不使用在IRS平台上定义的接口,并自行实现接口并调用后端服务,没有强制规定一定要在IRS上定义API并调用。

二、mgop使用

技术对接文档中已经给出了mgop的基本使用方法,我们要做的就是对mgop进行二次封装,方便使用。

import { mgop } from '@aligov/jssdk-mgop';
const request = function (config) {return new Promise((resolve, reject) => {mgop({api: 'mgop.xxxx.xxxx.xxxxApi', //IRS平台定义的api接口host: 'https://mapi.zjzwfw.gov.cn/', // 固定地址dataType: 'JSON',type: config.mgopApi == 'image' ? 'GET' : 'POST',appKey: 'xxxxxx', // 在IRS平台可获取到header: {'xxxx': 'xxxx', //后端服务所需的请求头参数,可以有多个isTestUrl: '1' //测试环境必填,否则请求的是生产环境地址;},data: config.params ? config.params : '', //请求体参数onSuccess: (data) => {console.log('data', data);resolve(data.data);},onFail: (err) => {console.log(err, 'err');}});});
};
export default request;

使用mgop无法进行本地调试,会出现跨域错误,只能将代码上传到IRS平台上,然后会得到测试地址,通过测试地址查看接口返回值。 

备注:如果请求头中没有添加isTestUrl参数,则将连接生产环境后端地址。

三、政务网header和footer的引入

按照官方技术文档,在index.html中引入头部js尾部js,页面中将自动显示政务网的头部和底部,包含无障碍、长辈版等硬性上线要求,无需额外功能开发。

备注:本地环境下头部城市切换、无障碍功能不可用,涉及到相关请求接口跨域,发布IRS平台后,即可正常使用。

 1. 长辈版样式修改

切换长辈版的原理是,点击长辈版按钮时,会在在index.html的body标签上增加一个类名,类名可以使用政务网的类名zjzwOLD,也可以自定义类名,内部页面的长辈版样式,可以写在.zjzwOLD下。

长辈版切换触发类名修改的方法(技术文档中已提供):

        <script>function zoomin1() {// 在此处添加进入老年版方法localStorage.setItem('mode', '2');_setCookiemode('2');// 添加类名,切换按钮$('body').addClass('elder'); // 自定义类名$('body').addClass('zjzwOLD'); //政务网类名$('.zoomin').css('display', 'none');$('.zoomout').css('display', 'block');// 自定义的操作}function zoomout1() {// 在此处添加进入标准版方法localStorage.removeItem('mode', '');_setCookiemode('');// 删除类名,切换按钮$('body').removeClass('elder'); // 自定义类名$('body').removeClass('zjzwOLD'); //政务网类名$('.zoomout').css('display', 'none');$('.zoomin').css('display', 'block');// 自定义的操作}$('.zoomin').click(function () {zoomin1();});$('.zoomout').click(function () {zoomout1();});// 页面初始化调用方法getCookieMode(function (res) {if (res.data.mode == '2') {zoomin1();} else {zoomout1();}});</script>

 2.页面标签设置

<meta name="SiteName" content="浙江省人民政府 浙江政务服务网 IRS上的平台名称" /><meta name="SiteDomain" content="zwfw.zj.gov.cn,zjzwfw.gov.cn,mapi.zjzwfw.gov.cn" /><meta name="SiteIDCode" content="3300000069" />

SiteName的值,最后一个要写IRS上你的应用的名字,写其它的会被驳回。

四、单点登录

1.首先由业主单位在IRS上申请单点登录组件。

2.在前端页面中定义好单点登录回调路由地址,用于获取政务网登录成功后返回的回调信息。

3.将前端代码上传到IRS平台后,需要提交审核,提交审核后,会拿到生产环境的前端页面访问地址,将此地址下的完整回调页面地址发给业主,由业主将回调地址提交申请,用于政务网登录成功后携带参数跳转到此回调地址。申请通过后,会得到一个appId,用于前端页面跳转到政务网登录页。

4.单点登录跳转示例:

公共登录地址是:

https://portal.zjzwfw.gov.cn/uc/sso/login?appId=xxxxxxx&sp=/xxxxxxxx&userType=xxxxxxx

其中appId是业主将回调地址提交申请审核通过后,得到的appId,不是IRS平台上的appId,切记。

sp参数可传可不传,该参数会在政务网登录成功后,做为返回参数放在回调地址上。我们一般用来做为应用内单点登录成功后的页面跳转地址。

userType参数的值有两个:person和legal(个人和法人)

用户在政务网登录成功后,会自动跳转到回调地址页面,并在url地址上携带ticketId和sp参数。后端同学需要使用这个ticketId获取政务网上登录人信息,完成应用内的单点登录。

回调地址示例:

http://www.baidu.com/call/back?sp=xxxxxxx&ticketId=xxxxxxx

 上面的http://www.baidu.com/call/back就是我们上一步我们提供给业主的完整回调地址。redirectUrl是我们跳转政务网登录页时传入的sp参数,ticketId是政务网登录成功后返回的值。

注意:跳转到政务网登录地址的时候,我们如果传入了sp参数,在登录成功返回到回调地址的时候,该参数的键值变成了redirectUrl。取值时不要取错

五、埋点

1.首先需要在index.html中引入zwlog.js链接地址

2.由于埋点要求每个页面都要上报埋点信息,所以将埋点功能的调用放在了App.vue中,监听路由变化,当路由变化时发送埋点信息。

3.经与技术人员核实,可以仅在登录情况下发送埋点数据,未登录情况下可不发送。

4.使用方式(核心代码):

let _this = this;
this.zwlog = new ZwLog({_user_id: userId, //登录用户id(政务网返回)_user_nick: userNick //登录用户昵称(政务网返回)});this.$nextTick(() => {this.zwlog.onReady(function () {let params = {miniapp_start: '$$miniapp_start',//固定值page_start: '$$page_start', //固定值t2: Time2, //页面启动到加载完成的时间t0: Time0, //页面启动到页面响应完成的时间userType: 'legal', //或personminiAppId:'xxxxx', //IRS上appIdminiAppName: 'xxxxxx', //IRS上应用名称pageId: 'xxxx', //页面id,可以取当前路由pathpageName: 'xxxx',//页面名称,可以取当前路由名称_user_id: 'xxxxx', //当前登录人idminiapp_first_user: 'first_user' //如果用户是首次使用该应用,则传入,否则不传}_this.zwlog.sendPV(params);
})
})

关于t2和t0的计算方法: 

在mounted中获取当前时间,做为页面开始加载时间time1,在watch路由变化时获取当前时间time2,将time2-time1的值做为页面启动到加载完成的时间。但是,该算法仅在页面整体首次加载时有效,因为vue页面除首次加载,之后在切换路由时,页面加载时间可视为0.因此,t2的值在非首次加载时,直接设置为0即可。

t0的算法,在上面nextTick中获取当前时间time3,当页面是首次加载时,t0=time3-time1,当页面是非首次加载时,t0=time3-time2

最终单位要转换成秒

六、其它审核相关内容

1.跳转到政务服务网之外的第三方链接,在跳转之前要有弹窗提醒。技术群中有相关人员答复,原则上不允许跳转到站外地址。但没有明确禁止。

2.长辈版模式下,字体不得小于18px。

3.审核流程

业主单位要先进行内部审核,内部审核通过之后才会提交到浙里办。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/828356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yolov5 C3改进|深度可分离卷积轻量化主干

一、深度可分离卷积代码 import torch import torch.nn as nnclass DP_Conv(nn.Module):def __init__(self, c1, c2, k1, s1, pNone, g1, actTrue): # ch_in, ch_out, kernel, stride, padding, groupssuper(DP_Conv, self).__init__()self.conv nn.Conv2d(c1, c1, kernel_s…

速度进来!看看这两年热门的MongoDB数据库!

速度进来&#xff01;看看这两年热门的MongoDB数据库&#xff01; MongoDB是一个基于分布式文件存储的开源NoSQL数据库&#xff0c;它采用了文档型数据模型&#xff0c;可以存储比较复杂的数据类型&#xff0c;如数组、嵌套文档等。MongoDB具有高性能、高可用性、自动扩展等特…

百篇博客 · 千里之行

时光荏苒流逝&#xff0c;白驹匆匆过隙&#xff0c;不知不觉间&#xff0c;Damon小智已经在CSDN上记录了第一百多篇文章。恰逢128天创作纪念日的此刻&#xff0c;我感慨良多&#xff0c;这百余篇博客不仅是我的创作历程&#xff0c;更见证了我在这五年技术生涯中走过心路历程。…

算法学习001-圆桌问题 中小学算法思维学习 信奥算法解析 c++实现

目录 算法学习001-圆桌问题 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 算法学习001-圆桌问题 一、题目要求 1、编程实现 圆桌边围坐着2n个人&#xff0c;其中n个人是好人&#xff0c…

GitLab 卸载步骤 - 完全卸载

说明 本文介绍一下 gitlab 服务器的卸载步骤。 服务器 &#xff1a; Centos7。停止服务 gitlab-ctl stop卸载 rpm 软件 rpm -e gitlab-ce 查看进程 ps -ef | grep gitlab 干掉第一个 runsvdir -P /opt/gitlab/service log 进程删除 gitlab 残余的文件 find / -name *git…

启明云端新品WT99C262-SG LoRa开发板,搭配WT32-ETH0X实现LoRa/WiFi/蓝牙转以太网

WT99C262-SG系列开发板是启明云端推出的一款基于WTLRC262-SG系列模组的开发板。板上搭载的模组支持Wi-FiBLELoRa功能&#xff0c;且模组大部分管脚均已引出至两侧排针&#xff0c;开发人员可根据实际需求&#xff0c;通过跳线连接多种外围设备&#xff0c;也可将开发板插在面包…

Pytorch或Tensorflow 深度学习库安装 (简易版)

Tensorflow 2.X安装 0、 pytorch 支持 conda虚拟环境 cuda 和 cudnn1、创建conda环境2、测试GPU是否可用3、在机器上安装cuda 和 cudnnCUDA 安装cudnn 安装 0、 pytorch 支持 conda虚拟环境 cuda 和 cudnn 如果只用pytorch&#xff0c; 只需在虚拟环境安装cuda 和 cudnn即可&am…

第27天:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

第二十七天 一、TP框架-开发-路由访问&数据库&文件上传&MVC模型 1.TP框架-开发-配置架构&路由&MVC模型 参考&#xff1a;https://www.kancloud.cn/manual/thinkphp5_1 配置架构-导入使用路由访问-URL访问数据库操作-应用对象文件上传操作-应用对象前端页…

web-traffic-generator:一款功能强大的HTTP和HTTPs流量混淆工具

关于web-traffic-generator web-traffic-generator是一款功能强大的HTTP和HTTPs流量混淆工具&#xff0c;该工具基于纯Python开发&#xff0c;可以帮助广大研究人员在HTTP或HTTPs网络流量中提添加噪声&#xff0c;以此来实现流量混淆的目的。 本质上来说&#xff0c;web-traff…

Linux编译和NXP官方系统移植

文章目录 一、Linux安装环境配置二、Linux编译流程三、单个.dtb文件编译方法1.修改顶层makefile2.编译设备树文件3.验证 四、NXP官方Linux系统移植1.将NXP官方Linux系统导入到Ubuntu系统中2.解压系统3.编译系统4.验证5.在NXP官方系统中添加自己的板子 五、 CPU 主频和网络驱动修…

APT(Advanced Persistent Threat)

APT&#xff08;Advanced Persistent Threat&#xff09;&#xff0c;即高级持续性威胁&#xff0c;是一种精心策划、针对特定目标的网络攻击形式。APT攻击的特点包括&#xff1a; 针对性强&#xff1a;APT攻击有明确的目标&#xff0c;通常锁定政府机构、国防部门、金融机构或…

关于mysql存储过程示例-手动事务-循环-日志

CREATE DEFINERroot% PROCEDURE RTX_RECEIPT_INSPECT_DATA() BEGIN-- 声明变量DECLARE RESULT_CODE INT DEFAULT FALSE; -- 默认falseDECLARE done INT DEFAULT FALSE; -- 默认falseDECLARE log_message TEXT;DECLARE V_COUNT INT;DECLARE V_QCREQUIRED VARCHAR(10);-- 收货需质…

C++ | Leetcode C++题解之第49题字母异位词分组

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {// 自定义对 array<int, 26> 类型的哈希函数auto arrayHash [fn hash<int>{}] (const array<int, 26>&…

对浅拷贝的理解

问题背景 我之前一直以为浅拷贝出来的新对象和旧对象的引用地址是相同的&#xff0c;但是通过Object和发现浅拷贝的新对象和旧对象的引用地址不同&#xff01;&#xff01; const obj1 { name: "Alice", test: { age: 12 } };const obj4 Object.assign({}, obj1);…

2、选择什么样的机器人本体

如果说世界是物质的&#xff0c;那么应该先制造出机器人的本体&#xff0c;再让她产生灵魂。如果是精神的呢&#xff0c;世界是无中生有的呢&#xff0c;那就先在仿真中研究算法吧。 而我比较崇尚初中哲学的一句话&#xff0c;世界是物质的&#xff0c;物质是运动的&am…

淘宝电商数据API接口

淘宝电商数据API接口&#xff1a;解锁商业智能&#xff0c;助您决策无忧 点击获取数据 在数字化浪潮席卷全球的今天&#xff0c;电商行业早已不再满足于传统的经营模式。随着大数据、人工智能等技术的飞速发展&#xff0c;电商数据成为了企业决策的重要依据。淘宝电商数据API…

【Vue】自定义事件实现组件之间的通信(案例讲解)

一、前言 这是部分哔哩哔哩上跟着一个博主【遇见狂神说】学习的&#xff0c;当然自己也是才开始学习的vue&#xff0c;在学到这个Vue的自定义事件的时候&#xff0c;虽然知识点很绕&#xff0c;但是在理解后又觉得很意思&#xff0c;觉得Vue真的很强大。这里博主将自己学习到的…

浅谈——“总线系统”

系统总线&#xff1a;三总线系统 数据总线&#xff1a; CPU与内存或其他器件之间的数据传送的通道&#xff0c;决定了CPU和外界的数据传送速度。 每条传输线一次只能传输1位二进制数据。 例如&#xff1a;8根数据线一次可传送一个8位二进制数据&#xff08;即一个字节&#xff…

Python 二叉树的基本操作实现

在Python中实现二叉树的基本操作通常涉及以下步骤&#xff1a; 定义二叉树节点&#xff1a;创建一个类来表示二叉树的节点&#xff0c;通常包含一个数据属性和指向左右子节点的指针。 创建二叉树&#xff1a;允许用户输入数据来构建二叉树。 遍历二叉树&#xff1a;实现前序、…

解释PostgreSQL中的MVCC(多版本并发控制)机制是如何工作的?

文章目录 MVCC的工作原理1. 数据行版本化2. 事务ID和可见性3. 清理旧版本 解决方案&#xff1a;MVCC的优势1. 高并发性2. 避免锁竞争3. 一致性视图 示例代码 PostgreSQL中的MVCC&#xff08;多版本并发控制&#xff09;机制是一种在数据库管理系统中实现事务隔离级别的方法&…