卡验证
在处理您客户的卡之前验证卡的详情。
警告:该验证并不会检查客户的卡详情是否正确。验证器只会检查所输入的详情格式。
开始
若要集成验证功能,您必须创建一个 AccessCheckoutCardValidationListener
的实施。在 CardValidationConfig
中传入安卓 UI 元素,以便使用 AccessCheckoutValidationInitialiser
来初始化验证。
完整示例集成:您可以在
实施 AccessCheckoutCardValidationListener
若要接收客户的卡详情的验证结果,则您必须创建自己的实施 AccessCheckoutCardValidationListener
package com.worldpay.access.checkout.sample.code
import com.worldpay.access.checkout.client.validation.listener.AccessCheckoutCardValidationListener
import com.worldpay.access.checkout.client.validation.model.CardBrand
class CardValidationListener : AccessCheckoutCardValidationListener {
override fun onCvcValidated(isValid: Boolean) {
//TODO: handle the cvc validation result
}
override fun onPanValidated(isValid: Boolean) {
//TODO: handle the pan validation result
}
override fun onBrandChange(cardBrand : CardBrand?) {
//TODO: handle the card brand change
}
override fun onExpiryDateValidated(isValid: Boolean) {
//TODO: handle the expiry date validation result
}
override fun onValidationSuccess() {
//TODO: handle the form when the validation is complete i.e. all fields are valid
}
}
package com.worldpay.access.checkout.sample.code
import com.worldpay.access.checkout.client.validation.listener.AccessCheckoutCardValidationListener;
import com.worldpay.access.checkout.client.validation.model.CardBrand;
public class CardValidationListener implements AccessCheckoutCardValidationListener {
@Override
public void onCvcValidated(Boolean isValid) {
//TODO: handle the cvc validation result
}
@Override
public void onPanValidated(Boolean isValid) {
//TODO: handle the pan validation result
}
@Override
public void onBrandChange(CardBrand cardBrand) {
//TODO: handle the card brand change
}
@Override
public void onExpiryDateValidated(Boolean isValid) {
//TODO: handle the expiry date validation result
}
@Override
public void onValidationSuccess() {
//TODO: handle the form when the validation is complete i.e. all fields are valid
}
}
功能和参数描述
方法 | 描述 |
---|---|
onCvcValidated | 该方法与 CVC 字段的有效性一起调用。 isValid 表示该字段是处于有效还是无效状态。 |
onPanValidated | 该方法与 PAN 字段的有效性一起调用。 isValid 表示该字段是处于有效还是无效状态。 |
onBrandChange | 该方法与基于您客户输入的详情的卡品牌一起调用。您可以使用该方法来确定可作为 UI 效果应用的卡徽标。如果无法识别卡品牌,则返回 null 响应。卡品牌包含 |
onExpiryDateValidated | 该方法与过期日期字段的有效性一起调用。 isValid 表示该字段是处于有效还是无效状态。 |
onValidationSuccess | 该方法在所有字段都处于有效状态时才调用。通常,您可以用它来启用提交按钮。 |
初始化卡验证
在实施 AccessCheckoutCardValidationListener
之后,您必须为视图初始化验证。为此,首先要使用构造器来创建一个 CardValidationConfig
,如下所示。然后用它来初始化验证。
package com.worldpay.access.checkout.sample.code
// android library imports omitted
import com.worldpay.access.checkout.client.validation.AccessCheckoutValidationInitialiser
import com.worldpay.access.checkout.client.validation.config.CardValidationConfig
class MainActivity : AppCompatActivity() {
private val baseUrl = "TARGET_BASE_URL"
// other fields omitted
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val pan = findViewById<EditText>(R.id.pan)
val cvc = findViewById<EditText>(R.id.cvc)
val expiryDate = findViewById<EditText>(R.id.expiryDate)
// other view references omitted
val cardValidationListener = CardValidationListener()
val cardValidationConfig = CardValidationConfig.Builder()
.baseUrl(baseUrl)
.pan(pan)
.expiryDate(expiryDate)
.cvc(cvc)
.validationListener(cardValidationListener)
.lifecycleOwner(this)
.build()
AccessCheckoutValidationInitialiser.initialise(cardValidationConfig)
//TODO: generate session here
}
}
package com.worldpay.access.checkout.sample.code
// android library imports omitted
import com.worldpay.access.checkout.client.validation.AccessCheckoutValidationInitialiser;
import com.worldpay.access.checkout.client.validation.config.CardValidationConfig;
import com.worldpay.access.checkout.client.validation.listener.AccessCheckoutCardValidationListener;
public class MainActivity extends AppCompatActivity {
private String baseUrl = "TARGET_BASE_URL";
// other fields omitted
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EditText pan = findViewById<EditText>(R.id.pan);
EditText cvc = findViewById<EditText>(R.id.cvc);
EditText expiryDate = findViewById<EditText>(R.id.expiryDate);
// other view references omitted
AccessCheckoutCardValidationListener cardValidationListener = CardValidationListener();
CardValidationConfig cardValidationConfig = CardValidationConfig.Builder()
.baseUrl(baseUrl)
.pan(pan)
.expiryDate(expiryDate)
.cvc(cvc)
.validationListener(cardValidationListener)
.lifecycleOwner(this)
.build();
AccessCheckoutValidationInitialiser.initialise(cardValidationConfig);
//TODO: generate session here
}
}
卡验证规则
SDK 中的验证逻辑是基于任何卡类型的一套默认规则。具体品牌规则可从 CardTypes
JSON 文件中获取,其中包含了每个品牌的验证规则和卡品牌徽标。徽标分为 SVG
和 PNG
两种格式。
Validation rules
下表列出了我们的 SDK 用于验证您的客户卡详情的规则。
卡名称 | BIN 范围 | PAN 长度 | CVC 长度 |
---|---|---|---|
Amex | 34、37 | 15 | 4 |
Diners | 300-305、3095、36、38、39 | 14、16、19 | 3 |
Discover | 6011、644 - 649、65 | 16、19 | 3 |
JCB | 2131、1800、3088 - 3094、3096 - 3102、3112 - 3120、3158 - 3159、3337 - 3349、3528 - 3589 | 16、17、18、19 | 3 |
Maestro | 493698、500000 - 506698、506779 - 508999、56 - 59、63、67、6 | 12、13、14、15、16、17、18、19 | 3 |
MasterCard | 51 - 55、2221 - 2229、223 - 229、23 - 26、270 - 271、2720:使用 22 - 27 | 16 | 3 优化 |
Visa | 4 | 13、16、18、19 | 3 |
卡品牌限制
SDK 可让您选择性地提供所支持的卡品牌列表。也就是说,如果您不支持特定卡品牌,在识别到不支持的品牌时,SDK 会通知您无效的 PAN 代码。
默认情况下,SDK 允许任何品牌的卡。如果您不希望限制自己接受的卡,则不需要传送任何配置。
配置示例
若要限制您接受的卡品牌,只需传送在初始化 SDK 时您的确希望接受的品牌阵列即可。
以下验证配置可限制 SDK 只接受 American Express、Visa 或 Mastercard BIN 系列。
val cardValidationConfig = CardValidationConfig.Builder()
...
.acceptedCardBrands(arrayOf("visa", "mastercard", "amex"))
...
.build()
val cardValidationConfig = CardValidationConfig.Builder() ... .acceptedCardBrands(arrayOf("visa", "mastercard", "amex")) ... .build()
CardValidationConfig cardValidationConfig = new CardValidationConfig.Builder()
...
.acceptedCardBrands(new String[] {"visa", "mastercard", "amex"})
...
.build();
CardValidationConfig cardValidationConfig = new CardValidationConfig.Builder() ... .acceptedCardBrands(new String[] {"visa", "mastercard", "amex"}) ... .build();
当前支持的卡品牌
SDK 能够识别以下卡品牌:
品牌 | 代码 |
---|---|
American Express | "amex" |
Diners | "diners" |
Discover | "discover" |
JCB | "jcb" |
Maestro | "maestro" |
Mastercard | "mastercard" |
Visa | "visa" |
如果 SDK 无法识别作为上述品牌之一的 PAN,只要它符合有效 PAN 的一般标准,则也会被准许。
PAN 格式化
SDK 允许根据客户类型进行 PAN 格式设置。在默认情况下,此功能被禁用。
PAN 的格式如下所示:
卡类型 | 格式设置 |
---|---|
Visa、Mastercard、JCB、Discover、Diners、Maestro | XXXX XXXX XXXX XXXX |
Amex | XXXX XXXXXX XXXXX |
启用 PAN 格式设置
如要启用 PAN 格式设置行为,只需调用构造器中的 enablePanFormatting
方法即可。
val cardValidationConfig = CardValidationConfig.Builder()
...
.enablePanFormatting()
...
.build()
val cardValidationConfig = CardValidationConfig.Builder() ... .enablePanFormatting() ... .build()
CardValidationConfig cardValidationConfig = new CardValidationConfig.Builder()
...
.enablePanFormatting()
...
.build();
CardValidationConfig cardValidationConfig = new CardValidationConfig.Builder() ... .enablePanFormatting() ... .build();
后续步骤