微信青蛙刷脸支付——Android

使用设备: 天之河刷脸设备(开放版)

基础配置

需要用到 微信刷脸支付 SDK

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

  2. 在 application 中初始化微信刷脸 SDK

    /*** 初始化微信刷脸SDK*/private void initFaceSDK() {WxPayFace.getInstance().initWxpayface(context, new IWxPayfaceCallback() {@Overridepublic void response(Map map) throws RemoteException {Log.d("initWxpayface: " + map.toString());String returnCode = (String) map.get(RETURN_CODE);String returnMsg = (String) map.get(RETURN_MSG);if (String.valueOf(EnumWxFacePayPublicErrorCode.SYSTEMERROR).equals(returnCode)){ToastUtils.showShort("系统异常,请重新打开应用重试");}else if (String.valueOf(EnumWxFacePayPublicErrorCode.SUCCESS).equals(returnCode)){}else {ToastUtils.showShort(returnMsg);}}});}
    

刷脸支付

  1. 调用 SDK 获取后台需要的 Rawdata
 WxPayFace.getInstance().getWxpayfaceRawdata(new IWxPayfaceCallback() {@Overridepublic void response(Map map) throws RemoteException {Log.d("getWxpayfaceRawdata: " + map.toString());if (null == map) {return;}String code = (String) map.get(RETURN_CODE);String msg = (String) map.get(RETURN_MSG);String rawdata = map.get(RAWDATA).toString();if (code == null || rawdata == null || !code.equals(EnumWxFacePayPublicErrorCode.SUCCESS.toString())) {new RuntimeException("调用返回非成功信息,return_msg:" + msg + "   ").printStackTrace();return;}getAuthInfo(rawdata);//调用自己后台接口}});
  1. 调用自己后台接口,获取验证信息

      private String appid;private String mch_id;private String sub_mch_id;private String store_id;private String store_name;private String device_id;private String auth_info;private String expires_in;private String out_trade_no;private String nonce_str;
    
  2. 使用第二布获取到的验证信息调用 wxfacepay_app 的刷脸功能

    Map<String, Object> map = new HashMap<>();map.put("appid", authInfoRsp.getAppid());map.put("mch_id", authInfoRsp.getMch_id());map.put("store_id", authInfoRsp.getStore_id());map.put("out_trade_no", authInfoRsp.getOut_trade_no());map.put("total_fee", "1");map.put("face_authtype", EnumFaceAuthType.FACEPAY.toString());map.put("authinfo", authInfoRsp.getAuth_info());map.put("ask_face_permit", "0");map.put("ask_ret_page", "0");map.put("ignore_update_pay_result", "0");WxPayFace.getInstance().getWxpayfaceCode(map, new IWxPayfaceCallback() {@Overridepublic void response(Map info) throws RemoteException {Log.d("getWxpayfaceCode: " + info.toString());if (info == null) {new RuntimeException("调用返回为空").printStackTrace();return;}//用户退出了人脸识别if (info.get("return_code").equals(String.valueOf(EnumWxFacePayPublicErrorCode.EnumGetFaceCodeErrorCode.USER_CANCEL))) {}//用户选择扫码支付else if (info.get("return_code").equals(String.valueOf(EnumWxFacePayPublicErrorCode.EnumGetFaceCodeErrorCode.SCAN_PAYMENT))) {startCodeScanner();}//人脸识别成功else if (info.get("return_code").equals(String.valueOf(EnumWxFacePayPublicErrorCode.SUCCESS))) {String openid = info.get("openid").toString(); // openidString faceCode = info.get("face_code").toString(); // 人脸凭证,用于刷脸支付facePay(openid, faceCode, authInfoRsp.getOut_trade_no());//调用自己后台刷脸支付接口}}});
    
  3. 请求后台刷脸支付接口 facepay

    Map<String, Object> map = new HashMap<>();map.put("store_id", sotreId);map.put("total", view.getTotalStr());map.put("openId", openId);map.put("faceCode", faceCode);map.put("out_trade_no", outTradeNo);map.put("nonce_str", nonceStr);String dataAddSaleStr = buildRequestDataForSign(map, loginRsp.getKey());String sign = MD5Utils.MD5Upper(dataAddSaleStr);RequestBase requestBase = new RequestBase(loginRsp.getAppid(), Constants.WX_FACEPAY, map, sign);homeModel.facePay(requestBase).subscribe(new BaseObserver<FacePayRsp>() {@Overrideprotected void onSuccees(BaseResponse<FacePayRsp> t) throws Exception {updateWxpayfaceBannerState(true);}@Overrideprotected void onCodeError(BaseResponse<FacePayRsp> t) throws Exception {updateWxpayfaceBannerState(false);}@Overrideprotected void onFailure(String errorMsg, boolean isNetWorkError) throws Exception {updateWxpayfaceBannerState(false);}});
    
  4. 得到支付结果后调用 SDK 中 updateWxpayfaceBannerState() 关闭刷脸界面,并处理自己业务逻辑

     HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("banner_state", 0); // 设置运营位状态   0: 可展示运营图片   1: 不可展示运营图片 必填WxPayFace.getInstance().updateWxpayfaceBannerState(map, new IWxPayfaceCallback() {@Overridepublic void response(Map info) throws RemoteException {if (info == null) {new RuntimeException("调用返回为空").printStackTrace();view.facePayResult(false);return;}String code = (String) info.get("return_code"); // 错误码String msg = (String) info.get("return_msg"); // 错误码描述if (code == null || !code.equals("SUCCESS")) {new RuntimeException("调用返回非成功信息,return_msg:" + msg + "   ").printStackTrace();view.facePayResult(false);return;}/*在这里处理您自己的业务逻辑:执行到这里说明用户已经确认支付结果且成功了,此时刷脸支付界面关闭,您可以在这里选择跳转到其它界面*/view.facePayResult(isPaySuccess);}});
    

微信青蛙刷脸支付——Android相关推荐

  1. 刷脸支付时代的来临蜻蜓青蛙刷脸支付收银引领潮流

    刷脸支付时代的来临,两大支付巨头引流新的支付潮流.以支付宝收款为核心的"蜻蜓"支付终端,以微信收款为核心的"青蛙"支付终端各自打造自己的生态圈,商户为迎合消费者 ...

  2. 中国银联“刷脸付”与微信“青蛙”和支付宝“蜻蜓”有什么特点?

    乌镇第六届世界互联网大会上,中国银联携手工商银行.农业银行.中国银行.建设银行.交通银行.邮储银行.中信银行.华夏银行.招商银行.平安银行.浙商银行等60多家商业银行联合发布智能人脸识别产品" ...

  3. 支付宝蜻蜓微信青蛙成本更低适用范围更广

    近日,支付宝推出全新的刷脸支付产品蜻蜓.微信推出全新刷脸支付产品青蛙.相比以往的刷脸设备,接入成本降低了80%左右,同时,蜻蜓.青蛙设备集所有扫码机,POS机等收银设备的功能于一体. 对于目前的刷脸支 ...

  4. share extension 不显示_可折叠双屏、打通“轻会员”,支付宝刷脸设备再升级,不把微信“青蛙Pro”当作竞争...

    一年不到,眨眨眼就能付款的刷脸支付设备"蜻蜓"又又升级了. 在9月24日的支付宝开放日上海站上,支付宝推出两款全新产品--蜻蜓Plus和蜻蜓Extension,前者用上了折叠双屏 ...

  5. android 支付宝和微信支付封装,Android支付宝和微信支付集成

    场景 随着移动支付的兴起,在我们的app'中,会经常有集成支付的需求.这时候一般都会采用微信和支付宝的sdk 来集成 (一)支付宝支付 在使用支付宝支付的过程中,我们是在服务器端生成订单,客户端访问接 ...

  6. 微信开放平台Android应用的签名

    微信开放平台Android应用签名的本质便是我们签名文件keystore的MD5值. keytool -list -v -keystore qj_test.keystore 获得: 别名: naoli ...

  7. 微信5.0 Android版飞机大战破解无敌模式手记

    微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...

  8. android微信支付插件,React Native集成微信支付【Android】

    wechat.jpg 本次博客主要讲解主要在RN中集成微信支付以及被我踩平的坑,需要一定的原生集成经验! 一. 导入微信SDK 用Android Studio打开RN项目中的android部分,在ap ...

  9. 微信Tinker在Android中集成以及使用

    Tinker项目(点击进入) Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码..so库以及资源库,让应用能够在不需要重复安装的情况下实现更新,当然也可以使用Tinker来更新 ...

最新文章

  1. mariadb(第二章)增删改 MariaDB 数据类型
  2. 如何通过结构化智能体完成物理构造任务?| 技术头条
  3. COM原理与应用之COM的实现
  4. 这个图形的体积有限,但表面积却是无穷大
  5. [摘]全文检索引擎Solr系列—–全文检索基本原理
  6. python删除对象引用_使用Python删除内存中的对象
  7. MySQL 数据库救火:磁盘爆满了,怎么办?
  8. Struts2 + Hibernate + Spring 以及javaweb模块问题解决(1)
  9. u-boot工作流程
  10. 【Python-2.7】对列表进行排序
  11. P2986 [USACO10MAR]伟大的奶牛聚集(思维,dp)
  12. python 公众号文章发布_Python获取公众号文章
  13. nginx做文件服务器
  14. 文件打包下载 (ZipArchive)
  15. SonarLint(代码质量检测工具+案例+好习惯养成器)
  16. 无法修改计算机睡眠,win7不能睡眠怎么办,通过两个步骤的设置轻松解决
  17. 论文投稿 基金名称 标准版 中英文
  18. 大学计算机课程进制的转换教程,交大计算机课程(1):各种进制转换
  19. 整型变量和整型常量呀
  20. springboot版本导致Mabatis-Plus报错

热门文章

  1. html 设置button 内文字垂直居中
  2. 【小米问题】 无法打开usb安装,提示需要插入Sim卡解决
  3. 高考志愿填报,文科女生如何选专业?
  4. Oracel 错误: 12520
  5. 重磅!教育部再次审批 179 所高校新增本科 AI 专业
  6. Linux4.4内核构建脚本分析(一)- vmlinux的构建
  7. Sharelist免服务器挂载天翼云 本地+局域网+公网
  8. 用python写一段相机控制程序
  9. 万圣节如何“整鬼”?360智能科技现身欢乐谷
  10. 2024北京交通大学计算机考研信息汇总