浙里办上架流程文档详细教程

浙里办上架流程文档详细教程_第1张图片

简介

浙里办是一款基于浙江政务服务网一体化平台能力的APP。2021年8月,“浙里办”APP上线为长三角居民服务的“一卡通”专区。浙里办”囊括“掌上办事”、“掌上咨询”、“掌上投诉”三大核心功能板块,以及查缴社保、提取公积金、交通违法处理和缴罚、缴学费等数百项便民服务应用。

浙里办”APP也已推出公共支付、生育登记、诊疗挂号、社保证明打印、公积金提取、交通违法处理等17个类别、300余项便民应用,提供省级掌上办事168项、市级平均452项、县级平均371项。

* 官方地址—请记住这里

  1. “浙里办”服务接入相关技术规范
  2. “浙里办”及浙江政务服务网服务上架申请单
  3. “浙里办”应用开发管理平台
  4. 浙里办上架规范:《“浙里办”H5微应用上架审核规范》
  5. 浙里办H5应用技术文档
  6. 政府服务部门账号: 《政府组织易和账号》
  7. 政务中台-应用开发管理平台
  8. 政务中台-应用开发管理平台账号获取:《政府组织易和账号》
  9. 浙江政务服务网统一用户体系对接: 《用户认证体系对接申请流程》
  10. IRS应用开发子系统
  11. 浙里办上架审核资料附件密码:xas7
  12. 浙里办-IRS应用发布问题说明

钉钉技术对接群

1群: 31376954
2群: 34340559
3群 31419900

上架流程

一、申请账号

需要对接浙里办个人信息则使用个人,对接法人则使用法人账号

  • 看一下官方地址-6,政务中台使用政府组织易和账号登录新建发布应用,需要易和账号按流程申请下来,用到的有三个信息,一个是政府组织机构名,一个是账户,一个是密码
  • 个人信息直接登录浙里办应用即可使用

浙里办上架流程文档详细教程_第2张图片

  • 法人账号信息需要企业可以登录到浙里办app的最佳

浙里办上架流程文档详细教程_第3张图片

浙里办上架流程文档详细教程_第4张图片

二、申请应用

1.先使用申请到的政府易和账号登录政务中台官方地址-3;选择对应的政府组织机构,输入申请到的账户密码

登录后大概是这个样子的

下一步新建应用:

浙里办上架流程文档详细教程_第5张图片

 浙里办上架流程文档详细教程_第6张图片

下一步填写应用研发信息: 是否同时创建服务端系统: 否!!!浙里办上架流程文档详细教程_第7张图片

下一步预览一下基本应用就创建好了,这里基本就用到部署发布、配置操作

 浙里办上架流程文档详细教程_第8张图片

点击配置获取 appid 和appkey

浙里办上架流程文档详细教程_第9张图片

四、开发应用

如果不需要对接用户信息,直接开发H5应用就ok,如果需要对接用户信息个人和法人;请往下看:

点击官方地址-9,按流程申请对接用户信息组建,申请通过之后会有接入码以及对接资料(个人有,法人天谷会拉钉钉群)发送到邮箱,接入码获取到,后端人员如需要个人用户/政府用户对接(杭州易和互联软件技术有限公司):俞锦涛;法人用户对接(杭州天谷信息科技有限公司):杨佳炜/昆极-张东辉;

后端人员对接用户信息的一部分关键代码:

工具类

  • 工具类:
public class ZlbLoginUtil {

	
	private static String servicecode = "";//接入码
	private static String servicepwd = "";//接入密码
	private static String datatype = "json";
	
	public static JSONObject getZlbUserInfo(String ticket) throws Exception {
		JSONObject jsonObject = ticketValidation(ticket);
		if(jsonObject!=null&&"0".equals(jsonObject.getString("result"))){
			jsonObject = getUserInfo(jsonObject.getString("token"));
		}
		return jsonObject;		
	}
	
	public static JSONObject ticketValidation(String ticket) throws Exception {
		JSONObject jsonObject = null;
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		String time = sdf.format(new Date());
		String sign = Md5Utils.getMd5(servicecode+servicepwd+time);
		String url = "https://appapi.zjzwfw.gov.cn/sso/servlet/simpleauth";
		String content = "method=ticketValidation";
		content += "&servicecode="+servicecode;
		content += "&time="+time;
		content += "&sign="+sign;
		content += "&st="+ticket;
		content += "&datatype="+datatype;
		jsonObject = sendGet(url,content);
		return jsonObject;	
	}
	
	public static JSONObject getUserInfo(String token) throws Exception {
		JSONObject jsonObject = null;
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		String time = sdf.format(new Date());
		String sign = Md5Utils.getMd5(servicecode+servicepwd+time);
		String url = "https://appapi.zjzwfw.gov.cn/sso/servlet/simpleauth";
		String content = "method=getUserInfo";
		content += "&servicecode="+servicecode;
		content += "&time="+time;
		content += "&sign="+sign;
		content += "&datatype="+datatype;
		content += "&token="+token;
		jsonObject = sendGet(url,content);
		return jsonObject;	
	}

	public static JSONObject sendGet(String urlstr,String content) {
    	String result = "";
    	JSONObject jsonObject = null;
    	try{
    		String urlName = urlstr + "?"+content;
    		URL U = new URL(urlName);
    		URLConnection connection = U.openConnection();
    		connection.setRequestProperty("Content-Type","application/json");
			System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
			System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
    		connection.connect();
    		BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
    		String line;
    		while ((line = in.readLine())!= null) {
    			result += line;
    		}
    		jsonObject = JSON.parseObject(result.toString());
    		in.close();   
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    	return jsonObject;
    }
	
	public static JSONObject sendPost(String urlstr,String content){
		JSONObject jsonObject = null;
		try {
			URL url = new URL(urlstr);
			HttpURLConnection http = (HttpURLConnection) url.openConnection();
			http.setRequestMethod("POST");
			http.setRequestProperty("Content-Type","application/json");
			http.setDoOutput(true);
			http.setDoInput(true);
			System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
			System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
			http.connect();
			OutputStream os = http.getOutputStream();
			os.write(content.getBytes("UTF-8"));// 传入参数
			os.flush();
			os.close();
			StringBuilder sb = new StringBuilder();
			BufferedReader reader = new BufferedReader(new InputStreamReader(http.getInputStream(),"utf-8"));      
			String line = null; 
	        while ((line = reader.readLine()) != null) {      
	        	sb.append(line);      
	        }
	        jsonObject = JSON.parseObject(sb.toString());
	        sb.setLength(0);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return jsonObject;
	}
}
  • 个人部分:
        try {
            String ticket = req.getParameter("ticket");//ticket 票据
            String sp = req.getParameter("sp");
            if(StringUtils.isNotEmpty(ticket)){
                //获取浙里办用户信息
                JSONObject jsonObject = ZlbLoginUtil.getZlbUserInfo(ticket);
//                System.out.println("获取浙里办用户信息:"+jsonObject.toString());
   
                }else{
                    return ResultVoUtil.error("获取用户信息失败,错误码:"+jsonObject.get("result")+",错误信息:"+jsonObject.get("errmsg"));
                }
            }else{
                return ResultVoUtil.error("校验信息丢失");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return ResultVoUtil.error("失败");
        }

  • 法人部分:
        // 跳转Url
        String redirectUrl = "";
        // 从Request请求的参数中获取ssotoken
        String ssotoken = request.getParameter("ssotoken");
        System.out.println("ssotoken = " + ssotoken);

        // 取具体办事事项地址(若此项有值,成功登录后请跳转此地址到具体事项,否则跳转系统首页)
        String sp = request.getQueryString();
        JSONObject jsonObj=new JSONObject();
        if (null != sp && !sp.trim().equals("")) {
            // 清理事项地址前的“goto=”标识
            sp = sp.substring(5);
            System.out.println("具体业务办理地址: " + sp);
            response.sendRedirect(gotoUrl);
        }

        // 验证令牌并获取用户的登录信息
         jsonObj = doQuery(ssotoken, projectId, projectSecret);
        int errCode = jsonObj.getInt("errCode");
        // errCode = 0 表示认证成功
        if (0 == errCode) {
            // 验证成功
            String info = jsonObj.getString("info");
            System.out.println("验证令牌并获取用户的登录信息接口返回数据:" + info);

            JSONObject legalInfo = JSONObject.fromObject(info);
            
            // 企业名称
            String companyName = legalInfo.get("CompanyName").toString();
            if (null != companyName) {
                System.out.println("企业名称 = " + companyName);
            }

    
        } else {
            // 验证失败,跳转登录失败的页面
            return ResultVoUtil.error("验证失败");
        }


后端人员本地开发完毕,需要把个人和法人的地址提供给个人用户对接人和法人用户对接人;

前端人员对接用户信息的一部分关键代码:

//常规适老版本切换
ZWJSBridge.getUiStyle().then((result) => {
        console.log(result, "判断是常规,还是适老版本");
        getApp().globalData.condition = result.uiStyle;
        if (result.uiStyle == 'normal') {
          getApp().globalData.font = "0.7rem";
        } else {
          getApp().globalData.font = "0.9rem";
        }

      }).catch((error) => {
        console.log(error, "错误信息");
      });
      
//个人和法人用户免登录
ZWJSBridge.getUserType()
          .then(result => {
            console.log(result, '用户信息');
            //法人
            if (result.userType == 2) {
              window.location.replace(
                'https://esso.zjzwfw.gov.cn/opensso/spsaehandler/metaAlias/sp?spappurl=https://qiantang.llis.cc/qt_nj_api/external/login/legal/zlb'
              );
            } else {
            //个人
              window.location.replace('https://puser.zjzwfw.gov.cn/sso/mobile.do?action=oauth&scope=1&servicecode=zsnj');
            }
          })
          .catch(error => {
            console.log(error);
});
 

//判断浙里办支付宝入口
  if(支付宝浙里办小程序入口){
  windows.location.replace("https://puser.zjzwfw.gov.cn/sso/alipay.do?action=ssoLogin&servicecode=【接入代码】&goto=【附带跳转地址,以sp参数返回】")  
  }else{ //同源APP入口(含浙里办APP 及 其他 同源适配APP容器环境)
  windows.location.replace("https://puser.zjzwfw.gov.cn/sso/mobile.do?action=oauth&scope=1&servicecode=【接入代码】&goto=【附带跳转地址,以sp参数返回】")
  }

登录获取用户信息的整体流程为:

浙里办上架流程文档详细教程_第10张图片

五、部署联调

应用需要先发布到政务中台,才可以进行具体的应用免登,用户登录信息对接;

浙里办上架流程文档详细教程_第11张图片

点击直接上线后,会生成一个访问地址,后台携带用户信息重定向到应用链接即可

浙里办上架流程文档详细教程_第12张图片

六、准备上架资料

1.开发完毕应用程序后需要准备上线申请单

**“浙里办”上架申请单

2.同时需要准备小程序上线的一系列资料-

上架资料模板去官方地址-11下载

  • [ ] 1.“浙里办”同源发布应用上线申请报告
  • [ ] 2.图标.png
  • [ ] 3.安卓苹果两端浙里办支付宝自测录屏(总共4个)
  • [ ] 4.1浙里办APP应用测试二维码.png
  • [ ] 4.2支付宝-浙里办小程序应用测试二维码.png
  • [ ] 5.应用上架的业务功能说明(必需提供).docx
  • [ ] 6.浙里办三方应用上架运维材料.docx
  • [ ] 7.H5应用程序包.zip
  • [ ] 8.掌上农机应用安全测试报告.docx
  • [ ] 9.”浙里办“服务适老化适配完成申请报告.xlsx
  • [ ] 10.[压测报告]钱塘农机浙里办.pdf

七、提交上架

PC端宜搭浙里办上架地址:联系申请到的政府组织易和账号实际所属人,扫码登录;

统一登录中心

浙里办上架流程文档详细教程_第13张图片

使用序列 六、1. 填写上线申请单,六、2. 补充资料附件最后提交即可,审核期间每个环节都会有相关人员进行相应的审批

浙里办上架流程文档详细教程_第14张图片

注意:请及时关注审批流程中每个环节的反馈,每个环节反馈(需要整改)的整改时长不得超过2个工作日,否则流程将予以拒绝!

直到最后一位应用上架负责人审批通过,即算上架浙里办成功

浙里办上架流程文档详细教程_第15张图片

选择相对应的地区下面可以看到已经上架成功的小程序:

浙里办上架流程文档详细教程_第16张图片

浙里办上架流程文档详细教程_第17张图片

八、应用消失

官方回复:

1.政务中台-应用开发管理平台 如突发应用不可见,请联系应用业主单位确认是否通过 存量关联 至 IRS系统

1.1.如是IRS关联,在关联后 开发商通过 IRS-开发商工作台 进行操作。

1.2.如非IRS关联产生的应用不可见问题,请及时提交浙江省政务工单,可将 appid、应用名称、业主单位老师提交的浙里办上架申请详情url(宜搭) 填写在浙江省政务工单,工单编号发技术支持 协助您推进排查。 上架申请,可由提交申请老师 通过此链路查询 https://login-pro.ding.zj.gov.cn/ssoLogin.htm?APP_NAME=tianshu-zwdd&BACK_URL=https%3A%2F%2Fyida-pro.ding.zj.gov.cn%2FtaskCenter.html#/notifyme?_k=iw6vor

简单的说:

基本就是应用被迁移到了IRS-开发商工作台:官方地址-10,使用方法和政务中台一样

浙里办上架流程文档详细教程_第18张图片

九、IRS 应用升级

详情看官方地址-12

If there is any help, please contact me at any time—XINGYULIN

你可能感兴趣的:(奇怪的知识,物联网,安全,iot)