MyCheck Dine SDK
这是一个开发工具包,可以让开发者打开餐厅的桌子、追踪订单并进行点菜(支付功能即将推出)。
这个 SDK 可以让你的应用访问餐厅桌子上的开放账单,查看账单(账单)、重新点菜以及支付账单(支付功能即将推出)。
交易的基本流程是
- 客人通过应用获取四位数的代码
- 然后将代码给到客人的服务员,服务员将在 POS 中打开开放账单并输入代码。
- POS 将账单与 MyCheck 服务连接
- 然后客人将能够看到账单,并通过重新点菜和支付与账单进行交互。
- 一旦客人支付账单,他将不再能够访问该账单。
要求
iOS 9 或以上。
Swift 3.0
安装
MyCheck Restaurant SDK 通过CocoaPods提供。您首先需要请求 MyCheck 团队成员给予您对 MyCheck 仓库的读取权限。一旦取得了权限,只需将以下行添加到您的 Podfile 的顶部即可安装
source 'https://bitbucket.org/erez_spatz/pod-spec-repo.git'
source 'https://github.com/CocoaPods/Specs.git'
这将设置公共 CocoaPods 仓库和 MyCheck 私有仓库作为 CocoaPods 搜索框架的目标
您可以在 'bitbucket.org' 前面添加 YOUR_USER_NAME@,这样 pod 工具在您更新或安装时不必再询问。
在目标内部添加
pod "MyCheckDine"
现在您可以运行 'pod install'
使用
Dine Singleton 将成为您创建、跟进和执行用户订单操作的接触点。为了管理用户的会话(登录、注销等),您需要使用会话 singleton。
首先,将以下内容添加到您要使用 MyCheck 的类顶部:
import MyCheckCore
...
在您的应用代理的 application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)
函数中调用 Session singleton 的配置函数
Session.shared.configure(YOUR_PUBLISHABLE_KEY, environment: .sandbox)
这将设置 SDK 以与所需环境协同工作。
在使用任何其他函数之前,您必须登录用户。通过先从您的服务器(该服务器将使用密码从 MyCheck 服务器获取)获取刷新令牌来进行登录。一旦您有了刷新令牌,请调用 Session singleton 上的登录函数。
Session.shared.login(REFRESH_TOKEN, success: HANDLE_SUCCESS
}, fail: HANDLE_FAIL)
登录后,您可以打开一个表格。现在您可以使用 Dine singleton 开始进行堂食特定操作。导入 SDK 的 Dine 模块。
import MyCheckDine
以下是一个流程图,解释了 Dine 流程并说明了用户体验的每个阶段需要调用的函数。 该过程的第一个步骤是生成一个 4 位数码。MyCheck 服务器生成的代码对所有特定用户、特定位置的有限时间有效。将此代码输入 POS 后,可以将 MyCheck 与客户端的 POS 上的订单同步,并开始接收订单更新和执行操作。为了使此操作成功,用户必须有一种支付方式。一旦您收到一个代码,向用户显示它,然后他可以将其显示给他的服务员/调酒师。如果您想支持 Apple Pay,您需要一些额外的设置,请参阅 Apple Pay 部分。
Dine.shared.generateCode(hotelId: HOTEL_ID , restaurantId: RESTUARANT_ID, success: HANDLE_SUCCESS
}, fail: HANDLE_FAIL)
现在代码已生成并发送给用户后,您可能会想开始轮询 MyCheck 服务器以获取订单更新。当订单打开以及在账单上的每项更改时,您都会收到更新。为了轮询订单,请打开轮询并实现 'OrderPollerDelegate'。
Dine.shared.poller.delegate = self
MyCheck.shared.poller.startPolling()
委托示例实现
extension YOUR_VIEWCONTROLLER : OrderPollerDelegate{
func orderUpdated(order:Order){
//Deal with order updates. Check the 'status' variable to make sure the status didn't change, otherwise update the order displayed to the user with the updated bill.
}
func failingToReceiveUpdates(lastReceivedError: NSError , failCount:Int){
//this callback will be called if the poller failed the last few calls to the MyCheck server. This means your app may not be in sync with the POS.
}
}
为了重新订购商品,向重新订购调用发送一个元组数组。每个元组都有一个 Int,代表要订购的数量和要重新订购的商品。
MyCheck.shared.reorderItems(items: [(3, order.items.first!)], success: {
//Handle success
}, fail: {error in
// handle fail
})
支付
如果您有一个平衡非零的开放桌子和支付方式,您可以进行支付。第一步是创建一个 PaymentDetails
对象
let details = PaymentDetails(order: THE_ORDER, amount: THE_AMOUNT_TO_CHARGE, tip: TIP_AMOUNT, paymentMethod: A_PAYMENT_METHOD)
// OR
let details = PaymentDetails(order: THE_ORDER, items: ITEMS_THAT_SHOULD_BE_BOUGHT, tip: TIP_AMOUNT, paymentMethod: A_PAYMENT_METHOD)
PaymentDetails
有两个可失败的构造函数。其中一个用于按金额支付,另一个用于按项目支付。如果提供的订单不是打开的或者是金额超过了订单余额,构造函数会失败。您还需要获取一个 PaymentMethodInterface
对象,关于这方面的更多信息,请查阅 MyCheckWalletUI 文档。一旦您获得一个 PaymentDetails
对象,请调用 makePayment
函数。
Dine.shared.makePayment(paymentDetails: details, displayDelegate: self, success: {
}, fail: {error in
})
Apple Pay
为了设置 Apple Pay,请查看 MyCheckWallet 或 MyCheckWalletUI 文档。一旦设置了 Apple Pay,您需要对 Dine SDK 进行两项更改,以便它可以工作。
生成代码
在生成代码时,在某些情况下,MyCheck 必须能够在用户交互之前为默认支付方式收费(例如,如果用户离开吃料理了忘记支付)。Apple Pay 创建的标记只能使用一次,并在一段时间后过期。因此,我们将在此时提示用户使用 Apple Pay 进行支付。为了实现这一点,generateCode 函数有 2 个额外的可选参数(这是 Apple Pay 支持所必需的)
- DisplayViewControllerDelegate:当需要显示或关闭 Apple Pay 视图控制器时,将调用委托函数。
- ApplePayController:该控制器将为 Dine SDK 提供查询 Apple Pay 钱包和创建 Apple Pay 标记的方式。您应从 Wallet 单例(例如,'Wallet.shared.applePayController')获取 ApplePayController 的实例。
下面的代码片段演示了在必须支持 Apple Pay 时调用生成代码的方式
Dine.shared.generateCode(hotelId: nil, restaurantId: THE_ID, displayDelegate: self, applePayController: Wallet.shared.applePayController, success: {
code in
}
}, fail: {error in
})
//DisplayViewControllerDelegate implementation
func display(viewController: UIViewController) {
self.present(viewController, animated: true, completion: nil)
}
func dismiss(viewController: UIViewController) {
viewController.dismiss(animated: true, completion: nil)
}
您必须以相同的方式传递 displayDelegate
给支付函数,以便 Apple Pay 可以工作。
##优势
为了支持优惠,请将以下行添加到您的 podfile 中
pod "MyCheckDine/Benefits"
现在您可以使用 Benefits 类中的静态函数查询和兑换优惠。请参阅 API 文档以获取更多信息。
作者
Elad Schiller, [email protected]
许可
请阅读项目中可用的Licenses文件