Translation disclaimer

Documentation is written in English and subsequently translated. This page, therefore, might not have the most up-to-date content. If any questions arise relating to the accuracy of the translated content, please refer to the English version of the page.

Menu

创建会话以便使用卡进行支付

创建一个 session,以便使用我们的 iOS SDK 来保护您客户的卡详情。

完整示例集成:您可以在此处查看会话生成示例。

引用您的 UI 组件

若要显示您的结账表,则必须首先使用故事板来创建您的布局。

以下是如何利用独特的识别码来引用您的 UI 组件的示例。

Copied!
import AccessCheckoutSDK

class ViewController: UIViewController {

    @IBOutlet weak var panTextField: UITextField!
    @IBOutlet weak var expiryDateTextField: UITextField!
    @IBOutlet weak var cvcTextField: UITextField!

    func submitButtonClickHandler() {
        // code to generate your session
        ...
    }   
    ...

验证卡详情

您可以选择验证客户的卡详情。您可以在[此处]查找说明(/zh/docs/access-worldpay/checkout/ios/card-validator)

创建 session

初始化 AccessCheckoutClient

现在,您必须使用 AccessCheckoutClientBuilder 来初始化 SDK。

为此,您必须提供 BaseURLmerchantID 和其他参数。有关更多信息,请参见下表。

以下是如何利用必需参数来初始化 SDK 的示例。

Copied!
// The AccessCheckoutClientBuilder throws an error if either the accessBaseUrl() or merchantId() calls are omitted 
let accessCheckoutClient:AccessCheckoutClient? = try? AccessCheckoutClientBuilder().accessBaseUrl(<ACCESS_BASE_URL>)
   .merchantId(<MERCHANT_ID>)
   .build()
占位符描述
<ACCESS_BASE_URL>
  • 对于测试用途:https://try.access.worldpay.com/
  • 对于实时用途:https://access.worldpay.com/
<MERCHANT_ID>您的唯一商户标识号由 Worldpay 提供。

检索 session

提交客户的卡详情。

CardDetails 包含提交用于检索 session 的客户数据。

Copied!
// The CardDetailsBuilder throws an error if the expiry date is provided in a format different from MM/YY or MMYY (which will not happen if you use the components with built-in validation provided by the SDK)
let cardDetails:CardDetails = try! CardDetailsBuilder().pan(panTextField.text!)
    .expiryDate(expiryDateTextField.text!)
    .cvc(cvcTextField.text!)
    .build()

指定会话

您必须将要生成的 [SessionType.card] 类型指定为 session

Copied!
try? accessCheckoutClient?.generateSessions(cardDetails: cardDetails, sessionTypes: [SessionType.card]) { result in
    DispatchQueue.main.async {
        switch result {
        case .success(let sessions):
            // The session is returned in a Dictionary[SessionType:String]
            let session = sessions[SessionType.card]
            ...
        case .failure(let error):
            // The error returned is of type AccessCheckoutError 
            let errorMessage = error.message
            ...
        }
    }
}

注释:

  • generateSessions 的调用可作为闭包返回 `Result<[SessionType: String], AccessCheckoutError>’
  • 在处理成功/失败可能导致更新 UI 时,您必须使用闭包中主线程的模式

完整代码示例

以下是上述步骤的完整代码示例。

Copied!
import AccessCheckoutSDK
class MyViewController: UIViewController {
    private let accessBaseUrl = "https://try.access.worldpay.com"
    private let checkoutId = "your-checkout-id"
    @IBOutlet weak var panTextField: UITextField!
    @IBOutlet weak var expiryDateTextField: UITextField!
    @IBOutlet weak var cvcTextField: UITextField!
    @IBAction func submit(_ sender: Any) {
        let cardDetails = try! CardDetailsBuilder().pan(panTextField.text!)
            .expiryDate(expiryDateTextField.text!)
            .cvc(cvcTextField.text!)
            .build()
        let accessCheckoutClient = try? AccessCheckoutClientBuilder().accessBaseUrl(accessBaseUrl)
            .merchantId(checkoutId)
            .build()
        try? accessCheckoutClient?.generateSessions(cardDetails: cardDetails, sessionTypes: [SessionType.card]) { result in
            DispatchQueue.main.async {
                switch result {
                    case .success(let sessionsDictionary):
                        let session = sessionsDictionary[SessionType.card]
                        ...
                    case .failure(let error):
                        ...
                }
            }
        }
    }
}

创建已验证 Token

一旦收到了 CARD session,您就必须创建已验证 Token接受支付

重要信息:CARD session 具有 1 分钟的使用寿命,并且您只能使用一次。如果未在该时间内创建 Token,您就必须创建新的 CARD session 值。


后续步骤


创建已验证 Token