功能概述
学信网没有开放公共的学历认证api,那App要实现学历的自动认证改怎么做呢?
下面就详细介绍App通过代码实现学习自动完成,用户输入证书编号,可以获取学历的详细信息,包括学校名称、学历(专科/本科/硕士)、学习形式(全日制/非全日制)、专业等。
效果图如下:
实现代码
思路:
App跳转学信网学历认证的链接,学历查询在学信网那边完成,包括输入姓名和证书编号,查询成功后学信网会跳转到查询结果界面,App原生壳子webview需要监听页面加载,如果是学信网查询结果的页面,则通过webview查询页面元素(通过调用js的样式标签查询),可以获得查询结果页面的所有学历数据。
学信网学历查询链接
https://www.chsi.com.cn/xlcx/lscx/query.do
下面以安卓具体具体代码,iOS实现类似。App上点击学历认证按钮,跳转上面链接,
1.webView添加H5交互事件监听
webView.addJavascriptInterface(new InJavaScriptLocalObj(), "inter_education");
public final class InJavaScriptLocalObj {
@JavascriptInterface
public void showEducationResult(String str) {
//str格式如下:王某某,北京大学,普通全日制,本科,105******26
LogUtil.e(TAG,"showDescription:"+str);
String[] split = str.split(",");
if (split.length>=5){
final String name = split[0];
final String school = split[1];
final String learningFormat = split[2];
final String degree = split[3];
final String degreeNo = split[4];
LogUtil.e(TAG,"姓名:"+name+",学校:"+school+",学习形式:"+learningFormat+",学历:"+degree+",证书编号:"+degreeNo);
//查询成功,然后做个用户授权的弹框,授权同意后,根据具体的业务会更新用户学历
}
}
}
2.页面加载完成后调用查询方法
webView.setWebViewClient(new BridgeWebViewClient(bridgeWebView){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//学历查询的URL: https://www.chsi.com.cn/xlcx/lscx/xlresult.do?rndid=ssdmhpx6t***odq7a6g49r
if (url.contains("xlcx/lscx/xlresult.do")){ //包含这个的就是查询结果页面
//原生调用H5里的方法
webView.loadUrl("javascript:window.inter_education.showEducationResult("
+ "document.getElementsByClassName('col-right')[0].innerText+','+"
+ "document.getElementsByClassName('col-right')[5].innerText+','+"
+ "document.getElementsByClassName('col-right')[9].innerText+','+"
+ "document.getElementsByClassName('col-right')[10].innerText+','+"
+"document.getElementsByClassName('col-right')[13].innerText"
+ ");");
}
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
LogUtil.e(TAG,"onPageStarted:"+url);
}
});
代码就这么多,其实实现很简单,就是原生webview来查看H5页面的数据,查到后原生拿到数据,做后续操作。
说明:
安卓和iOS可以用这种方式实现学历的自动认证,不过纯H5页面不行,尝试过H5页面嵌套iframe的方式,再监听iframe里的数据,不过学信网里应该对iframe嵌套做了限制,查询成功跳转到结果页面时报错,有前端的大神可以尝试下,如果成功欢迎留言。我放出H5的尝试的代码:
<!DOCTYPE html>
<html style="height: 100%;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<script>
window.onload = function () {
var array = document.getElementsByClassName("col-right");
if (array.length>5) {
var result = array[0].innerText+","+array[5].innerText+","+array[9].innerText+","+array[10].innerText+","+array[13].innerText;
console.log(result);
alert("认证成功:"+result);
}
}
</script>
</head>
<body style="height: 100%;">
<iframe src="https://www.chsi.com.cn/xlcx/lscx/query.do" id="iframeId" style="width:100%;height: 100%;"></iframe>
</body>
</html>
demo源码:https://github.com/1812507678/OpenTool
如有问题可以留言,或者去下面SDK官网,官网有个人联系方式。
轻量级LightSDK和客服系统,免费一键接入,感兴趣的小伙伴可以看看。
LightSDK官网地址
https://im.wzzmlk.com/LightIMWeb/