微信青蛙刷脸支付——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. python如何实现别人调用自己的API
  2. 一文看透 Redis 分布式锁进化史(解读 + 缺陷分析)(转)
  3. Acrobat XI安装教程
  4. 面试字节跳动Android工程师该怎么准备?深度解析,值得收藏
  5. oracle test传入参数,oracle存储过程,test(测试)时传自定义类型参数问题
  6. python写抽奖转盘_[宜配屋]听图阁
  7. JSP Include 文件方式
  8. npm安装任何包都报错的解决办法
  9. SpringCloud_Eureka集群配置
  10. 【c++】指针常量与常量指针
  11. ubuntu下点击安装VMware tools,没有压缩包文件
  12. bzoj1831 逆序对 (dp+树状数组)
  13. OpenCV中对模糊操作的总结
  14. 模电试题_数电试题 综合测试
  15. OpenHarmony代码下载编译流程记录
  16. Electron屏幕截图的技术方案MacWindows
  17. iOS-利用粒子发射器(CAEmitterLayer) 制作发射动画
  18. 鱼鹰软件签约知名创意活动公司HOFO公关
  19. 英伟达显卡玩CF怎么提高帧数
  20. [散分] 眼见为实?_眼见为实

热门文章

  1. 最新黄金市场价格分析之干掉调整浪
  2. Linux系统常见的压缩与解压命令
  3. mongodb orm java_基于Java的ORM框架 Mongodb-ORM
  4. Bugku CTF Web 网站被黑
  5. Oracle中的select into
  6. C语言——图解冒泡排序算法
  7. linux 采集卡 设备名,横跨Windows、Linux等平台的高性能图像采集卡PCIe-8604
  8. centos7删除文件夹命令_centos彻底删除文件夹、文件命令(centos 新建、删除、移动、复制等命令)讲解...
  9. 【想进阿里的小菜鸟】有趣的哥德巴赫猜想
  10. 阿里将新零售战略延伸至印度市场,以求在该市场打开局面