芝麻认证

芝麻认证:

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

总体流程如下:

1.调用 customer.certification.initialize 接口进行认证初始化,并获取返回值 biz_no。biz_no 是本次认证的标识,在后面的认证接口和查询接口会用到。
2.跳转到 customer.certification.certify 页面接口或者使用客户端 SDK 让用户完成认证,用户完成认证后会通知商户结果。这个接口支持多种方式接入,可以灵活使用。必须在这个接口的请求中传入 return_url 才能回跳到商户, return_url 也支持多个协议,可以按照需要使用
3 可以根据第一步返回的 biz_no 查询本次认证的状态和结果。

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


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 处理支付宝的隐似跳转

   <activity
            android:name=".module.login.OcrResultiActivity"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="zmcert"
                    android:path="/ocrresult"
                    android:scheme="ixmsdk" />
            </intent-filter>
        </activity>

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

https://blog.csdn.net/lixpjita39/article/details/78201689

第二种集成方式:直接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);
                   }
                }
           }
        });

我把自己写的demo 上传到GitHub 上
地址:https://github.com/guiyanbing/MyApplication2
欢迎一起学习探讨

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容