Headless SDK Enrollment (安卓系统)

本页为您提供 YunoHeadless SDK Android 注册指南。

适用于 Android 的 YunoHeadless SDK 为注册支付方式和标记卡提供了灵活、无用户界面的解决方案。

该 SDK 可完全控制付款方式注册流程,非常适合有以下需求的商家:

  • 需要全面控制用户界面和用户体验
  • 希望实施自定义注册流程
  • 需要先进的集成能力

Headless SDK 包括以下核心功能:

  • 卡片标记化
  • 安全的付款方式注册
  • 直接访问应用程序接口
  • 自定义错误处理

对于需要预建用户界面解决方案或更简单集成的商家,可考虑使用我们的其他 SDK 实施方案:

要求

在开始 Yuno Android SDK 集成之前,请确保您的项目符合技术要求。此外,还要确保具备以下先决条件:

  • 您必须拥有一个激活的 Yuno 帐户
  • 您需要 Yuno API 凭据:
    • account_id
    • public-api-key
    • private-secret-key

您可以从Yuno 面板的 "开发人员 "部分获取这些证书。需要这些证书才能

  • 创建一个 customer在注册付款方式前必须填写
  • 创建一个 customer_session初始化报名流程
📘

SDK 版本信息

通过访问发布说明或访问Yuno Android SDK 资源库来验证当前的 SDK 版本。

步骤 1:创建客户

在注册付款方式之前,使用创建客户 endpoint 创建客户。

先决条件

  • 活跃的 Yuno 账户
  • 应用程序接口凭据

要求:

  • 识别注册付款方式的人
  • 启用保存的付款方式功能
  • 跟踪注册历史
  • 安全存储客户 ID,以备下一步使用。

步骤 2:创建客户会话

创建一个新的 customer_session 使用 创建客户会话 endpoint:

先决条件

  • 步骤 1 中的客户 ID
  • 应用程序接口凭据

必须采取的行动:

  • 在请求中包含客户 ID
  • 存储返回的 customer_session 身份证
  • 生成一个新的 customer_session 为每种付款方式注册。

第 3 步:将 SDK 添加到项目中

先决条件

  • 安卓项目设置
  • Gradle 配置访问
  1. 添加版本库源:
maven { url "https://yunopayments.jfrog.io/artifactory/snapshots-libs-release" }
  1. 添加 SDK 依赖关系:
dependencies {
    implementation 'com.yuno.payments:android-sdk:{last_version}'
}
📘

需要互联网许可

Yuno SDK 自动包含 INTERNET 权限,这是网络请求所必需的。确保 AndroidManifest.xml 包含以下内容:

<uses-permission android:name="android.permission.INTERNET" />

步骤 4:使用公钥Initialize Headless SDK

Yuno 面板读取公共 API 密钥。

如果还没有实施自定义应用程序,请创建一个。在 onCreate() 方法,调用initialize 函数 (Yuno.initialize):

class CustomApplication : Application() {
  override fun onCreate() {
    super.onCreate()
    Yuno.initialize(
      this,
      PUBLIC_API_KEY,
      config: YunoConfig,
    )
  }
}

步骤 5:创建客户会话

开始注册程序:

  1. 使用 创建客户 endpoint。响应将包括客户 id.

  2. 使用以下命令创建客户会话

endpoint 响应将提供 customer_session 注册所需的值。

🚧

客户会话生成

您需要生成一个新的 customer_session 每次注册付款方式时都要填写。

步骤 6:创建注册付款方式对象

使用 "注册付款方式 "endpoint 创建注册付款方式对象,以便为注册设置Headless SDK 集成。创建该对象时,请指定客户可以注册的支付方式类型。目前,Headless SDK 只支持CARD支付方式类型。

📘

卡片验证

若要在注册前验证卡片(零值授权),请将 verify 对象。 了解更多

第 7 步:启动注册程序

使用 apiClientEnroll 函数来启动注册流程。该功能需要配置参数来定义如何处理注册。下表描述了所需参数:

参数说明
country_code该参数用于确定正在配置支付流程的国家。支持的国家及其 country_code 可在 国家覆盖范围 page.
customer_session指当前注册的 客户会议 收到的答复 创建客户会话 endpoint。例如 438413b7-4921-41e4-b8f3-28a5a0141638

下面的代码块显示了一个参数配置示例:

override fun onCreate(savedInstanceState: Bundle?) {
	val apiClientEnroll = Yuno.apiClientEnroll(
  	country_code = "CO",
    
    customerSession = "eec6578e-ac2f-40a0-8065-25b5957f6dd3",

    context = this 
  )
 }

步骤 8:生成保险库token

收集所有必要的客户信息后,创建一个 vaulted_token 使用 apiClientEnroll.continueEnrollment 函数。由于这是一个异步函数,因此使用 try/catch 块来处理可能出现的任何错误。下面的示例展示了如何创建一个 vaulted_token:

apiClientEnroll.continueEnrollment(
    collectedData = EnrollmentCollectedData(
        customerSession = "customer_session",
    paymentMethod = 注册方式(
           类型 = "CARD",
           卡片 = 卡片数据(
               保存 = true,
               详情 = 详情(
                   有效期月 = 11,
                   有效期年 = 55,
                   卡号 = "4111111111111111",
                   securityCode = "123",
                   holderName = "Firstname Lastname",
                   type = CardType.DEBIT
               ),
           customer = Customer(
               id = "id",
               merchantCustomerId = "merchant_customer_id",
               firstName = "firstName",
 email "[email ]",
               country = "CO",
               document = Document(
                   documentType = "PAS",
                   documentNumber = "PAS12312"
               ),
             phone = Phone(
                   number = "321123321123",
                   country_code = "57"
               )
            )
      )
   ),
  context = this
 )

"(《世界人权宣言》) apiClientEnroll.continueEnrollment 函数返回一个扩展了 LiveData.您可以观察到作为标准 LiveData 有类型 SingleLiveEvent<Map<String, Any?>>.这 LiveData 只发射一次,并返回一个 Map 包含完整的响应。下面是调用 apiClientEnroll.continueEnrollment:

{
  "vaulted_token": "9104911d-5df9-429e-8488-ad41abea1a4b",
  "status": "SUCCEEDED",
  "customer": {
    "session": "eec6578e-ac2f-40a0-8065-25b5957f6dd3"
  }
}

下面的代码块显示了一个观察响应的示例:

apiClientPayment.continueEnrollment(data, context).observe(context) { response -> val status = response["status"] as String?
   val status = response["status"] as String?
   val vauldtedtoken = response["vaulted_token"] as String?
}
📘

Webhook 状态跟踪

考虑使用通过Webhooks 收到的注册状态。Yuno 建议始终使用该状态作为平台业务决策的基础。