Wallet One P2P
通过 Cocoapods 安装
CocoaPods 是 Cocoa 项目的框架/依赖项管理器。您可以使用以下命令安装它:
$ gem install cocoapods
为了使用 Cocoapods 将 P2P Core 集成到您的 Xcode 项目中,请将其添加到您的 Podfile
pod 'P2PCore'
'0.2.2' # Swift 3.2 (Поддержка только на банковских карт)
'~> 0.2.6' # Swift 4.0 (Поддержка только на банковских карт)
'~> 0.3' # Swift 4.0 (Поддержка разных платежных средств (Карты, Альфа-Клик, Qiwi и т.д.))
P2PCore - 用于执行网络请求
pod 'P2PUI'
'0.2.2' # Swift 3.2 (Поддержка только на банковских карт)
'~> 0.2.6' # Swift 4.0 (Поддержка только на банковских карт)
'~> 0.3' # Swift 4.0 (Поддержка разных платежных средств (Карты, Альфа-Клик, Qiwi и т.д.))
P2PUI - 包含选择、添加银行卡以及显示支付和退款历史记录的界面。
然后,运行以下命令
$ pod install
安装后,将模块导入到所有将使用它们的文件中
import P2PCore
import P2PUI
使用
以自由职业者平台为例。
步骤 1(模块配置)
在 AppDelegate 文件中,将配置添加到 application:didFinishLaunchingWithOptions
方法中
P2PCore.setPlatform(id: "PLATFORM_ID", signatureKey: "PLATFORM_SIGNATURE_KEY")
PLATFORM_ID
和 PLATFORM_SIGNATURE_KEY
的值将在您注册 P2P Wallet One 服务时获得。
步骤 2(配置使用者)
用户在应用程序中授权后,需要将数据记录到配置中。
如果用户是买家
P2PCore.setPayer(id: "PLATFORM_USER_ID", title: "PLATFORM_USER_TITLE", phoneNumber: "PLATFORM_USER_PHONE_NUMBER")
如果用户是执行者
P2PCore.setBenificiary(id: "PLATFORM_USER_ID", title: "PLATFORM_USER_TITLE", phoneNumber: "PLATFORM_USER_PHONE_NUMBER")
其中
PLATFORM_USER_ID
- 您系统中用户的标识符。
PLATFORM_USER_TITLE
- 您系统中用户的名字。
PLATFORM_USER_PHONE_NUMBER
- 您系统中用户的电话号码。
步骤 3(选择执行者卡)
如果买方在创建订单时指定了“安全交易(P2P Wallet One)”结算方式,则执行者提交执行订单申请时,必须添加(选择)一个付款账户,用于执行完成后接收款项。
添加(选择)付款方式有两种方法
方法 1(使用 P2PUI 的现成解决方案)
let vc = PaymentToolsViewController(owner: .benificiary)
vc.delegate = self // PaymentToolsViewControllerDelegate
以模态形式显示,在新的 UINavigationController
中(模态)
let nc = UINavigationController(rootViewController: vc)
self.present(nc, animated: true)
在当前的 UINavigationController
中显示(推送)
self.navigationController?.pushViewController(vc, animated: true)
选择付款方式后,将调用 PaymentToolsViewControllerDelegate
的方法
func paymentToolsViewController(_ vc: PaymentToolsViewController, didSelect paymentTool: PaymentTool)
PaymentToolsViewController
中内置了添加新付款方式的选项。
方法 2(构建自己的 View Controller 添加付款方式)
获取执行者的付款方式列表
P2PCore.beneficiariesPaymentTools.paymentTools { paymentTools, error in
// paymentTools: [PaymentTool]? - Массив объектов [PaymentTool]. Будет nil в случае ошибки запроса
// error: NSError - Будет nil в случае успешного запроса.
}
如果执行者之前未绑定任何付款方式,则需要使用 UIWebView 添加。
您可以使用现成的 LinkPaymentToolViewController
。
let vc = LinkPaymentToolViewController(delegate: self)
self.navigationController?.pushViewController(vc, animated: true)
执行者添加付款方式后,将调用 LinkPaymentToolViewControllerDelegate
的方法
func linkPaymentToolViewControllerComplete(_ vc: LinkPaymentToolViewController)
添加付款方式后,您需要获取其 id
。为此,请使用获取付款方式列表的方法(见上文)。
如果您想创建自己的添加付款方式的 View Controller,则获取 URLRequest
的代码如下:
let request = P2PCore.beneficiariesPaymentTools.linkNewPaymentToolRequest(returnUrl: "RETURN_URL")
其中
RETURN_URL
- 添加完成后将进行重定向的 URL。
注意!所选付款方式标识符
paymentTool.id
您需要记录在执行者提交给任务的申请中。执行者的付款方式标识符在买方接受申请时需要。
步骤 4(交易支付 - HOLD)
当买方选择了对他最合适的执行者报价后,需要在 P2P Wallet One 端创建交易并支付(在买方付款账户中设定 HOLD)。
支付时,可以选择已绑定的付款方式或添加新方式。
选择付款方式
方法 1(使用 P2PUI 的现成解决方案)
let vc = PaymentToolsViewController(owner: .payer)
vc.delegate = self // PaymentToolsViewControllerDelegate
演示方式有两种,当前 UINavigationController
(推送)和模式(Modal)。这些方法已在上面描述。
如果客户选择了之前绑定的支付方式,则将调用 PaymentToolsViewControllerDelegate
代理方法。
func paymentToolsViewController(_ vc: PaymentToolsViewController, didSelect paymentTool: PaymentTool)
在选择支付方式后,需要在 P2P Wallet One 端创建交易。
P2PCore.deals.create(
dealId: "PLATFORM_DEAL_ID",
beneficiaryId: "PLATFORM_BENEFICIARY_ID",
payerPaymentToolId: selectedPaymentTool.id, // опицоинальный
beneficiaryPaymentToolId: BENEFICIARY_PAYMENT_TOOL_ID,
amount: 100,
currencyId: .rub,
shortDescription: "PLATFORM_DEAL_SHORT_DESCRIPTION",
fullDescription: "PLATFORM_DEAL_FULL_DESCRIPTION",
deferPayout: true,
complete: { (deal, error) in
if let error = error {
// process error
} else if let deal = deal {
// Pay deal
}
}
)
其中
PLATFORM_DEAL_ID
- 您的系统中的申请/交易标识符。
PLATFORM_BENEFICIARY_ID
- 执行者标识符。
BENEFICIARY_PAYMENT_TOOL_ID
- 执行者卡标识符,由申请执行者创建时记录。
PLATFORM_DEAL_SHORT_DESCRIPTION
- 交易简短描述。例如“创建网站”。
PLATFORM_DEAL_FULL_DESCRIPTION
- 交易完整描述。
可以使用预制的 View Controller 进行交易支付。
let vc = PayDealViewController(dealId: deal.id, redirectToPaymentToolAddition: redirectToPaymentToolAddition)
vc.delegate = self
PayDealViewController
有一个可选参数 authData
。您可以预先请求所选卡的 CVV 并使用 CVV 初始化控制器。在这种情况下,用户将不会在支付页面上输入 CVV。
如果用户没有先前绑定的支付方式,并在列表页面上选择“使用新支付方式”,则会调用代理方法。
func paymentToolsViewControllerDidSelectLinkNew(_ vc: PaymentToolsViewController)
在这种情况下,创建交易时不需要指定 payerPaymentToolId
参数,或将其设置为 nil
。
方法 2(构建自己的 View Controller,添加卡列表)
获取客户支付方式列表
P2PCore.payersPaymentTools.paymentTools { paymentTools, error in
// paymentTools: [PaymentTool]? - Массив объектов [PaymentTool]. Будет nil в случае ошибки запроса
// error: NSError - Будет nil в случае успешного запроса.
}
如果客户没有先前绑定的支付方式,则需要使用 UIWebView 进行新支付。
要获取支付 URLRequest
,请使用以下代码
let request = P2PCore.deals.payRequest(dealId: "PLATFORM_DEAL_ID", redirectToPaymentToolAddition: true, authData: "CVV/CVC", returnUrl: "RETURN_URL")
其中
PLATFORM_DEAL_ID
- 您的系统中的申请/交易标识符。在用户选择了绑定的卡后,您可以原生态地请求其卡的 CVV/CVC。在这种情况下,客户在支付页面上不会被要求输入 CVC/CVV。 RETURN_URL
- 结束支付后将被重定向的 URL。
步骤 5(检查支付)
在交易支付后,您可以使用以下代码了解支付状态
P2PCore.deals.status(dealId: self.deal.id) { deal, error
switch deal.dealStateId {
case DealStateIdPaymentProcessing:
// В процессе оплаты. Тут необходимо проверить статус еще раз через некоторое время
case DealStateIdPaymentProcessError:
// Возникает в случае ошики оплаты. Например недостаточно средств на карте заказчика
case DealStateIdPaid:
// Средства успешно зарезевированы
default:
break
}
}
状态定义在
enum: String
中,以支持 Objective-C。
步骤 6(完成交易)
执行者完成后,他需要转账并完成交易。
可以使用以下代码完成交易
P2PCore.deals.complete(dealId: self.deal.id, complete: { deal, error in
if let error = error {
// process error
} else if let deal = deal {
switch deal.dealStateId {
case DealStateIdPayoutProcessing:
// выплата в процессе
case DealStateIdPayoutProcessError:
// Возникла ошибка во время выплаты. Например карта исполнителя заблокирована
case DealStateIdCompleted:
// выплптп прошла успешно
default:
break
}
}
})
如果客户对工作不满意,他可以取消支付
P2PCore.deals.cancel(dealId: self.deal.id, complete: { deal, error in
if let error = error {
// process error
} else if let deal = deal {
// Process canelation
}
})
执行者支付记录列表
获取执行者支付记录可以有两种方式
方法 1(使用 P2PUI 的现成解决方案)
let vc = PayoutsViewController(dealId: nil)
navigationController?.pushViewController(vc, animated: true)
在 dealId
处可以获取到特定交易的支付。
方法2(构建自己的 View Controller)
P2PCore.payouts.payouts(pageNumber: pageNumber, itemsPerPage: itemsPerPage, dealId: dealId) { result, error in
// result: [Payout]? - Массив с объектами выплат
// error: NSError? - nil в случае успешного запроса
}
客户退货历史清单
可以通过两种方式获取客户退货列表
方法 1(使用 P2PUI 的现成解决方案)
let vc = RefundsViewController(dealId: nil)
navigationController?.pushViewController(vc, animated: true)
在 dealId
处可以获取到特定交易的支付。
方法2(构建自己的 View Controller)
P2PCore.refunds.refunds(pageNumber: pageNumber, itemsPerPage: itemsPerPage, dealId: dealId) { result, error in
// result: [Payout]? - Массив с объектами выплат
// error: NSError? - nil в случае успешного запроса
}
交易批量支付
在 P2PCore
中,可以批量完成交易。
P2PCore.dealsManager.complete(dealIds: [String], paymentToolId: String) { result, error in
// result: [Deal]? - Массив с объектами сделок
// error: NSError? - nil в случае успешного запроса
}
你可以在项目中查看服务的完整工作流程。目标代码 P2PExample
。