【浙里办】浙里办开发上架指南北西东,指乱七八糟。避坑手册Cookbook
注:你现在看到的写于2022-12-08,有效期不确定。毕竟你不知道浙里办侧还会搞出什么花样来。
自己看吧,不用逐行读下去,按需跳转
- 你们能看到这篇乐色的原因
- 主要流程
- 应用编目(开发灾难的开始)
- 组件申请(给灾难加把火)
- 创建应用(黑话学习)
- 开发、压缩上传(火烧到一线码农了)
- 上架前文档准备(黎明前的黑暗)
- 踩坑点
- 信息脱敏(无可厚非)
- UI规范(优zi雅yi大wei方shi的审美规范)
- 适老化对接(避不开的上架审核点)
- 登录对接(漫长的折磨)
- 其他(你完全预料不到,随机砸下来的天坑)
- 应用活跃度考核
- 应用组件调用考核
- 应用工厂使用考核
你们能看到这篇乐色的原因
无非是因为浙里办开发组,乱七八糟的文档、乱七八糟的群、乱七八糟的规范、乱七八糟的坑。更有甚者CSDN上乱七八糟、火上浇油,让乱更乱的一些其它的乐色。
这里你不会找到他们的文档(那堆放在压缩包里面,或Word 、或PDF的东西),不会找到他们的一些链接(有的在政务网,有的在互联网,用来提交或下载前面那堆乐色的地址)。
主要流程
应用编目(开发灾难的开始)
- 网络要求:政务网
- 进入IRS平台:http://irs.zj.gov.cn/
- 身份验证:浙政钉用户
- 登录方式:浙政钉扫码
- 操作内容包括:
- 项目编目
- 应用编目
- 共享数据编目(最少5张表,每张表最少5个字段,需要逐字段填写,包括但不限于:数据来源单位、来源部门、表名、表中文名、字段名、字段类型、字段长度、字段注释(除ID外,不包含英文)、开放方式、更新频率等)
一般情况下,需要填写3份复杂、冗长、难懂的表格。此处不再赘述、具体遇到不过是反复几轮的事情,伤害不高
组件申请(给灾难加把火)
- 网络环境:政务网
- 进入IRS平台:http://irs.zj.gov.cn/
- 在组件中搜索需要的组件
- 一般情况下,需要用到下列组件(这些组件也是传说中的强制组件的一部分,必须用1个)。
- 政务服务网个人用户单点登录(用于浙里办个人用户登录)
- 政务服务网法人用户单点登录(用户浙里办法人用户登录)
- 组织架构和用户体系(浙政钉)(用户浙政钉同步组织架构信息)
- “浙里办”统一单点登录(非强制组件,微信中登录不得不用)
- 电子地图(是的你没有看错,没有百度、高德、腾讯什么的,就是电子地图,部分网络下不能访问互联网,情有可原。但是只有瓦片数据,具体对接使用需要用OpenLayer或者Leaflet)
创建应用(黑话学习)
- 网络环境:政务网
- 进入IRS平台:http://irs.zj.gov.cn/
- 在应用列表右侧,找到应用发布,点击后选择发布浙里办应用,还是浙政钉应用。浙政钉应用又分PC、H5;浙里办应用又分:H5,浙江政务网。
黑话小课堂:
浙政钉H5: 浙政钉手机端打开页面
浙里办H5: 浙里办(APP+支付宝+微信)手机端打开页面
对应的其他端,请在合理范围内猜测 - 面对公众的必须上传浙里办应用、面对政府单位的必须使用浙政钉应用
黑话小课堂:
治理侧应用: 浙政钉应用
服务侧应用: 浙里办应用
开发、压缩上传(火烧到一线码农了)
网络环境:互联网
进入开放商工作台:https://op-irs.zj.gov.cn/,注意:部分市可能有自己的发布平台
上传代码
选择不包含
node_modules
的源代码,压缩成zip提交上传
注意:- 代码必须包含
package.json
- 必须支持
npm build
- 打包结果必须位于根目录下的
build
文件夹,并且build
下存在可访问的index.html
- 代码必须包含
等待编译
白天高峰时期(一般下午3~5点),可能存在编译失败的情况,加班时间段编译速度有所改善。用Vue
或React
的应用,并且有大量NPM
包依赖的应用请自求多福。反复调试
部分问题在本地调试时可能不会发生,上传后在实际打开环境中存在异常,因此需要上传后反复修改
、上传
、编译
、测试
。网络请求
千万不要受到文档的误导,不是非使用mgop
工具不可,只要互联网下可以正常访问的接口即可。不要浪费时间去逐个接口注册。奇技淫巧
针对非npm
类型的打包项目,即传统前端,挨个JS文件引用的项目,我们可以使用node
将项目相关静态文件拷贝到build
文件夹下以达到相同的目的。因此,我们只需要在原前端项目下,加上2个文件即可。
不是传统结构的项目,是不是可以先本地打包变成那啥?package.json
:
{"name": "project-name","version": "0.0.0","description": "","main": "index.js","scripts": {"build": "node index.js build","test": "echo \"Error: no test specified\" && exit 1"},"repository": {"type": "git","url": ""},"author": "","license": ""
}
index.js
:
// 当前代码存在改动,使用前请根据实际情况进行调整、测试
const path = require('path');
const fs = require('fs');function CombineBuildCSS(src, dst){// append css in min cssfs.readFile(src, (error, content) => {if(!!error)return console.error(error);if(fs.existsSync(dst))fs.appendFileSync(dst, content, {encoding: 'utf-8'});elsefs.writeFileSync(dst, content, {encoding: 'utf-8'});});
}function CopyFile(src, dst, callback){const dir = path.dirname(dst);if(!fs.existsSync(dir) || !fs.statSync(dir).isDirectory())fs.mkdirSync(dir, {recursive: true,});if(fs.existsSync(dst))fs.truncateSync(dst);fs.copyFile(src, dst, (err) => {if(!!err)return console.error(err);if(typeof callback === 'function')callback();});
}function CopyDir(src, dst){if(!fs.existsSync(dst))fs.mkdirSync(dst, {recursive: true});fs.readdir(src, (err, files) => {files.forEach(file => {const from = path.join(src, file);if(fs.statSync(from).isDirectory())CopyDir(from, path.join(dst, file));elseCopyFile(from, path.join(dst, file));});});
}function CreateBuildContent(){const dir = path.resolve('./build');if(!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()){fs.mkdirSync(dir, {recursive: true});}if(!fs.existsSync(dir)){throw Error('Cannot create the build dir');} else {(fs.rmSync || fs.rmdirSync)(dir, {recursive: true,force: true});fs.mkdirSync(dir, {recursive: true});}const files = ['./index.html','./styles','...' // 其他需要拷贝的静态文件];const mapper = {'./index.htm': './index.html', // 文件映射};files.forEach((file) => {const src = path.join(file);const dst = path.join(dir, file in mapper ? mapper[file] : file);if(!fs.existsSync(src))return console.warn(file, 'not exists!');if(fs.statSync(src).isDirectory())CopyDir(src, dst);elseCopyFile(src, dst, () => {});});
}CreateBuildContent();
上架前文档准备(黎明前的黑暗)
- 准备好gov域名,因为浙政钉上架审核只接受该类域名
- 需要准备的文档:
序号 | 文档 | 说明 |
---|---|---|
1 | 同源发布申请报告 | 填表,说明已经完成浙里办、支付宝浙里办小程序、微信浙里办小程序对接 |
2 | 上架运维材料提交 | 说明项目的网络架构、压测信息(TPS>=100,压测时长>=20min) |
3 | 安全测试报告结果 | 说明已经进行安全测试,包括:端口开放、敏感信息存储、敏感信息展示、越权漏洞、XSS漏洞、SQL注入漏洞、跨站请求伪造漏洞、文件上传漏洞。需要包括测试记录、截图 |
4 | 适老化适配完成报告 | 填一张长长的表,逐项核对 |
踩坑点
信息脱敏(无可厚非)
信息 | 规则 |
---|---|
人名 |
隐藏首字符,例如:张三 ->*三
|
手机号码 |
隐藏中间4位,例如:12200001111 ->122****1111
|
身份证强隐藏 |
保留首尾,例如:330105190001010001 ->3****************1
|
身份证普通隐藏 |
保留首尾、区县、年、月,例如:330105190001010001 ->3***05190001*****1
|
其他证件 |
保留前后1/3的内容,例如:000000000 -> 000***000
|
固定电话 |
保留区号、后4位,例如:057188888888 -> 0571****8888
|
邮箱 |
保留域名、前3个字符+3个***,例如:10000000@qq.com -> 100***@qq.com 、zz@163.com -> zz***@163.com
|
银行卡号 |
保留前6、后4,例如:6226000000000000 -> 622600******0000
|
其他 |
保留前后1/3的内容,例如:000000000 -> 000***000
|
UI规范(优zi雅yi大wei方shi的审美规范)
具体不在吐槽,主要应用ICON有以下几点需要注意:
- 图标颜色只能选择3中规范中的颜色;
- 图标内容区域尺寸,需要按规范尺寸来,具体有:
- 图标尺寸:36 * 36,倒角:2
- 内容:正圆:2424、正方形:2222、纵向矩形:2024、横向矩形:2420
- 外圆角,内直角
- 角标只能放置在右下角,且与主图标间隔1px
- 有交叉的部分,需要使用正片叠底
- 导出108*108px图标,且不超过12kb
适老化对接(避不开的上架审核点)
浙里办人性化的体现,虽然适老化后界面丑了,很多功能要被隐藏(所以到底算不算得上好呢)。
登录对接(漫长的折磨)
浙里办?不!是App+支付宝直扫+支付宝小程序+微信小程序
- 上传代码并编译成功后,需要点击
提交发布
。 - 在应用列表中,可以看到PC地址(格式:https://mapi.zjzwfw.gov.cn/web/mgop/gov-open/zj/{APPID}/reserved/index.html)。
APPID,请在应用列表中(第二列)查看。对下方地址进行替换
正式地址:https://mapi.zjzwfw.gov.cn/web/mgop/gov-open/zj/{APPID}/reserved/index.html
测试地址:https://mapi.zjzwfw.gov.cn/web/mgop/gov-open/zj/{APPID}/lastTest/index.html - 加钉钉群(31376954),当前这个是二群,不知道当你们看到的时候,还能不能加;
- 在群里查看历史消息,按格式填写(包括:应用名称、正式地址、测试地址、政务服务网个人用户单点登录组件AK、SK)并@相关人员进行回调地址配置,然后等待1~3天左右;
- 浙里办、支付宝直扫、支付宝小程序:
此处需要判断具体是APP还是支付宝中,确定具体重定向地址:
var uri= window.location.href;if(uri.indexOf('#') > -1)uri = uri.substr(0, uri.indexOf('#'));uri = encodeURIComponent(uri);var ua = window.navigator.userAgent.toLowerCase();
if(ua.indexOf('alipay') > -1)window.location.replace("https://puser.zjzwfw.gov.cn/sso/alipay.do?action=ssoLogin&scope=1&servicecode=您申请的组件对应的AK&redirectUrl=" + uri);
elsewindow.location.replace("https://puser.zjzwfw.gov.cn/sso/mobile.do?action=oauth&scope=1&servicecode=您申请的组件对应的AK&redirectUrl=" + uri);
此处获取到`ticket`的,使用`政务服务网个人用户单点登录`组件接口,获取用户信息处理登录流程
- 支付宝小程序、微信小程序:
此处获取到ticket
的,使用“浙里办”统一单点登录
组件接口,获取用户信息处理登录流程
测试时,你收到唯一的ticket
,该ticket
具有以debug_tk_
开头的特征,用户信息也是虚拟信息。
测试阶段,在支付宝小程序、微信小程序中打开应用时,会获得这个测试ticket
,如需正常上架审核及调通功能,需要用到上述组件。
使用政务服务网个人用户单点登录
组件时,会提示st已过期
的报错。
又,如果先使用支付宝直扫,再使用支付宝浙里办小程序扫描,将获得正常ticket
又又又,微信获取ticket
不能使用重定向的方式。需要使用到ZWJSBridge
。示例代码如下:
ZWJSBridge.ssoTicket({}).then(rs => {if(rs.result && !!rs.ticketId)return wxLogin(rs.ticketId); // 具体实现ZWJSBridge.openLink({type: 'reload'}).then(rs => {wxLogin(rs.ticketId); // 具体实现}).catch(err => {var uri= window.location.href;if(uri.indexOf('#') > -1)uri = uri.substr(0, uri.indexOf('#'));uri = encodeURIComponent(uri);window.location.replace("https://puser.zjzwfw.gov.cn/sso/mobile.do?action=oauth&scope=1&servicecode=您申请的组件对应的AK&redirectUrl=" + uri);});
});
登录对接 OVER T_T
其他(你完全预料不到,随机砸下来的天坑)
应用活跃度考核
如题。时不时来个考核,不用嘛,就扣分(当然,有的单位不在乎)。其实是业主单位,等等,业主怎么会有错呢?当然是应用不够人性化,不好用,开发的问题嘛。
话说回来,浙里办这么难用的东西,体验你还想怎么样。
应用组件调用考核
如题。组件你想先申请了,但等用到直接对接?
不行!
你放着不用,组件会有考核,考核嘛,还是扣分(有的单位还是不在乎的)。
应用工厂使用考核
看到这里,就要先问一下,你要对接的是杭州应用工厂,还是浙江省应用工厂?
没想到吧,有2个,如果你运气足够好,你在对接一遍杭州应用工厂,并完成一次考核要求之后,你还会遭遇了省应用工厂的洗礼(所以杭州的应用工厂是不是白搞了?)。
项目 | 杭州 | 省工厂 |
---|---|---|
网络 | 政务网 | 政务网 |
前端 | 支持npm/yarn打包 | 支持npm/yarn打包 |
Java后端 | 支持Maven打包 | 支持Maven打包 |
非Java后端 | 代码上传 | 代码上传 |
部署 | Docker | 下载打包成果 |
代码审计 | 有 | 有 |
安全审计 | 有 | 有 |
审计速度 | 快 | 超级慢 |
代码管理工具 | git | git |
GIT身份认证 | SSH | SSH |
【浙里办】浙里办开发上架指南北西东,指乱七八糟。避坑手册Cookbook相关推荐
- 新人小白如何选择编程语言和开发方向(非常详细)初学者避坑指南!!
如果你听说IT编程很赚钱,想入坑,不想入行,那你可以来看一看这篇文章!! 有些坑你应该没入之前就就应该知道! 全世界的编程语言有 600 多种,TIOBE 统计的有 100 种,参与排名的有 50 种 ...
- 【鸿蒙开发】hpm-cli的安装避坑、详细使用教程
[鸿蒙开发]hpm-cli的介绍.安装避坑.详细使用教程 文章目录 [鸿蒙开发]hpm-cli的介绍.安装避坑.详细使用教程 安装环境准备 使用教程 踩坑集合 HPM包管理器是华为鸿蒙推出的Harmo ...
- 浙里办H5微应用开发流程
一.代码开发 1. 源代码准备: 由于源代码需要能够部署到政务中台,即要支持npm run build构建源码.(解释:把源代码上传政务中台后,它会后台自动编译构建项目并取build文件夹下的产物 ...
- 浙政钉h5微应用开发vue
浙政钉h5开发简单总结 1.在页面引入专有钉钉 JSAPI npm install --save gdt-jsapi import dd from 'gdt-jsapi'; /在使用页面导入 Vue. ...
- 2018年图灵奖--约书亚·本吉奥、杰弗里·埃弗里斯特·辛顿和Yann LeCun简介
大家好,我是执念斩长河.今天讲述的是2018年图灵奖获得者约书亚·本吉奥(Yoshua Bengio).杰弗里·埃弗里斯特·辛顿(Geoffrey Hinton)和Yann LeCun.图灵奖奖励他们 ...
- Linux文本复制到记事本文本文件乱码,解决“在windows里的记事本里编辑的汉字文本文件,上传到linux服务器上出现乱码“问题...
一.前期准备 1.首先在windows环境下打开记事本,然后创建一个包含汉字和英文的文本文件,输入内容"测试在windows里的记事本里编辑的文本文 件,上传到linux服务器上会不会出现乱 ...
- word里如何在□里打√!框框里打勾!!!!!
word里如何在□里打√!框框里打勾!! 快捷便捷的方式 1.按住键盘上的[Alt]键不放,然后在小键盘区输入[9745]这几个数字,最后松开 ALT 键,自动变成框框中带勾符号: 2.在Word文档 ...
- WORD: 如何在一个word里文档里创建多个目录?
如何在一个word里文档里创建多个目录? 1 目录的创建 引用/目标/自动目录 (同时文章本身需要设置层级标题正文等) 一般不选手动目录,没试过狠麻烦吧 2 如何设置2个目录呢? 直接在新的地方插入 ...
- Python-读取文件夹里Excel文件里的数据
场景描述 已知:文件夹路径.Excel文件名.存放数据的Sheet名 目标:读取目标文件夹里目标Excel里面目标Sheet里的数据 思路 方法一:利用Pandas模块 import pandas a ...
最新文章
- oracle中set怎么用,sqlplus命令格式以及sqlplus中set的用法与解释-Oracle
- Mac写文件到U盘的方法
- LeetCode-Reverse Integer
- HALCON表面划痕检测
- 跟小静读CLR via C#(05)- 访问限定、数据成员
- 聚焦2020年财报:进击的恒大汽车,“变态”的智能汽车
- c语言函数用指针传递参数问题
- wxWidgets:wxDatePickerCtrl类用法
- 这个回答让我错失offer!成功收获美团,小米安卓offer
- Linux中报库或者程序找不到的解决方法
- haproxy 配置 说明
- 纺织名词术语(针织品部分)---疵点
- 21天学通python-21天学通Python PDF 高清版
- 正式开通我的开源博客
- 5月17日 AJAX之JSON
- WebSocket消息推送(实现进行聊天)和WebSocket简介
- Windows的文件目录管理策略
- 锁存器芯片74HC573芯片的用法,及其在实际电路中的应用
- 计算机桌面操作系统版本,如何看电脑操作系统版本
- 网页微信公众平台登录电脑版
热门文章
- [合集]阿甘正传部分台词中英对照
- 技术之路,漫漫而修远
- 华硕梅林固件成功安装astrill后,点进去一片空白
- 期货开户保证金能极端行情保安全
- 百度网盘官方推出的“下载提速”方法 — 免会员
- 豌豆荚如何避开移动互联入口争夺锋芒?
- oracle查询数据库名、实例名等
- java奥特曼对战小怪兽_JAVA程序设计(09)-----面对对象设计初级应用 奥特曼打小怪兽...
- C++ 库函数<string>示例
- pythonarray什么意思_python:array([...])是什么意思?(python: what does array([…]) mean?)...