java实现微信公众号接入阿里实人认证(方案:RPH5BioOnly)

 首先样式就是上面这种,H5方案只保证在微信公众号和小程序内才能稳定运行~~

下面我们来了解下准备工作吧!!!上图

 上图中是最基本的准备工作,就不一一赘述了,需要大家细心地把每步做好o,强调一点就是创建实人认证场景时要选择对应的方案,自己填写的场景标识要记住,在代码中会用到的,在创建场景时可能会出现创建error的对话框,多刷新几次页面重复创建几次就可以啦!要有耐心哦。。。

好了那我们废话不多说,准备工作无误后直接上代码把!~

前台页面:(页面中是我为了测试复制的页面,可能很多没用的js,css等等,但是我就不在这里摘除了哈,实现功能要紧!)

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<link rel="stylesheet" href="css/mui-header.css" />
<link rel="stylesheet" href="css/weui/weui.css" />
<link rel="stylesheet" href="css/weui/weuix.css" />
<script type="text/javascript" src="js/mui.min.js"></script>
<script type="text/javascript" src="js/util.js"></script>
<script src="js/zepto.min.js"></script>
<script src="js/zepto.weui.js"></script>
<style>
.area {
margin: 20px auto 0px auto;
}

.mui-content-padded {
margin-top: 25px;
}

.mui-btn {
padding: 10px;
}

.link-area {
display: block;
margin-top: 25px;
text-align: center;
}

.spliter {
color: #bbb;
padding: 0px 8px;
}

#imGes {
width: 100px;
height: 100px;
border: 1px solid #E5E5E5;
border-radius: 50%;
margin: 30px auto;
margin-top: 50px;
}
</style>
</head>
<body ontouchstart>
<header class="mui-bar mui-bar-nav mui-bar-nav-bg" style="background: #007aff;">
<!-- mui-bar-transparent -->
<h1 class="mui-title" style="color: #fff;">实人认证</h1>
</header>
<div class="container" id="content">
<div class="weui-cells weui-cells_form">
<div class="weui-cell">
<div class="weui-cell__hd">
<label class="weui-label">姓名</label>
</div>
<div class="weui-cell__bd">
<input id='username' class="weui-input" placeholder="请输入真实姓名" type="text">
</div>
</div>
<div class="weui-cell">
<div class="weui-cell__hd">
<label class="weui-label">身份证号</label>
</div>
<div class="weui-cell__bd">
<input id='idCard' class="weui-input" pattern="[0-18]*" placeholder="请输入身份证号码" type="text">
</div>
</div>

</div>
<br> <br>
<div class="page-bd-15">
<a href="javascript:;" id='login' onclick="next();" class="weui-btn weui-btn_primary bg-blue">下一步</a>
</div>

</div>
<script>

var pathUrl = getBasePath();
    //这里我只引用了成功后回调的页面失败的仍然使用阿里云的错误提示,可能错误提示要比自己写的更全面些把~
var success = 'http://mmgy.nat300.top/项目名称/.../weixin/success.html';
var successRedirect=encodeURIComponent(success);
// var fail = 'http://mmgy.nat300.top/.../weixin/fail.html';
//var failRedirect=encodeURIComponent(fail);

//打开新的页面
function openWindow(url) {
mui.openWindow({
url : url,
id : url
})
}

function next() {

var name = $("#username").val();
var idCard = $("#idCard").val();

$.ajax({
url : pathUrl + '/expand/message/srrz.htm',
data : {
name : name,
idCard : idCard
},
beforeSend : function() {
$.showLoading();
},
type : "POST",
success : function(response) {
if(response!="" && response!=null){
//官方给出的样例,如果不使用阿里云的默认提示就要拼参哦,参数为你要调取的页面。
//resultUrl === H5认证流程页面入口URL&successRedirect=https%3A%2F%2Fwww.your_h5_sucess_address&failRedirect=https%3A%2F%2Fwww.your_h5_fail_address
var resultUrl=response+"&successRedirect="+successRedirect;//+"&failRedirect="+failRedirect;
// console.log(resultUrl);
openWindow(resultUrl);
}
},
error : function(res) {
$.hideLoading();
}
})
}
</script>
</body>
</html>




@Controller
@RequestMapping(value = "/expand/message/")
public class BDCSRRZController {
@ResponseBody
@RequestMapping(value = "srrz.htm", method =RequestMethod.POST)
public String SRRZ(HttpServletRequest request){
String rzurl= null;
try {
rzurl= RZUtils.RZ(request);
} catch (ClientException e) {
e.printStackTrace();
}
return rzurl;
}





RZUtils:
public class RZUtils {
private static IAcsClient client;
static {
DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou", // 您的可用区ID
"", // 您的Access Key ID
""); // 您的Access Key Secret
try {
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", "Cloudauth", "cloudauth.aliyuncs.com");
} catch (ClientException e) {
e.printStackTrace();
}
client = new DefaultAcsClient(profile);
}

//人脸认证
public static String RZ(HttpServletRequest httpServletRequest) throws ClientException {
String name = httpServletRequest.getParameter("name");
String idCard = httpServletRequest.getParameter("idCard");
HttpSession session = httpServletRequest.getSession();
DescribeVerifyTokenRequest request = new DescribeVerifyTokenRequest();
String BID = UUID.randomUUID().toString();

request.setBizId(BID);
request.setBizType("checkyyr"); //创建方法请参见https://help.aliyun.com/document_detail/127885.htm
request.setName(name);
request.setIdCardNumber(idCard);

DescribeVerifyTokenResponse response = client.getAcsResponse(request);
String verifyToken = response.getVerifyToken();
// verifyPageUrl仅在RPH5BioOnly认证方案下返回
String verifyPageUrl = response.getVerifyPageUrl();
return verifyPageUrl;
}

至此简单的人脸验证就接入成功了,后续可能会需要调用拍摄到的图片等等信息,要仔细看文档,我这里就简单把图片地址调取到,但是地址据说只有5分钟有效期!!
RZUtils:

public static String HD(HttpServletRequest request) throws ClientException {
//6. 接入方服务端获取认证状态和认证资料(注:客户端无线认证SDK回调中也会携带认证状态, 但建议以服务端调接口获取的为准进行业务上的判断和处理)
String resultUrl="";
DescribeVerifyResultRequest verifyResultRequest = new DescribeVerifyResultRequest();
String bid = request.getParameter("BID");

  //要传入这两个参数,
verifyResultRequest.setBizId(bid);//实人认证时创建的bid
verifyResultRequest.setBizType("");//是控制台中新增场景你自己设置的场景标识

DescribeVerifyResultResponse verifyResultResponse = client.getAcsResponse(verifyResultRequest);
resultUrl = verifyResultResponse.getMaterial().getFaceImageUrl();
System.out.println(resultUrl);
//Integer verifyStatus = verifyResultResponse.getVerifyStatus();
return resultUrl;//图片http地址。
}

好啦~简单的应用接入完毕,本人小白一个~如果我有写的不好或者不对的地方欢迎各路大神指教小弟~(#^.^#)


猜你喜欢

转载自www.cnblogs.com/myoak/p/11689996.html