因为工作原因,需要调取阿里云OCR身份证识别,但是阿里云给的请求示例都是后台调用的代码,由于特殊原因,我需要的是前台JS调用,所以决定自己尝试一下,最后成功调用了,废话不多说,直接上代码。
var json = {
"image":imp,
"configure": "{\"side\":\"face\"}"
};
$.ajax({
crossDomain: true,
beforeSend: function(req) {
req.setRequestHeader("Content-Type", "application/octet-stream; charset=utf-8");
req.setRequestHeader("Authorization", "APPCODE AppCode值");
},
type: "POST",
url:"http://dm-51.data.aliyun.com/rest/160601/ocr/ocr_idcard.json",
dateType:"JSON",
data: JSON.stringify(json),
error: function(request) {
alert("识别失败,请重新上传照片或手动输入");
},
success: function(data) {
var obj = JSON.parse(data);
document.getElementById('Name').value = obj.name;
document.getElementById('sex').value = obj.sex;
document.getElementById('national').value = obj.nationality;
document.getElementById('IdCard').value = obj.num;
document.getElementById('address').value = obj.address;
}
});
通过查看阿里云的API接口说明,发现其调用地址:http://ai-market-ocr-person-id.icredit.link/ai-market/ocr/personid,请求方式为POST,返回类型为JSON,且请求数据为:
{
"image": "图片二进制数据的base64编码",
"configure": "{\"side\":\"face\"}" #正面/反面:face/back
}
这些说明了Ajax的type,url 及 dateType,由于存在跨域问题,于是在Ajax中添加了crossDomain: true,但是发现还存在appcode认证问题,还好阿里云提供了一个调试工具,在调试工具中调试后发现,appcode是写在headers中的,且它的Content-Type为application/octet-stream; charset=utf-8,于是在Ajax中添加了:
beforeSend: function(req) {
req.setRequestHeader("Content-Type", "application/octet-stream; charset=utf-8");
req.setRequestHeader("Authorization", "APPCODE AppCode值");
}
这样就可以正常的传值了,最后再对传回的值做处理就可以了。