Khalti
需求
此系统已在 Xcode 8、9 和 10 以及 swift 版本 3、4 和 4.2 上进行了测试。
Xcode: >=8
Swift:3、4 和 4.2
示例
Swift:克隆项目并使用 'Example' 目录。运行 'pod install'
Objective-C:克隆项目并使用 'Example Obj-c' 目录。运行 'pod install'
安装指南
Khalti 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中。
pod 'Khalti'
使用方法
添加CustomSchme(仅当提供卡片和/或电子银行服务时需要)
Khalti使用自定义方案:因此商家应为其应用设置唯一的URLScheme。我们已将其设置为基于用例的可用性。
添加Url Scheme后,创建以下所示的相同customUrlScheme的全局常量
let khaltiUrlScheme:String = "KhaltiPayExampleScheme"
需求
为了解决此重定向,您需要在Appdelegate.swift
中实现一些openUrl。
Khalti.shared.defaultAction()
返回true
如果您通过Khalti发起支付。Khalti.shared.action(with: url)
在电子银行和卡片支付后进行完整操作是必需的。(仅当提供卡片和/或电子银行服务时需要)
注意:使用Khalti.shared.action(with: url)
仅当提供卡片和/或电子银行服务时需要。
将以下代码添加到Appdelegate.swift
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
Khalti.shared.action(with: url)
return Khalti.shared.defaultAction() // Or true
}
在特定视图控制器中使用
在您的视图控制器中,在支付操作时添加initiate配置文件
在实例化Config
时,传递公钥、产品ID、产品名称、金额(以帕伊萨为单位)。产品网页URL和额外数据是可选的。
let TEST_CONFIG:Config = Config(publicKey: khaltiMerchantKey, amount: 1000, productId: "1234567890", productName: "Dragon_boss", productUrl: "http://gameofthrones.wikia.com/wiki/Dragons",additionalData: additionalData)
// Data passed here are based on Example project
注意:公钥提供给Khalti的每位商家。最初测试对所有商家可用,与Khalti签订MoU后提供实时密钥。
在此阶段,您之前声明的方案通过Khatli.shared.appUrlScheme
传递
Khalti.shared.appUrlScheme = khaltiUrlScheme // see above for file khaltiUrlScheme
// This can be used at appdelegate during didfinishlaunching.
// This must be included only if either card and/or ebanking are made available.
最后,通过调用public函数来呈现khaltiPay视图控制器
Khalti.present(caller: self, with: TEST_CONFIG, delegate: self)
Khalti呈现函数的参数
参数 | 值 |
---|---|
调用者 | 从您启动支付的地方的视图控制器 |
携带 | 配置对象 |
委托 | self |
委托必须分配给相同的视图控制器,以便从KhaltiPayDelegate获取回调操作。
示例项目中的应用示例
let extra:[String : Any] = ["no":false,"yes":true,"int" : 0, "float":12.23]
let jsonData = try? JSONSerialization.data(withJSONObject: extra, options: JSONSerialization.WritingOptions())
let jsonString = String(data: jsonData!, encoding: .utf8)!
let additionalData:Dictionary<String,String> = [
"merchant_name" : "Merchant Company Name",
"merchant_extra" : jsonString
]
Khalti.shared.appUrlScheme = khaltiUrlScheme
let khaltiMerchantKey = "test_public_key_dc74e0fd57cb46cd93832aee0a507256" // This key is from local server so it won't work if you use the example as is it. Use your own public test key
let TEST_CONFIG:Config = Config(publicKey: khaltiMerchantKey, amount: 1000, productId: "1234567890", productName: "Dragon_boss", productUrl: "http://gameofthrones.wikia.com/wiki/Dragons",additionalData: additionalData, ebankingPayment:false) // This makes only khalti Payment available
Khalti.present(caller: self, with: TEST_CONFIG, delegate: self)
配置文件具有属性ebankingPayment,默认值为true,表示卡支付功能可用。如果您希望在您的用户不可用ebankingPayment,则在创建配置对象时将ebankingPayment选项设置为false。此外,配置文件还支持具有默认值false的cardPayment属性,表示卡支付功能不可用。如果想要使cardPayment对您的用户可用,则在创建配置对象时将cardPayment选项设置为true。在启用此功能之前,请阅读商家条款和条件。此外,Config类还接受一个Dictionarymerchant_
前缀。
使用委托
您实现的包含支付操作的viewController应包含实现onCheckOutSuccess(data: Dictionary
和onCheckOutError(action: String, message: String)
的KhaltiPayDelegate
extension YourViewController: KhaltiPayDelegate {
func onCheckOutSuccess(data: Dictionary<String, Any>) {
print(data)
print("Oh there is success message received")
}
func onCheckOutError(action: String, message: String) {
print(action)
print(message)
print("Oh there occure error in payment")
}
}
总结
回调方法
方法 | 描述 |
---|---|
onCheckOutSuccess(data: Dictionary |
当交易完成并经用户确认时调用此方法。返回一个包含访问令牌的字典,该令牌是验证交易和通过Config实例传递的数据所必需的。一旦调用此方法,请使用访问令牌验证交易。请按照验证过程的进一步说明进行操作。 |
onCheckOutError(action: String, message: String, data:Dictionary |
在支付初始化和确认期间发生错误时调用此方法。传递给action、message和errordata的值定义了当前执行的操作、定义了错误以及如果存在则定义了与错误相关的errorData。 |
响应样本
成功消息
键 | 值 | 类型 |
---|---|---|
手机 | 98XXXXXXXX | 字符串 |
product_name | 产品名称 | 字符串 |
product_identity | 产品ID | 字符串 |
product_url | 产品网址 | 字符串 |
数量 | 100 | 整数 |
token | token | 字符串 |
cardPayment | false | 布尔值 |
成功消息还包含在初始化 Config
时作为额外数据提供的所有 键
和 值
。
错误消息
变量 | 描述 | 类型 |
---|---|---|
操作 | initiate/confirm/ebanking | 字符串 |
消息 | 详细错误消息 | 字符串 |
数据 | 错误数据(可选) | Dictionary |
支持
如有疑问,请随时发送邮件至: 此处
请查看 API 文档。