简介
PayPal Here SDK 允许 iOS 应用使用非接触式/EMV 芯片卡读卡器或磁条卡滑轨处理现场信用卡交易。PayPal Here SDK 的本地库允许您
- 与 PayPal 硬件交互 — 侦测、连接并监听来自 PayPal Here 音频插孔式卡滑轨的事件。
- 处理持卡人支付 — 当您通过 PayPal Here 滑轨刷卡时,卡数据会被立即加密。加密包可以与交易数据一起发送到 PayPal 处理。
开发者应使用 PayPal Here SDK 来实现极简集成的高质量支付流程。主要优势包括
- 低廉、透明定价:美国商家每笔交易支付仅为 2.7%(或输入交易为 3.5% + 0.15 美元),包括美国运通等卡,无额外隐藏或月费。
- 安全与安全:PayPal 的解决方案使用加密滑轨,确保卡数据永远不会对商家或任何其他人可用。
- 现场客户支持:无论何时需要支持,我们都有客户支持团队可供帮助。访问我们的网站,获取更多关于 PayPal Here 的信息。
作为 SDK 的替代方案,开发者也可以使用 URI 框架,允许一个应用(或移动网页)直接链接到 PayPal Here 应用以完成支付。使用此方法,商家在另一个应用中轻触按钮或链接,将打开设备上预安装的 PayPal Here 应用,PayPal Here 应用将预先填充原始订单信息,在 PayPal Here 应用中收集支付(刷卡),并将商家返回到原始应用/网页。此功能适用于美国的 iOS 和 Android 以及英国、澳大利亚和日本的 Android。
支持材料
- API 文档可在此找到:http://paypal.github.io/paypal-here-sdk-ios-distribution/index.html。
- 样本应用:请查看并修改本仓库中可用的样本应用,以进行实验和学习有关SDK及其功能。
- 如果您正在从PayPal Here SDK的先前版本(v 1.5)迁移,请参阅我们的迁移指南。
安装
我们推荐使用Cocoapods进行安装,使用命令pod 'PayPalHereSDK'
。
您也可以使用不同的pod subspec将PayPalHereSDK切换到发布或'无硬件'构建,使用命令pod 'PayPalHereSDK/Release'
如果您更喜欢手动集成,可以将步骤记录在项目配置指南中,以便正确设置您的应用程序。
身份验证
-
设置一个PayPal开发者账户(在此处注册)并为使用PayPal Here SDK配置一个应用程序。有关如何正确配置应用程序的信息,请参阅PayPal Here SDK集成文档。
-
部署和配置零售SDK身份验证服务器或手动协商PayPal OAuth2流程以获取登录所需的令牌。
有关如何帮助您的商家注册PayPal商业账户并将它们链接到后台软件的建议,请参阅我们的商家上线指南。
SDK初始化
- 如果您使用的是磁条读卡器,并且希望使用沙盒环境,请配置环境。有关PayPal沙盒环境的更多信息,请参阅沙盒概述。
[PayPalHereSDK selectEnvironmentWithType:ePPHSDKServiceType_Sandbox];
- 使用您的凭据设置SDK商家。
// Either with raw tokens...
[PayPalHereSDK setupWithCredentials:refreshUrl:tokenExpiryOrNil:thenCompletionHandler:];
// Or by digesting the response from paypal-retail-node...
[PayPalHereSDK setupWithCompositeTokenString:thenCompletionHandler:];
发票
PayPal Here SDK 中的发票定义了我们使用 PayPal API 进行交互的订单。它们提供了与网站的同步、总额计算等更多强大功能。
为了接收支付,我们首先需要创建一个发票,它可以像您的用例要求的那样简单或复杂。最简单的用例是为单个非细目金额创建发票
PPHInvoice *myOneDollarInvoice = [[PPHInvoice alloc] initWithItem:@"Total" forAmount:[PPHAmount amountWithDecimal:[NSDecimalNumber one]]];
接收支付
PayPal Here SDK 提供多种方式来接收支付。本文将仅涵盖 PPHTransactionManager
的 "UI" 方法的使用。这些方法为您自动处理支付过程的许多方面,包括
- 读卡器连接和激活
- 监听卡片事件
- 复杂的 EMV 流程
- 签名输入 UI 和传输
- Receipt 目的地 UI 和传输
使用这些 API 执行卡片现场交易的步骤很简单
- 实现
PPHTransactionControllerDelegate
协议 - 调用
[[PayPalHereSDK sharedTransactionManager] beginPaymentUsingUIWithInvoice:transactionController:];
以启用读卡器,开始监视发票,并开始接收您实现PPHTransactionControllerDelegate
的更新。 - 当您希望启用 NFC 支付时,调用
[[[PayPalHereSDK sharedTransactionManager] activateReaderForPayments:发自简书ReaderManager]]
。 - 当读卡器检测到卡片已经出现时,您将收到
PPHTransactionControllerDelegate
上的userDidSelectPaymentMethod:
调用。您可以使用这个机会在授权支付之前进行任何更改(例如,请求用户的小费)。 - 调用
[[PayPalHereSDK sharedTransactionManager] processPaymentUsingUIWithPaymentType:completionHandler:]
以授权支付。 - 当您的完成处理程序被调用时,重置导航堆栈。
这个示例看起来像
////////////////////////////////////////////////////////////////////////////////////////////////////
@implementation MyTransactionViewController
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
PPHInvoice *sampleInvoice = [[PPHInvoice alloc] initWithItem:@"Falcon Punch!" forAmount:[PPHAmount amountWithString:@"1.00"]];
[[PayPalHereSDK sharedTransactionManager] beginPaymentUsingUIWithInvoice:sampleInvoice
transactionController:self];
}
- (void)userDidSelectPaymentMethod:(PPHPaymentMethod) paymentOption {
[[PayPalHereSDK sharedTransactionManager] processPaymentUsingUIWithPaymentType:paymentOption
completionHandler:^(PPHTransactionResponse *response) {
if (response.error) {
NSLog(@"Transaction failed!");
} else {
NSLog(@"Transaction successful!");
}
[self.navigationController popToViewController:self animated:YES];
}];
}
- (void)userDidSelectRefundMethod:(PPHPaymentMethod) refundOption {
}
- (UINavigationController *)getCurrentNavigationController {
return self.navigationController;
}
@end
您可以根据需要实现 PPHTransactionControllerDelegate
的各种可选方法,以在适当的地方影响支付流程。
接收退款的方式非常相似。
读卡器
尽管 PPHTransactionManager
能够独立管理读卡器,但在某些情况下,您可能需要更多关于读卡器的信息或更细粒度的控制。此功能由 PPHCardReaderManager
提供。
读卡器元数据
有关过去和当前读卡器类型、功能、名称等信息可以以 PPHCardReaderMetadata
对象的形式访问。
NSLog(@"The active card reader's type is: %d", [[PayPalHereSDK sharedCardReaderManager] activeReader].readerType);
NSLog(@"The last bluetooth reader that was available was named %@", [[PayPalHereSDK sharedCardReaderManager] lastAvailableReaderOfType:ePPHReaderTypeChipAndPinBluetooth].friendlyName);
NSLog(@"The active card reader has %d%% battery remaining.", [[PayPalHereSDK sharedCardReaderManager] activeReader].batteryInfo.level);
读卡器事件
如果希望监控读卡器事件(如连接、元数据更新和磁条交互),只需实现各种 PPHCardReaderDelegate
协议方法并分配一个 PPHCardReaderWatcher
即可。
@implementation MyCardReaderDelegate
- (instancetype)init {
if (self = [super init]) {
self.cardReaderWatcher = [[PPHCardReaderWatcher alloc] initWithDelegate:self];
}
return self;
}
-(void)didDetectReaderDevice:(PPHCardReaderMetadata *)reader {
NSLog(@"Reader with name %@ detected!", reader.friendlyName);
}
@end
更多信息查看
PayPal Here SDK 中还有更多可用功能。关于其他功能详情请参阅我们的 开发者文档。这些功能包括
- 授权/捕获:不是一次性销售,而是通过刷卡授权付款,并在稍后完成交易。这在交易完成后添加小费(例如在餐厅中)时很常见。
- 退款:使用 SDK 来退款交易
- 发送收据:您可以通过 SDK 使用服务向客户发送电子邮件或短信收据
- 输入:大多数应用程序需要让用户直接输入卡号,以防卡的服务条形码数据无法读取。
- 收银员ID:包含您自己的唯一用户标识符以跟踪商家的员工使用情况
- 错误处理:了解更多关于可能返回的不同类型错误
- 营销工具包:可下载的营销资产——从电子邮件到横幅广告——帮助您快速有效地推广您应用的新支付功能。
应用审查信息
只有 PayPal Here SDK 的发布版本才有资格发布到 App Store。如果您提交带调试版本的应用进行审核,则您的应用将被拒绝。要使用 Cocoapods 安装发布版本,请使用:pod 'PayPalHereSDK/Release'
提交您的应用时,您可能需要加入 Apple MFi 项目。为了完成注册,请完成 MFi 注册表 并将其发送至 [email protected]。
请在您的 App Store 审查说明中包含以下信息
- 此 iOS 应用程序使用蓝牙协议 "com.paypal.here.reader":PPID# 126754-0002 & PPID# 126754-0021
- 此 iOS 应用程序使用 com.magtek.idynamo 协议的 Magtek iDynamo 读取器:PPID 103164-0003