创建会话以便使用卡进行支付
创建一个 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
...
}
...
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。
为此,您必须提供 BaseURL
、merchantID
和其他参数。有关更多信息,请参见下表。
以下是如何利用必需参数来初始化 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()
// 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> |
|
<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()
// 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
...
}
}
}
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):
...
}
}
}
}
}
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
,您就必须创建
重要信息:CARD session
具有 1 分钟的使用寿命,并且您只能使用一次。如果未在该时间内创建 Token,您就必须创建新的 CARD session
值。
后续步骤