支付宝蜻蜓刷脸支付——Android

安稳与你 提交于 2019-12-16 09:15:09

支付宝蜻蜓刷脸支付——Android

使用设备:商米 D2

需要用到 支付宝刷脸支付 SDK

  1. 将下载的 支付宝刷脸支付 SDK放入工程 libs 下,并添加该依赖

  2. 商米设备获取设备 SN 编号

     public String getDeviceSN(){
            String MachineSN = null;
            try {
                Class c = Class.forName("android.os.SystemProperties");
                Method get = c.getMethod("get", String.class);
                //获取SN码
                MachineSN = (String) get.invoke(c, "ro.serialno");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return MachineSN;
        }
    
  3. 调用自己后台接口,获取初始化 facepay 需要的 Ali_isv_pid ,需要把第二步中获取到的设备编号传给后台

  4. 第三步从后台获取数据成功后,调用 SDK 的 zolozGetMetaInfo(Map, ZolozCallback) 获取后台需要的 metaInfo

    Map<String, String> map = new HashMap<>();
    map.put("merchantId", 第三步中获取到的 Ali_isv_pid );
    Zoloz.getInstance(context)
                    .zolozGetMetaInfo(map, new ZolozCallback() {
                        @Override
                        public void response(Map smileToPayResponse) {
                            if (smileToPayResponse == null) {
                                ToastUtil.otherThreadToast(Constants.TXT_OTHER);
                                return;
                            }
                            Log.d("zolozGetMetaInfo:  " + smileToPayResponse.toString());
                            String code = (String) smileToPayResponse.get("code");
                            String metaInfo = (String) smileToPayResponse.get("metainfo");
    
                            if (!CODE_SUCCESS.equalsIgnoreCase(code) || metaInfo == null) {
                                //获取 metainfo 失败
                                return;
                            }
                            //获取metainfo成功
                    });
    
  5. 第四步获取到的 metainfo (json 字符串)传给后台,通过后台返回 ZimId 、ZimInitClientData 调起人脸识别

     Map<String, String> protocalMap = new HashMap<>();
            protocalMap.put("zim.init.resp", initFacePayRsp.getZimInitClientData());
            protocalMap.put("smile_mode", "1");//smile_mode 可选,用于指定选择刷脸模式,值为int类型,0: 主屏幕显示(默认值);1:双面屏机具,副屏幕显示
            Zoloz.getInstance(context).zolozVerify(initFacePayRsp.getZimId(), protocalMap, new ZolozCallback() {
                @Override
                public void response(Map smileToPayResponse) {
                    EventBus.getDefault().post(EnumFacePayEvent.FACE_PAY_CLOSE);
                    if (smileToPayResponse == null) {
                        ToastUtil.otherThreadToast(Constants.TXT_OTHER);
                        return;
                    }
                    String code = (String) smileToPayResponse.get("code");
                    String fToken = (String) smileToPayResponse.get("ftoken");
                    String subCode = (String) smileToPayResponse.get("subCode");
                    String msg = (String) smileToPayResponse.get("message");
    
                    Log.d("刷脸认证结果: " + smileToPayResponse.toString());
                    //刷脸认证成功后根据后台相关接口处理支付逻辑
                }
            });
    

    注意: SDK 回调中不是 UI 线程,切勿操作 UI 相关逻辑

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!