浙里办是一款基于浙江政务服务网一体化平台能力的APP。2021年8月,“浙里办”APP上线为长三角居民服务的“一卡通”专区。浙里办”囊括“掌上办事”、“掌上咨询”、“掌上投诉”三大核心功能板块,以及查缴社保、提取公积金、交通违法处理和缴罚、缴学费等数百项便民服务应用。
浙里办”APP也已推出公共支付、生育登记、诊疗挂号、社保证明打印、公积金提取、交通违法处理等17个类别、300余项便民应用,提供省级掌上办事168项、市级平均452项、县级平均371项。
1群: | 31376954 |
2群: | 34340559 |
3群 | 31419900 |
需要对接浙里办个人信息则使用个人,对接法人则使用法人账号
1.先使用申请到的政府易和账号登录政务中台—官方地址-3;选择对应的政府组织机构,输入申请到的账户密码
登录后大概是这个样子的
下一步新建应用:
下一步填写应用研发信息: 是否同时创建服务端系统: 否!!!
下一步预览一下基本应用就创建好了,这里基本就用到部署发布、配置操作
点击配置获取 appid 和appkey
如果不需要对接用户信息,直接开发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参数返回】")
}
登录获取用户信息的整体流程为:
应用需要先发布到政务中台,才可以进行具体的应用免登,用户登录信息对接;
点击直接上线后,会生成一个访问地址,后台携带用户信息重定向到应用链接即可
1.开发完毕应用程序后需要准备上线申请单
**“浙里办”上架申请单
2.同时需要准备小程序上线的一系列资料-
上架资料模板去官方地址-11下载
PC端宜搭浙里办上架地址:联系申请到的政府组织易和账号实际所属人,扫码登录;
统一登录中心
使用序列 六、1. 填写上线申请单,六、2. 补充资料附件最后提交即可,审核期间每个环节都会有相关人员进行相应的审批
注意:请及时关注审批流程中每个环节的反馈,每个环节反馈(需要整改)的整改时长不得超过2个工作日,否则流程将予以拒绝!
直到最后一位应用上架负责人审批通过,即算上架浙里办成功
选择相对应的地区下面可以看到已经上架成功的小程序:
官方回复:
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,使用方法和政务中台一样
详情看官方地址-12