支付宝小程序SDK集成

本文指导您通过集成支付宝小程序唤起实人认证服务。

操作步骤

  1. 认证初始化、发起认证流程。

     Page({
      data: {
        //全局变量
        certifyInfo: {
    
        }
      },
    
      //点击触发认证初始化
      makeRequest: function () {
        this.fetchCertifyInfo();
      },
    
      //小程序服务端向阿里云服务端发起初始化请求,获取认证ID和认证URL
      fetchCertifyInfo: function () {
        my.request({
          // 示例后端接口URL
          url: 'https://example.com/.../initFaceVerifyController/initFaceVerify',
          // 请求方式
          method: 'POST',
          headers: {
            'content-type': 'application/json',
          },
          dataType: 'json',
          data: {
            serviceParameters: {
              //用户身份证件号码
              certNo: "1******************9",
              //用户姓名。
              certName: "张先生",
              //商户业务页面回调的目标地址。
              returnUrl: "https://www.aliyun.com",
            }
          },
          success: (res) => {
            if (res.data && res.statusCode === 200) {
              // 请求成功,处理返回的数据  
              this.setData({
                certifyInfo: res.data,
              });
              my.alert({
                content: "获取成功"
              });
            } else {
              // 处理错误情况  
              my.alert({
                title: '请求失败',
                content: '无法获取用户信息',
                buttonText: '确定'
              });
            }
          },
          fail: (error) => {
            // 请求失败处理  
            my.alert({
              title: '网络错误',
              content: '请检查网络连接',
              buttonText: '确定'
            });
          }
        });
      },
    
      // 调用支付宝开放能力,发起认证服务
      startAPVerify: function (options, callback) {
        // my.call 是支付宝小程序提供的API或自定义的全局函数
        my.call('startBizService', {
          name: 'open-certify',
          param: JSON.stringify(options),
        }, callback);
      },
    
      // 点击跳转认证页面
      openVerifyPage: function (options) {
        this.startAPVerify({
          certifyId: this.data.certifyInfo.certifyId,
          url: this.data.certifyInfo.certifyUrl,
    
        }, (verifyResult) => {
          // 认证结果回调触发  
          if (verifyResult.resultStatus === '9000') {
            // 验证成功,接入方在此处处理后续的业务逻辑  
            // ...  
            return;
          }
    
          // 用户主动取消认证  
          if (verifyResult.resultStatus === '6001') {
            // 可做下 toast 弱提示  
            my.showToast({
              content: '认证已取消',
              icon: 'none',
              duration: 2000
            });
            return;
          }
    
          const errorCode = verifyResult.result && verifyResult.result.errorCode;
          // 其他结果状态码判断和处理 ...  
        });
      }
    });
    
  2. 验证认证结果。

    回调函数带入的参数verifyResult: { resultStatus:'xx',result: { } }说明如下:

    参数名称

    类型

    描述

    resultStatus

    string

    认证流程结果状态码,具体请参见下文ResultStatus定义。

    result.certifyId

    string

    本次认证流水号certifyId。

    result.errorCode

    string

    业务异常错误码。

    说明

    result的对象可能为null,API接入者代码逻辑需要做防御性处理,避免NPE异常。

    resultStatus枚举取值如下:

    状态码

    描述

    9000

    认证通过。

    6002

    网络异常。

    6001

    用户取消了业务流程,主动退出。

    4000

    业务异常。

    说明
    • resultStatus为6001、6002时,result对象数据为空,接入者不需要获取result对象数据。

    • resultStatus为9000时,由于前端数据是可以修改的,业务方需要去查询认证结果接口的最终状态。

    当resultStatus为4000时,包含的部分错误码如下表格所示 :

    错误码

    描述

    UNKNOWN_ERROR

    未知异常。

    SYSTEM_ERROR

    系统异常。

    USER_IS_NOT_CERTIFY

    用户未认证。