今天本来自己做的小程序收集了下用户个人信息上传被打回来说:
1: 你好,小程序页面功能涉及:采集用户生物特征(人脸照片或视频)及其他敏感信息,用于身份认识或识别,
为保障用户敏感隐私身份信息,平台暂不支持此功能。请去除相关功能后重新提交。
然后就去找度娘搜了下需要申请
wx.startFacialRecognitionVerify({})
https://api.weixin.qq.com/cgi-bin/token?appid=appid&secret=secret&grant_type=client_credential
https://api.weixin.qq.com/cityservice/face/identify/getinfo?access_token=access_token
https://api.weixin.qq.com/cityservice/face/identify/getimage?access_token=access_token
首先要给申请下来的接口发送俩个参数:名字、身份证号码
photo.js


1 data: {
2 openid: '',
3 custName: '姓名',
4 custIdCard: '身份证号码',
5 verifyImg: ''
6 },
7 /**
8 * 生命周期函数--监听页面加载
9 */
10 onLoad: function (options) {
11 this.setData({
12 custName: options.custName,
13 custIdCard: options.custIdCard
14 });
15 var _this = this;
16 wx.checkIsSupportFacialRecognition({
17 checkAliveType: 2,
18 success: function (res) {
19 if (res.errCode === 0 || res.errMsg === "checkIsSupportFacialRecognition:ok") {
20 //调用人脸识别
21 _this.startface(_this.data.custName.replace(/(^\s*)|(\s*)$/g, ""), _this.data.custIdCard); //身份证名称,身份证号码
22 return;
23 }
24 wx.showToast('微信版本过低,暂时无法使用此功能,请升级微信最新版本')
25 },
26 fail: function(res){
27 wx.showToast('微信版本过低,暂时无法使用此功能,请升级微信最新版本')
28 }
29
30 })
31 },
32 startface(name, idcard) {
33 console.log('我进来了!!!');
34 var _this = this;
35 wx.startFacialRecognitionVerify({
36 name: _this.data.custName, //身份证名称
37 idCardNumber: _this.data.custIdCard, //身份证号码
38 success: function (res) {
39 var verifyResult = res.verifyResult; //认证结果
40 //调用接口
41
42
43 wx.request({
44 url: 'https://api.weixin.qq.com/cgi-bin/token?appid=wx2cafec51ec4c2153&secret=8d3e68a5a2c702673340d72d1c7db4cc&grant_type=client_credential',
45 data: {
46
47 },
48 method: 'POST',
49 header: {
50 'content-type': 'application/json;charset=utf-8'
51 },
52 success: function (res) {
53 console.log(res.data);
54 console.log(res.data.access_token)
55 var token = res.data.access_token;
56 wx.request({
57 url: 'https://api.weixin.qq.com/cityservice/face/identify/getinfo?access_token=' + res.data.access_token,
58 data: {
59 verify_result: verifyResult
60 },
61 method: 'POST',
62 header: {
63 'content-type': 'application/json;charset=utf-8'
64 },
65 success: function (res) {
66 console.log(res.data)
67 console.log('我终于成功了。。。。')
68 wx.request({
69 url: 'https://api.weixin.qq.com/cityservice/face/identify/getimage?access_token=' + token,
70 data: {
71 verify_result: verifyResult
72 },
73 method: 'POST',
74 responseType: 'arraybuffer',
75 header: {
76 'content-type': 'application/json;charset=utf-8',
77 },
78 success: (res) => {
79 // console.log('data:image/png;base64,'+wx.arrayBufferToBases64(res))
80
81 console.log(res.data);
82 var base64 = wx.arrayBufferToBase64(res.data);
83 _this.setData({ verifyImg:'data:image/png;base64,'+ base64})
84 wx.navigateTo({
85 url: '../msg/msg?msg=恭喜您信息核验成功&verifyImg=' + _this.data.verifyImg
86 });
87 },
88 fail: function (res) {
89 console.log('失败', res.data)
90 }
91 })
92
93 },
94 fail: function (res) {
95
96 }
97 })
98 },
99 fail: function (res) {
100
101 }
102 })
103
104
105
106 console.log(verifyResult)
107 // wx.navigateTo({
108 // url: '../msg/msg?msg=人脸核身认证成功'
109 // });
110 },
111 checkAliveType: 2, //屏幕闪烁(人脸核验的交互方式,默认0,读数字)
112 fail: err => {
113 wx.showToast('请保持光线充足,面部正对手机,且无遮挡')
114 wx.navigateTo({
115 url: '../msg/msg?msg=请保持光线充足,面部正对手机,且无遮挡,请退出重新操作'
116 });
117 }
118 })
119 }
主要坑的是这样下来得申请好几次接口到最后业务还需要unionid所以还得去微信开放平台申请认证
然后想要拉取核身结果的图片的时候就需要党上面的https://api.weixin.qq.com/cityservice/face/identify/getimage?access_token=access_token
返回的数据需要转成base64码然后显示在image标签上我是直接传给后台的
下面上我msg的js代码
msg.js
const app = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
msg:'',
verifyImg:'',
url:app.globalData.PostData
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
var timestamp = Date.parse(new Date());
timestamp = timestamp/1000
console.log(options)
var that = this;
that.setData({
msg:options.msg,
verifyImg:options.verifyImg
});
console.log(that.data.url)
console.log(that.data.verifyImg)
wx.request({
url: that.data.url+'fileUpload!upBase64.do', //仅为示例,非真实的接口地址
data: {
file:that.data.verifyImg,
filename:timestamp,
filedata:that.data.verifyImg
},
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded;charset=utf-8'
},
success:function (res){
const data = res.data
console.log('成功',data);
//do something
},
fail:function(res){
console.log('失败',res)
}
})
}
后台上传base64转换的代码
public void upBase64() {
System.out.println("======开始上传图片====");
System.out.println(file);
Json j = new Json();
String FilePath = ServletActionContext.getServletContext().getRealPath(Constants.IMGPATH+"/"+Constants.PHOTOPATH);
File PathFile = new File(FilePath);
try {
// 如果是IE,那么需要设置为text/html,否则会弹框下载
// response.setContentType("text/html;charset=UTF-8");
response.setContentType("application/json;charset=UTF-8");
String FileName = request.getParameter("filename");
String FileData = request.getParameter("filedata");
System.out.println(FileName+"**************"+FileData);
if (null == FileData || FileData.length() < 50) {
j.setMsg("上传失败,数据太短或不存");
j.setSuccess(false);
} else {
// 去除开头不合理的数据
FileData = FileData.substring(30);
FileData = URLDecoder.decode(FileData, "UTF-8");
System.out.println("FileData="+FileData);
byte[] data = FileUtil.decode(FileData);
/*if (null == FileName || FileName.length() < 1) {
FileName = System.currentTimeMillis() + ".jpg";
}*/
// 写入到文件
FileOutputStream outputStream = new FileOutputStream(new File(PathFile,FileName));
outputStream.write(data);
outputStream.flush();
outputStream.close();
System.out.println(FileName+"**************"+FileData);
j.setMsg("上传成功");
j.setSuccess(true);
}
} catch (Exception err) {
j.setMsg("上传失败");
j.setSuccess(false);
err.printStackTrace();
}
writeJson(j);
}
另外说一句一定要保持程序员优良的美德,啊啊啊程序源码开源一定的小程序是真的坑。
来源:oschina
链接:https://my.oschina.net/u/4410617/blog/4406663