【Android】通过芝麻认证进行实名认证

本文详细介绍了如何使用支付宝的芝麻信用进行实名认证,包括商户入驻、接口调用、参数加密、业务流水凭证生成等关键步骤。同时,提供了Android端认证的两种方式:支付宝端内认证和通过接入SDK实现的App内认证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实名认证通过支付宝的芝麻信用进行认证。但是支付宝文档说的很模糊,也没有给出一个比较完整的方案,所以把我所处理的方法贴出来,仅供参考:

先贴出官方文档:
官方文档(在老界面中找到的。新界面根本没有)

啰嗦一下整体流程,Android需要操作在后面。

一、认证前需要确认:

  1. 完成 商户入驻 流程,并已经完成本 产品签约;
  2. 你需要获取一个 应用 ID,并完成必要的开发 环境配置;
  3. 芝麻开放平台通过 HTTPS 通信进行接口调用,包含系统调用和页面转跳两类接口,相关概念参照 接口调用;参数的加密解密和加签验签参考
    介绍文档;
  4. 业务流水凭证(transaction_id)是商户与芝麻信用系统产生业务交互的唯一凭证,生成规则参考 业务流水凭证;
  5. 部分芝麻信用产品需要商户进行数据反馈,参考文档 数据反馈 部分; 入参中包含 open_id 的产品需要进行 用户授权;
  6. 芝麻开放平台提供了 Java 1.5、Java 1.4 、PHP 和 .NET 的服务端 SDK 供商家快速接入服务使用,SDK 能够在
    开发工具包下载页 获取。

二、总体流程:

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

流程图如下:
在这里插入图片描述

三、认证初始化以及生成认证请求url(服务端完成)

使用服务端接口:zhima.customer.certification.initialize。
调用代码示例:

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();
}

生成认证请求 URL:
使用服务端接口:zhima.customer.certification.certify。

必须要传回调地址 return_url,回调支持在支付宝 App 打开(示例:alipays://www.taobao.com
)、在浏览器打开(示例:https://www.taobao.com )、在商户 App 打开(使用商户 schema 协议)。
后面会重点说schema 协议

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();
}

示例认证 URL:

https://zmopenapi.zmxy.com.cn/openapi.do?sign=rr8lb07UarEXFp2gckiAc28y%2BeHHdq%2BYwWFBW3bl1iYMKK2ScHFYtZRdOxWwBgbqBily5P6455c4QjumfF%2BRQhHgFr6DrA7RfMDp3tQMbTAn7wtAR8vGE8o%2BuCKAgDMzF2lfqCSn%2BGcOtbhSwnNbJDJAsNWerlezkSTu0YrMLvA%3D&signtype=RSA&charset=UTF-8&appid=1000509&method=zhima.customer.certification.certify&version=1.0?ms=TNjy6EwBUey02QxJF4VUB4UjkRL1NjLHrK7XKD1J9sGvjvVPXGT7e1cupoxr%2BBZS1OXbhpf4LTRVzPIgROiyk6az%2BFFU7ud0378ugHn8UbqHu%2FvbeTRsEY0FDAekCv6AmY6xbVZRDkClVuM9k1KlZ6bVRvs%2F1zUgvjP8iSivKA0%3D

Android 操作~重点到了

方式一:通过支付宝端内认证:(不需要对接任何SDK)

1、填写认证的基本信息,通过服务端生成认证请求 URL(前面介绍了)
2、调起支付宝,进行认证
在这里插入图片描述

示例代码:

/**
 * 启动支付宝进行认证
 * @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;
}

3、点击返回,应该返回到我们的APP内的认证结果页。或者是一个H5网页提示认证结果。这就需要通过生成认证请求的url时候的return_url了。前面说了

return_url,回调支持在支付宝 App 打开(示例:alipays://www.taobao.com
)、在浏览器打开(示例:https://www.taobao.com )、在商户 App 打开(使用商户 schema 协议)。

我们主要说一下,schema 协议

android中的scheme是一种页面内跳转协议。 通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;
通过scheme协议,服务器可以定制化告诉App跳转到APP内部页面。

我们可以认证完成后。点击回到我们app。展示一下认证的结果
(1)在Mainefest配置文件中配置需要用scheme协议跳转的Activity

<activity
           android:name=".SchemeActivity"
           <!-- 要想在别的App上能成功调起App,必须添加intent过滤器 -->
               <!-- 协议部分,随便设置 -->
               <intent-filter>
                   <!--协议部分,随便设置-->
                   <data android:scheme="scheme" android:host="my" android:path="/goods" />
                   <!--下面这几行也必须得设置-->
                   <category android:name="android.intent.category.DEFAULT"/>
                   <action android:name="android.intent.action.VIEW"/>
                   <category android:name="android.intent.category.BROWSABLE"/>
               </intent-filter>
       </activity>

(2)那么,String url = “scheme://my/goods”,当然了,我们也可以在后面拼接参数。

ps如果在app内调用:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);

点击后。就能回到SchemeActivity这个页面了。

方式一 大功告成

方式二:App 内认证通过接入 SDK 实现

1、贴出 ANDROID_SDK文档

2、SDK下载

3、翻到最后可下载demo
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值