webpay-token-ios 是一个 iOS 库,可用于从信用卡创建 WebPay 代币。
webpay-token-ios 支持iOS 7及以上。
您可以使用 Cocoapods(推荐)或手动复制文件来安装。
在您的文件中添加`#import 'Webpay.h'`,然后检查您的目标是否建立无错误。
您需要创建一个桥接头并将`#import "Webpay.h"`添加到头文件中,以便在 Swift 代码中使用库。有关如何创建桥接头的信息,请参阅Apple 的文档。
webpay-token-ios 由 3 个组件组成。
如果您需要一个可以插入视图控制器的应用程序,WPYPaymentViewController 是最佳选择。WPYTokenizer 是为计划从头开始创建自己的视图和视图控制器进行开发的开发者准备的。它提供了访问 WebPay API 的 API。WPYCardFormView 提供了一个带有验证的表单。
使用此库中的任何组件都需要进行初始化。
// objective-c
#import "Webpay.h"
// replace test_public_YOUR_PUBLIC_KEY with your WebPay publishable key
[WPYTokenizer setPublicKey:@"test_public_YOUR_PUBLIC_KEY"];
// swift
// replace test_public_YOUR_PUBLIC_KEY with your WebPay publishable key
WPYTokenizer.setPublicKey("test_public_YOUR_PUBLIC_KEY")
如果您只是想要一个用于`pushViewController:animated`或`presentViewController:animated:completion:`的视图控制器,这就是您想要的。
// objective-c
// version 2.x
WPYPaymentViewController *paymentViewController = [WPYPaymentViewController paymentViewControllerWithPriceTag:@"¥350" callback:^(WPYPaymentViewController *viewController, WPYToken *token, NSError *error) {
if (error)
{
NSLog(@"error:%@", [error localizedDescription]);
}
else
{
//post token to your server
// when transaction is complete
[viewController setPayButtonComplete]; // this will change the button color to green and its title to checkmark
[viewController dismissAfterDelay: 2.0f];
}
}];
[self.navigationController pushViewController:paymentViewController animated:YES];
// version 1.x
WPYPaymentViewController *paymentViewController = [[WPYPaymentViewController alloc] initWithPriceTag:@"¥350" callback:^(WPYPaymentViewController *viewController, WPYToken *token, NSError *error) {
if (error)
{
NSLog(@"error:%@", [error localizedDescription]);
}
else
{
//post token to your server
// when transaction is complete
[viewController setPayButtonComplete]; // this will change the button color to green and its title to checkmark
[viewController dismissAfterDelay: 2.0f];
}
}];
[self.navigationController pushViewController:paymentViewController animated:YES];
// swift
let paymentViewController = WPYPaymentViewController(priceTag: "¥350", callback: { viewController, token, error in
if let newError = error {
println("error:\(error.localizedDescription)")
} else {
//post token to your server
// when transaction is complete
viewController.setPayButtonComplete()
viewController.dismissAfterDelay(2.0)
}
})
self.navigationController?.pushViewController(paymentViewController, animated: true)
如果要使用`initWithPriceTag:card:callback:`在卡表单中填充卡片数据,请使用该方法。
如果您正在创建自己的视图,请使用 WPYTokenizer 创建令牌。
// objective-c
#import "Webpay.h"
// create a credit card model and populate with data
WPYCreditCard *card = [[WPYCreditCard alloc] init];
card.number = @"4242424242424242";
card.expiryYear = 2015;
card.expiryMonth = 12;
card.cvc = @"123";
card.name = @"TARO YAMADA";
// pass card instance and a callback
[WPYTokenizer createTokenFromCard:card
completionBlock:^(WPYToken *token, NSError *error) {
if (error)
{
NSLog(@"error:%@", [error localizedDescription]);
}
else
{
NSLog(@"token:%@", token.tokenId);
}
}];
// swift
// create a credit card model and populate with data
let card = WPYCreditCard()
card.number = "4242424242424242"
card.expiryYear = 2015
card.expiryMonth = WPYMonth.December
card.cvc = "123"
card.name = "TARO YAMADA"
// pass card instance and a callback
WPYTokenizer.createTokenFromCard(card, completionBlock: {token, error in
if let newError = error {
println("\(error)")
} else {
println("\(token.tokenId)")
}
})
WPYCardFormView 是一个信用卡表单视图,当表单有效时调用其代理方法。它可以处理信用卡号填充、安全码掩码以及验证每个字段。
// objective-c
// create view
WPYCreditCard *card = [[WPYCreditCard alloc] init];
WPYCardFormView *cardForm = [[WPYCardFormView alloc] initWithFrame:CGRectMake(0, 0, 320, 300) card:card];
cardForm.delegate = self;
[self.view addSubview: cardForm];
// WPYCardFormDelegate methods
- (void)validFormWithCard:(WPYCreditCard *)creditCard
{
// called when the form is valid.
}
// swift
// create view
let card = WPYCreditCard()
let form = WPYCardFormView(frame: CGRect(x: 0, y: 0, width: 320, height: 320), card: card)
form.delegate = self
self.view.addSubview(form)
// WPYCardFormDelegate methods
func validFormWithCard(creditCard: WPYCreditCard!) {
// called when the form is valid.
}
如果您希望有更精细的控制,请使用 WPYAbstractCardField
的子类。
WPYCreditCard 提供各种验证方法。要验证整个卡,使用 - (BOOL)validate:
// objective-c
NSError *cardError = nil;
if (![card validate:&cardError])
{
NSLog(@"error:%@", [cardError localizedDescription]);
}
// swift
var cardError: NSError?
if !card.validate(&cardError) {
println("error:\(cardError.localizedDescription)")
}
要验证每个属性,请使用 - (BOOL)validatePROPERTY:error:
// objective-c
NSString *number = @"4242424242424242";
NSError *cardError = nil;
WPYCreditCard *card = [[WPYCreditCard alloc] init];
if (![card validateNumber:&number error:&cardError])
{
NSLog(@"error:%@", [cardError localizedDescription]);
}
// swift
var number: AnyObject? = "4242424242424242"
var cardError: NSError?
let card = WPYCreditCard()
if !card.validateNumber(&number, error:&cardError) {
println("error:\(cardError.localizedDescription)")
}
检查品牌名称的部分号码
// objective-c
[WPYCreditCard brandNameFromPartialNumber:@"42"];
// swift
WPYCreditCard.brandNameFromPartialNumber("42")
WPYToken 保存 Webpay API 返回的令牌数据。
此类定义了所有源自 webpay-ios-token 的错误。