按理说,这些都应该是服务端完成的事情。可是由于种种原因,我放了一句狠话。。。

然后只能自己搞了。。。。

1、由于芝麻信用提供的SDK,在android端直接使用SSL证书验证是不通过的。所以当时有点后悔说的狠话。

2、SDK用不了,没办法只能自己动手,自己拼接参数,写请求。

3、不废话,直接开始。

(1)、解压下载的SDK源码。

找到 WebUtils.java (在解压后的“com\antgroup\zmxy\openplatform\api\internal\util”目录下)。打开 WebUtils.java 查看源码。
找到“getConnection()”方法,你会看到很蛋疼的一句话“默认认证不通过,进行证书校验。”

我们修改 return true; //默认认证不通过,进行证书校验。(真操蛋,直接改成true,看你还怎么不给我通过)。之后保存,把webutils.java 复制到自己的工程中,调用芝麻信用时使用。

(2)、自己拼参数,开始认证。就直接上代码了。

public class FaceUtils {private String path = "";//回调地址private static String biz_no = "";private Context context;private static FaceUtils faceUtils;private String IP = "https://zmopenapi.zmxy.com.cn/openapi.do";private String app_id = "自己的APP_ID";private String private_key = "自己的私钥";private String public_key = "支付宝的公钥(不是应用公钥,别搞错了)";private AdapterViewClickListener clickListener;public static FaceUtils getInstance() {if (faceUtils == null) {faceUtils = new FaceUtils();}return faceUtils;}/*** 启动芝麻认证* * @param name* @param id_num*/public void startFace(Context context, final String name,final String id_num,String path) {this.path = path;this.context = context;new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubString params = "";String sign = "";JSONObject identity_param = new JSONObject();try {identity_param.put("identity_type", "CERT_INFO");identity_param.put("cert_type", "IDENTITY_CARD");identity_param.put("cert_name", name);identity_param.put("cert_no", id_num);} catch (JSONException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}long time = System.currentTimeMillis();String signCanshu = "transaction_id=ZGYD"+ new SimpleDateFormat("yyyyMMddHHmmss").format(time)+ "0001234" + "&product_code=w1010100000000002978"+ "&biz_code=FACE" + "&identity_param="+ identity_param.toString() + "&ext_biz_param={}";try {params = RSACoderUtil.encrypt(signCanshu, "UTF-8",public_key);sign = RSACoderUtil.sign(signCanshu, "UTF-8", private_key);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}Map<String, String> map = new HashMap<>();map.put("app_id", app_id);map.put("charset", "UTF-8");map.put("method", "zhima.customer.certification.initialize");map.put("version", "1.0");map.put("platform", "zmop");map.put("params", params);map.put("sign", sign);String result = "";try {result = com.huahan.finance.utils.WebUtils.doPost(IP, map,15000, 15000);HHLog.i("mtj", "result = " + result);try {JSONObject object = new JSONObject(result);String jieresult = RSACoderUtil.decrypt(object.getString("biz_response"), private_key,"UTF-8");HHLog.i("mtj", "解密== " + jieresult);JSONObject bizObject = new JSONObject(jieresult);biz_no = bizObject.getString("biz_no");handler.sendEmptyMessage(0);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();HHLog.i("mtj", "result 解密e= " + e.getMessage());}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();HHLog.i("mtj", "result e= " + e.getMessage());}}}).start();}/*** 获取认证url* * @param biz*/public void getUrl() {ZhimaCustomerCertificationCertifyRequest request = new ZhimaCustomerCertificationCertifyRequest();request.setPlatform("zmop");request.setBizNo(biz_no);// 必要参数// 设置回调地址,必填. 如果需要直接在支付宝APP里面打开回调地址使用alipay协议// alipay://www.taobao.com 或者 alipays://www.taobao.com,分别对应http和https请求request.setReturnUrl(path);// 必要参数DefaultZhimaClient client = new DefaultZhimaClient("https://zmopenapi.zmxy.com.cn/openapi.do", app_id,private_key, public_key);try {String url = client.generatePageRedirectInvokeUrl(request);HHLog.i("mtj", "开始认证url==" + url);doVerify(url);} catch (ZhimaApiException e) {e.printStackTrace();HHLog.i("mtj", "开始认证错误==" + e.getMessage());}}public String Result(String params) {String result = "";try {result = RSACoderUtil.decrypt(params, private_key, "UTF-8");} catch (Exception e) {// TODO: handle exception}return result;}/*** 查询认证结果* * @param biz*/public void QueryNum(AdapterViewClickListener clickListener) {this.clickListener = clickListener;if (!TextUtils.isEmpty(biz_no)) {new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubString params = "";String sign = "";String signCanshu = "biz_no=" + biz_no;try {params = RSACoderUtil.encrypt(signCanshu, "UTF-8",public_key);sign = RSACoderUtil.sign(signCanshu, "UTF-8",private_key);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}Map<String, String> map = new HashMap<>();map.put("app_id", app_id);map.put("charset", "UTF-8");map.put("method", "zhima.customer.certification.query");map.put("version", "1.0");map.put("platform", "zmop");map.put("params", params);map.put("sign", sign);String result = "";String passed = "";try {result = WebUtils.doPost(IP, map, 15000, 15000);JSONObject jsonObject = new JSONObject(result);JSONObject jObject = new JSONObject(RSACoderUtil.decrypt(jsonObject.getString("biz_response"),private_key, "UTF-8"));HHLog.i("mtj", "认证结果==" + jObject.toString());passed = jObject.getString("passed");} catch (Exception e) {e.printStackTrace();HHLog.i("mtj", "认证结果=e=" + e.getMessage());}Message message = new Message();message.what = 1;message.obj = passed;handler.sendMessage(message);}}).start();}}private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);switch (msg.what) {case 0:// 认证getUrl();break;case 1:// 查询String passed = (String) msg.obj;if ("true".equals(passed)) {clickListener.adapterViewClick(1, null);} else {// 未通过clickListener.adapterViewClick(0, null);}biz_no = "";break;default:break;}}};/*** 启动支付宝进行认证* * @param url*            开放平台返回的URL* @param url*/@SuppressWarnings("deprecation")private void doVerify(String url) {if (hasApplication()) {Intent action = new Intent(Intent.ACTION_VIEW);StringBuilder builder = new StringBuilder();// 这里使用固定appid 20000067builder.append("alipays://platformapi/startapp?appId=20000067&url=");builder.append(URLEncoder.encode(url));action.setData(Uri.parse(builder.toString()));context.startActivity(action);} else {// 处理没有安装支付宝的情况DialogUtils.showOptionDialog(context,context.getString(R.string.load_zfb),new OnOptionDialogClickListener() {@Overridepublic void onClick(Dialog paramDialog, View paramView) {// TODO Auto-generated method stubIntent action = new Intent(Intent.ACTION_VIEW);action.setData(Uri.parse("https://m.alipay.com"));action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(action);paramDialog.dismiss();}}, new OnOptionDialogClickListener() {@Overridepublic void onClick(Dialog paramDialog, View paramView) {// TODO Auto-generated method stubparamDialog.dismiss();}}, true);}}/*** 判断是否安装了支付宝* * @return true 为已经安装* @return*/private boolean hasApplication() {PackageManager manager = context.getPackageManager();Intent action = new Intent(Intent.ACTION_VIEW);action.setData(Uri.parse("alipays://"));List list = manager.queryIntentActivities(action,PackageManager.GET_RESOLVED_FILTER);return list != null && list.size() > 0;}
}

认证的初始化、查询认证结果的参数请求都在上面的代码里,里面的一些结果的处理都是自己的demo里用到的。到时候都改成自己的结果处理就行了,请求参数是一样的。

OK,就是放狠话了,怎么了,嘿嘿。。。

关于回调地址,再调起自己的APP内某个页面的方法,请参照,我之前的一篇文章JS启用本地安卓APP的方法

android客户端直接调用芝麻信用的人脸认证相关推荐

  1. android端调用芝麻信用认证相关

    芝麻信用认证的方式有两种: 芝麻信用认证官方网站 本篇文章使用的第二种方案,jar下载地址 芝麻认证逻辑大致分为三步: 1.调用芝麻验证WebAPI,获取bizNO(业务串号) 以及 merchant ...

  2. Android 仿芝麻信用进度条,Android仿支付宝上芝麻信用分雷达图

    一.首先看下支付宝上芝麻信用分的效果图: 二.思路 1.确定雷达图中心点坐标 2.绘制多边形及连接线 3.根据维度值绘制覆盖区域 4.绘制分数 5.绘制每个维度的标题文字和图标 三.实现 获取布局的中 ...

  3. 移动端 芝麻信用评分接入实践详解

    日前接触到接入芝麻信用评分进行信用评估的需求,在项目中用以通过芝麻信用评分高于一定值,进行类似免押金的信用操作: 实践过程中,看了一些人写的过程说明,都比较老,和实际接入的部分相去甚远:于是乎,仔细阅 ...

  4. android 支付宝 targetid,支付宝授权获取芝麻信用分数-芝麻小程序-小程序码在线生成...

    1. 貌似好久没写文章了,今天来记录下最近用支付宝SDK获取芝麻信用分数的过程,以及踩过的坑.2. 个人感觉接芝麻信用分数时还是很简单的,基本都是服务端的任务,我们这边只需要将从支付宝授权获取的aut ...

  5. Android芝麻信用接入(旧版本)

    Android芝麻信用接入(旧版本) 1.添加jar包.权限.manifest配置activity zmxySDKALCmini_V1.01450366738902_release.jar放到libs ...

  6. 芝麻信用分SDK接入,显示芝麻信用授权界面(Android)

    转自:http://blog.csdn.net/coycleipenghui/article/details/52909367 前言:本文主要介绍芝麻信用授权在app中的接入工作,以及代码中出现onC ...

  7. Android 接入 支付宝芝麻信用互查

    Android 接入 支付宝芝麻信用互查 个人笔记 防止忘记 之前H5调用芝麻授权可以 但是随着芝麻分功能计划下架 需要接入作为新产品的 芝麻信用互查 无奈文档有点少 只能东拼西凑的去找有关于旧版的一 ...

  8. Android自定义view之仿支付宝芝麻信用仪表盘 ---by ccy

    自定义view练习 仿支付宝芝麻信用的仪表盘 对比图: 首先是自定义一些属性,可自己再添加,挺基础的,上代码 <?xml version="1.0" encoding=&qu ...

  9. 自定义xy组 android,Android自定义view之仿支付宝芝麻信用仪表盘示例

    自定义view练习 仿支付宝芝麻信用的仪表盘 对比图: 首先是自定义一些属性,可自己再添加,挺基础的,上代码 接着在构造方法里初始化自定义属性和画笔: private void initAttr(At ...

最新文章

  1. elk6.3.1版本+metricbeat监控收集swarm的资源使用情况
  2. 微信分享给朋友无响应
  3. 笔记本高分屏字体模糊_高色域+高分辨率轻薄本推荐,你需要2K屏笔记本电脑么?...
  4. Oralce 数据库 - 查询数据库所有的表和视图实例演示,查询指定用户下所有表和视图方法
  5. 如何面对边缘计算10个痛点?
  6. boost::fibers::future用法的测试程序
  7. Boost: 对uncaught_exceptions函数的测试
  8. 序列化与反序列化(1)Serializable —— Java原生态方法
  9. Linux 64位进程地址空间分布概况
  10. echarts折线图y轴根据数值自动_R语言基础绘图教程——第3章:折线图和带状图...
  11. 怎么看mmdetection版本_如何评价商汤开源的 mm-detection 检测库?
  12. WAMP(windows+apache+mysql+php)
  13. 科研人员还需学python吗_为什么我建议每个开发人员都需要学 Python ?
  14. 怎么查看以前的地图(卫星地图历史影像)?
  15. 会议OA项目之我的审批功能
  16. c语言数码管显示小数点,8位数码管显示正整数和小数及解决鬼影问题
  17. 美团外卖红包个人CPS H5推广链接和小程序码,小程序跳转路径的获取方法
  18. 眼见不为“实”,人们更信任人工智能合成的假脸
  19. Drupal 常用模块汇总
  20. k8s_难产的ingress架构初体验(一)

热门文章

  1. u盘启动 联想一体机_联想一体机怎么设置U盘启动?
  2. 服务器流量异常的原因分析和解决办法
  3. Cryptocell-712安全引擎概述
  4. 查看和调试core文件
  5. 路由器和电脑IP地址、端口号、网卡mac查询方式
  6. 智能家居新体验:“小摩凳”足部按摩器上架小米有品
  7. 天宫之印服务器基于ARM架构的欧拉系统搭建
  8. ARM学习笔记--day10
  9. 智能手持终端CPU选型报告
  10. linux su -含义,linux su命令详解步骤