android芝麻认证sdk,芝麻认证

芝麻认证:

项目要做芝麻认证,以为只是简单调一下SDK,其实不然,官方文档并不是很详细,所以把自己踩的坑总结一下:

总体流程如下:

1.调用 customer.certification.initialize 接口进行认证初始化,并获取返回值 biz_no。biz_no 是本次认证的标识,在后面的认证接口和查询接口会用到。

2.跳转到 customer.certification.certify 页面接口或者使用客户端 SDK 让用户完成认证,用户完成认证后会通知商户结果。这个接口支持多种方式接入,可以灵活使用。必须在这个接口的请求中传入 return_url 才能回跳到商户, return_url 也支持多个协议,可以按照需要使用

3 可以根据第一步返回的 biz_no 查询本次认证的状态和结果。

可以看下我从官网扣下的流程图:

ceff6185d7f8?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

通过芝麻提供的暴露接口,商户回调。拿到对应的标识,发起认证。

代码如下:

1.认证初始化(服务)

ZhimaCustomerCertificationInitializeRequest request = new ZhimaCustomerCertificationInitializeRequest();

request.setPlatform("zmop");

request.setTransactionId("ZGYD201610252323000001234");// 必要参数

request.setProductCode("w1010100000000002978");// 必要参数

request.setBizCode("FACE");// 必要参数

request.setIdentityParam("{\"identity_type\":\"CERT_INFO\",\"cert_type\":\"IDENTITY_CARD\",\"cert_name\":\"收委\",\"cert_no\":\"260104197909275964\"}");// 必要参数

request.setExtBizParam("{}");// 必要参数

DefaultZhimaClient client = new DefaultZhimaClient(

"https://zmopenapi.zmxy.com.cn/openapi.do",

"app_id",

"your private_key",

"zhima_public_key");

try {

ZhimaCustomerCertificationInitializeResponse response = (ZhimaCustomerCertificationInitializeResponse) client

.execute(request);

System.out.println(response.isSuccess());

System.out.println(response.getErrorCode());

System.out.println(response.getErrorMessage());

} catch (ZhimaApiException e) {

e.printStackTrace();

}

2.生成认证URL(服务)

ZhimaCustomerCertificationCertifyRequest request = new ZhimaCustomerCertificationCertifyRequest();

request.setPlatform("zmop");

request.setBizNo("ZM201612013000000242400404124269");// 必要参数

// 设置回调地址,必填. 如果需要直接在支付宝APP里面打开回调地址使用alipay协议

// alipay://www.taobao.com 或者 alipays://www.taobao.com,分别对应http和https请求

request.setReturnUrl("http://www.taobao.com");// 必要参数

DefaultZhimaClient client = new DefaultZhimaClient(

"https://zmopenapi.zmxy.com.cn/openapi.do";, "app_id", "your private_key",

"zhima_public_key");

try {

String url = client.generatePageRedirectInvokeUrl(request);

System.out.println("generateCertifyUrl url:" + url);

} catch (ZhimaApiException e) {

e.printStackTrace();

}

本地认证方式:

1.直接根据后台生成的url 做中转:

/**

* 启动支付宝进行认证

* @param url 开放平台返回的URL

*/

private void doVerify(String url) {

if (hasApplication()) {

Intent action = new Intent(Intent.ACTION_VIEW);

StringBuilder builder = new StringBuilder();

// 这里使用固定appid 20000067

builder.append("alipays://platformapi/startapp?appId=20000067&url=");

builder.append(URLEncoder.encode(url));

action.setData(Uri.parse(builder.toString()));

startActivity(action);

} else {

// 处理没有安装支付宝的情况

new AlertDialog.Builder(this)

.setMessage("是否下载并安装支付宝完成认证?")

.setPositiveButton("好的", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Intent action = new Intent(Intent.ACTION_VIEW);

action.setData(Uri.parse("https://m.alipay.com"));

startActivity(action);

}

}).setNegativeButton("算了", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

}).show();

}

}

/**

* 判断是否安装了支付宝

* @return true 为已经安装

*/

private boolean hasApplication() {

PackageManager manager = 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;

}

对应上面这种方式会存在跳转到支付宝页面认证完成后会发现没有对应的回调

对此我给出的解决方式是:

指定activity 处理支付宝的隐似跳转

android:name=".module.login.OcrResultiActivity"

android:screenOrientation="portrait"

android:theme="@style/AppTheme">

android:host="zmcert"

android:path="/ocrresult"

android:scheme="ixmsdk" />

对于上面格式不是很明白的可以看看下面我推荐的博客,讲的很详细,可以学习一下

第二种集成方式:直接app 内集成。 直接拿对应回调处理

final ZMCertification zmCertification = ZMCertification.getInstance();

zmCertification.getBuildInfo();

zmCertification.setZMCertificationListener(new ZMCertificationListener() {

@Override

public void onFinish(boolean isCanceled, boolean isPassed, int errorCode) {

zmCertification.setZMCertificationListener(null);

if (isCanceled)

Toast.makeText(mContext, "cancel : 芝麻验证失败,原因是:" + errorCode, Toast.LENGTH_SHORT).show();

else {

if (isPassed){

setResult(Activity.RESULT_OK);

finish();

Toast.makeText(mContext, "complete : 芝麻验证成功,原因是:" + errorCode, Toast.LENGTH_SHORT).show();

}

else{

Toast.makeText(mContext, "complete : 芝麻验证失败,原因是:" + errorCode, Toast.LENGTH_SHORT).show();

startActivityForResult(new Intent(mContext,FaceResultAliActivity.class),REQUEST_AUTH_RESULT);

}

}

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值