- Home
- Chinese Welcome
- Quick Links
- Access Worldpay
- Checkout SDK
- iOS SDK
- 创建会话以便使用卡和 CVC 进行支付
创建会话以便使用卡和 CVC 进行支付
为卡详情和 CVC 创建单独的会话,从而使用我们的 iOS SDK 来确保您客户支付详情的安全。
完整示例集成:您可以在
引用您的 UI 组件
若要显示您的结账表,则必须首先使用故事板来创建您的布局。
以下是如何利用独特的识别码来引用您的 UI 组件的示例。
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 sessions
...
} ...
...
Card validation
您可以选择验证客户的卡详情。您可以在[此处]查找说明(/zh/docs/access-worldpay/checkout/ios/card-validator)
创建 session
初始化 AccessCheckoutClientBuilder
现在,您必须使用 AccessCheckoutClientBuilder
来初始化 SDK。
为此,您必须提供 BaseURL
、merchantID
和其他参数。
以下是如何利用必需参数来初始化 SDK 的示例。
// 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
的客户数据。
// 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]
和 [SessionType.cvc]
类型指定为 session
。
try? accessCheckoutClient?.generateSessions(cardDetails: cardDetails, sessionTypes: [SessionType.card, SessionType.cvc]) { result in
DispatchQueue.main.async {
switch result {
case .success(let sessions):
// The session is returned in a Dictionary[SessionType:String]
let cardSession = sessions[SessionType.card]
let cvcSession = sessions[SessionType.cvc]
...
case .failure(let error):
// The error returned is of type AccessCheckoutError
let errorMessage = error.message
...
}
}
}
try? accessCheckoutClient?.generateSessions(cardDetails: cardDetails, sessionTypes: [SessionType.card, SessionType.cvc]) { result in DispatchQueue.main.async { switch result { case .success(let sessions): // The session is returned in a Dictionary[SessionType:String] let cardSession = sessions[SessionType.card] let cvcSession = sessions[SessionType.cvc] ... case .failure(let error): // The error returned is of type AccessCheckoutError let errorMessage = error.message ... } } }
注释:
- 对
generateSessions
的调用可作为闭包返回Result<[SessionType: String], AccessCheckoutError>
- 在处理成功/失败可能导致更新 UI 时,您必须使用闭包中主线程的模式
完整代码示例
以下是上述步骤的完整代码示例。
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, SessionType.cvc]) { result in
DispatchQueue.main.async {
switch result {
case .success(let sessionsDictionary):
let cardSession = sessionsDictionary[SessionType.card]
let cvcSession = sessionsDictionary[SessionType.cvc]
...
case .failure(let error):
...
}
}
}
}
}
Create a verified token
一旦收到了 CARD session
,您就必须创建session
配合使用,以便
重要信息:CARD session
具有 1 分钟的使用寿命,并且您只能使用一次。如果未在该时间内创建 Token,您就必须创建新的 CARD session
值。
接受支付
Use the value of the CVC session
and the verified token in our card/checkout paymentInstrument
to take a card on file payment.
重要信息:CVC session
具有 15 分钟的使用寿命,并且您只能使用一次。如果未在该时间内接受支付,您就必须创建新的 CVC session
值。您可以利用
该 paymentInstrument
可用于任何预存卡号资源(
需要仅为 CVC 创建会话吗?查看下面的集成示例:
仅为 CVC 创建会话
发送您客户的 CVC,从而创建一个支付 CVC session
。
完整示例集成:您可以在
引用您的 UI 组件
若要显示您的结账表,则必须首先使用故事板来创建您的布局。
以下是如何利用独特的识别码来引用您的 UI 组件的示例。
import AccessCheckoutSDK
class ViewController: UIViewController {
@IBOutlet weak var cvcTextField: UITextField!
func submitButtonClickHandler() {
// code to generate your session
...
}
...
import AccessCheckoutSDK class ViewController: UIViewController { @IBOutlet weak var cvcTextField: UITextField! func submitButtonClickHandler() { // code to generate your session ... } ...
CVC validation
您可以选择验证客户的 CVC。您可以在[此处]查找说明(/zh/docs/access-worldpay/checkout/ios/cvc-validator)
创建 CVC session
初始化 AccessCheckoutClientBuilder
现在,您必须使用 AccessCheckoutClientBuilder
来初始化 SDK。
为此,您必须提供 BaseURL
、merchantID
和其他参数。
以下是如何利用必需参数来初始化 SDK 的示例。
// The AccessCheckoutClientBuilder throws an exception 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 exception 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
的客户数据。
let cardDetails:CardDetails = try! CardDetailsBuilder().cvc(cvcTextField.text!)
.build()
let cardDetails:CardDetails = try! CardDetailsBuilder().cvc(cvcTextField.text!) .build()
指定会话
您必须将要生成的[SessionType.cvc]
类型指定为session
。
try? accessCheckoutClient?.generateSessions(cardDetails: cardDetails, sessionTypes: [SessionType.cvc]) { result in
DispatchQueue.main.async {
switch result {
case .success(let sessions):
// The session is returned in a Dictionary[SessionType:String]
let session = sessions[SessionType.cvc]
...
case .failure(let error):
// The error returned is of type AccessCheckoutError
let errorMessage = error.message
...
}
}
}
try? accessCheckoutClient?.generateSessions(cardDetails: cardDetails, sessionTypes: [SessionType.cvc]) { result in DispatchQueue.main.async { switch result { case .success(let sessions): // The session is returned in a Dictionary[SessionType:String] let session = sessions[SessionType.cvc] ... case .failure(let error): // The error returned is of type AccessCheckoutError let errorMessage = error.message ... } } }
建议:
- 对
generateSessions
的调用可作为闭包返回Result[SessionType: String], AccessCheckoutError>
- 在处理成功/失败可能导致更新 UI 时,您必须使用闭包中主线程的模式
完整代码示例
以下是上述步骤的完整代码示例。
import AccessCheckoutSDK
class MyViewController: UIViewController {
private let accessBaseUrl = "https://try.access.worldpay.com"
private let checkoutId = "your-checkout-id"
@IBOutlet weak var cvcTextField: UITextField!
@IBAction func submit(_ sender: Any) {
let cardDetails = try! CardDetailsBuilder().cvc(cvcTextField.text!)
.build()
let accessCheckoutClient = try? AccessCheckoutClientBuilder().accessBaseUrl(accessBaseUrl)
.merchantId(checkoutId)
.build()
try? accessCheckoutClient?.generateSessions(cardDetails: cardDetails, sessionTypes: [SessionType.card, SessionType.cvc]) { result in
DispatchQueue.main.async {
switch result {
case .success(let sessionsDictionary):
let cardSession = sessionsDictionary[SessionType.card]
let cvcSession = sessionsDictionary[SessionType.cvc]
...
case .failure(let error):
...
}
}
}
}
}
Take a payment
Use the value of the CVC session
and your stored verified token in our card/checkout paymentInstrument
to take a card on file payment.
重要信息:CVC session
具有 15 分钟的使用寿命,并且您只能使用一次。如果未在该时间内接受支付,您就必须创建新的 CVC session
值。
该 paymentInstrument
可用于任何预存卡号资源(
Next steps