Andorid微信刷脸支付使用过程解析


本文着重是 开发前的准备工作和开发过程中遇到的一些坑, 不涉及 优化 ,订单查询 ,退款和 具体商户后台server的开发。
开发环境: rk开发板 +华捷艾米A200 camera
最终实现 用自己的应用和商户信息成功进行了一笔刷脸支付过程的demo 并且 不需要搭建自己的商户后台server。

1.创建移动应用

微信开放平台
在微信开放平台中创建 移动应用,填写 包名 和 签名信息 等。创建需要等审核完成,一般审核过程很快。

在这里插入图片描述
然后开通微信支付,未认证用户需要进行认证。认证过程也需要审核,这个比创建应用的时候要慢。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
认证过程需要填写一些企业资料 和收取一定费用 ,好像是 300/年 。

2.申请商户号, 开通APP支付和刷脸支付,关联APPID

微信商户号申请

在这里插入图片描述
点击APP支付 申请开通
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
开通后 在APPID授权管理 标签页中 关联 步骤1 中所申请的 APPID (必须已经完成认证并且开通APP支付权限)。
在这里插入图片描述
如果APPID未认证 会提示
在这里插入图片描述
如果未开通APP支付权限
在这里插入图片描述
所以必须先要认证并且开通支付权限。

正常情况:
在这里插入图片描述
然后去微信开放平台 对应的APP设置中确认 关联。
在这里插入图片描述
在这里插入图片描述
至此绑定完成


3.开发指引 | 微信刷脸支付

微信刷脸支付 开发指引
微信刷脸支付SDK 目前应该也在快速迭代中,前几天还是1.30版本,现在就已经更新2.10版本了。
使用方式:

  1. 安装人脸App。WxPayFace 微信刷脸支付SDK
  2. 商户接入人脸SDK。项目中引入1中的aar包。商户APP demo
  3. 商户server .商户server demo 此server是在商户自己开发整套流程的参考demo ,如果只是跑通商户App demo 则不需要此server。


4.刷脸支付流程

名词解释

人脸授权 :通过人脸识别,返回微信用户信息(openid, face_code)。

face_code:人脸凭证。常用于人脸支付,作为订单的支付凭证。

时序图
商户APP 微信人脸sdk 商户server 微信支付后台API 1. 程序启动时初始化 initWxpayface doInitWxpayface(返回初始化结果) 2. 获取数据 getWxpayfaceRawdata doGetWxpayfaceRawdata(返回rawdata) 3.获取SDK调用凭证 3.get_wxpayface_authinfo(rawdata) 返回authinfo 返回authinfo 4. 进行人脸识别 getWxpayfaceCode 启动人脸识别activity 进行人脸识别 完成人脸识别 回调返回人脸识别结果(face_code, openid) doWxPayfaceCodeCallback(返回人脸识别结果) 进行支付 5. 发起订单人脸支付 发起订单支付facepay(face_code, orderinfo) 返回支付结果 返回支付结果 查询支付结果 查询订单状态queryorder 返回订单状态 loop [ 直到:返回确定的订单状态(成功/失败/订单不存在)/超过轮询时间 ] 返回支付结果 撤销交易,以避免用户扣款,而没有发货的情况(撤销可后台异步进行) 3. 撤销交易reverseorder 返回撤销结果 loop [ 撤销交易直到成功 ] opt [ 轮询结束仍然没有支付成功 ] alt [ 支付成功/失败 ] [ 支付结果未明(比如:支付中/网络超时) ] 6. 更新支付结果updateWxpayfacePayResult(callback) 用户确认支付结果 关闭人脸应用界面 doUpdatePayResultCallBack(界面关闭,触发回调) 程序退出(...) 6. 释放资源 releaseWxpayface 商户APP 微信人脸sdk 商户server 微信支付后台API

注:

  1. 初始化 initWxpayface, 只需要在程序启动时调用;
  2. 释放资源 releaseWxpayface,只需要在程序退出时调用;
    每个方法的具体参数可在文档内查看。
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
要在 Android使用 ZXing 实现扫码,需要进行以下步骤: 1. 在 build.gradle 文件中添加以下依赖: ``` dependencies { implementation 'com.google.zxing:core:3.4.1' implementation 'com.journeyapps:zxing-android-embedded:3.5.0' } ``` 2. 在布局文件中添加一个 SurfaceView 用于预览摄像头捕获的图像,并添加一个按钮用于触发扫码操作: ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <SurfaceView android:id="@+id/surface_view" android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:id="@+id/scan_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Scan" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" /> </RelativeLayout> ``` 3. 在 Activity 中实现扫码逻辑。首先,初始化 ZXing 的核心类 CaptureManager 和 ViewfinderView,然后在 onResume() 方法中启动摄像头预览,并在 onPause() 方法中停止预览。在按钮点击事件中触发扫码操作,并在 onActivityResult() 方法中获取扫码结果。 ``` public class ScanActivity extends AppCompatActivity implements OnScanListener { private CaptureManager captureManager; private SurfaceView surfaceView; private ViewfinderView viewfinderView; private Button scanButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scan); surfaceView = findViewById(R.id.surface_view); viewfinderView = findViewById(R.id.viewfinder_view); scanButton = findViewById(R.id.scan_button); captureManager = new CaptureManager(this, surfaceView, viewfinderView); captureManager.initializeFromIntent(getIntent(), savedInstanceState); captureManager.setOnScanListener(this); scanButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { captureManager.decode(); } }); } @Override protected void onResume() { super.onResume(); captureManager.onResume(); } @Override protected void onPause() { super.onPause(); captureManager.onPause(); } @Override protected void onDestroy() { super.onDestroy(); captureManager.onDestroy(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); captureManager.onSaveInstanceState(outState); } @Override public void onScanResult(String result) { Toast.makeText(this, result, Toast.LENGTH_SHORT).show(); } @Override public void onScanError(Exception e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); } @Override public void onScanCancel() { // Do nothing } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); captureManager.onActivityResult(requestCode, resultCode, data); } } ``` 以上就是使用 ZXing 实现扫码的基本步骤。你可以根据实际需求对代码进行修改和扩展。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值