在我的应用程序中,我只支持欧元和美元货币。例如,当用户试图用Siri将付款发送到英镑时,我要求他在欧元和美元之间进行选择。
之后我在屏幕上看到:
如果我选择100$在intent.currencyAmount!。这很奇怪。
这是我的代码:
func resolveCurrencyAmount(forSendPayment intent: INSendPaymentIntent, with completion: @escaping (INCurrencyAmountResolutionResult) -> Void) {
if let currencyAmount = intent.currencyAmount { // need to check if we have proper value
if let amount = currencyAmount.amount {
if amount.doubleValue == 0 { // wrong amount
completion(INCurrencyAmountResolutionResult.unsupported())
return
}
if let currencyCode = currencyAmount.currencyCode {
if let _ = EnumCurrency(rawValue: currencyCode) { // we found currency code that we know
completion(INCurrencyAmountResolutionResult.success(with: INCurrencyAmount(amount: NSDecimalNumber(value: abs(amount.doubleValue)), currencyCode: currencyCode)))
return
}
}
// if we are here so we don't have proper currency, try to offer user to choose the same amount but with all possible currencies
let disambiguationArray: [INCurrencyAmount] = EnumCurrency.allValues.map({ (currency) -> INCurrencyAmount in
return INCurrencyAmount(amount: NSDecimalNumber(value: abs(amount.doubleValue)), currencyCode: currency.rawValue)
})
completion(INCurrencyAmountResolutionResult.disambiguation(with: disambiguationArray))
}
}
else { // we don't have value
completion(INCurrencyAmountResolutionResult.needsValue())
}
}
enum EnumCurrency : String {
case EUR = "EUR"
case USD = "USD"
static let allValues = [EUR, USD]
}
更新:如何繁殖(根据大卫的问题):
1)创建一个新的意图扩展
2) 在plist文件中,只保留一种类型的意图:http://take.ms/pt16N
3)您的IntentHandler类(将由xCode创建)必须确认到INSendPaymentIntentHandling协议
4) 在IntentHandler类中添加以下内容:
func resolveCurrencyAmount(forSendPayment intent: INSendPaymentIntent, with completion: @escaping (INCurrencyAmountResolutionResult) -> Void) {
if let currencyAmount = intent.currencyAmount { // need to check if we have proper value
if let amount = currencyAmount.amount {
if amount.doubleValue == 0 { // wrong amount
completion(INCurrencyAmountResolutionResult.unsupported())
return
}
if let currencyCode = currencyAmount.currencyCode {
if let _ = EnumCurrency(rawValue: currencyCode) { // we found currency code that we know
completion(INCurrencyAmountResolutionResult.success(with: INCurrencyAmount(amount: NSDecimalNumber(value: abs(amount.doubleValue)), currencyCode: currencyCode)))
return
}
}
// if we are here so we don't have proper currency, try to offer user to choose the same amount but with all possible currencies
let disambiguationArray: [INCurrencyAmount] = EnumCurrency.allValues.map({ (currency) -> INCurrencyAmount in
return INCurrencyAmount(amount: NSDecimalNumber(value: abs(amount.doubleValue)), currencyCode: currency.rawValue)
})
completion(INCurrencyAmountResolutionResult.disambiguation(with: disambiguationArray))
}
}
else { // we don't have value
completion(INCurrencyAmountResolutionResult.needsValue())
}
}
enum EnumCurrency : String {
case EUR = "EUR"
case USD = "USD"
static let allValues = [EUR, USD]
}
// MARK: - Confirm
func confirm(sendPayment intent: INSendPaymentIntent, completion: @escaping (INSendPaymentIntentResponse) -> Void) {
// success
completion(INSendPaymentIntentResponse(code: INSendPaymentIntentResponseCode.success, userActivity: nil))
}
// MARK: - Handle
func handle(sendPayment intent: INSendPaymentIntent, completion: @escaping (INSendPaymentIntentResponse) -> Void) {
// just for test
completion(INSendPaymentIntentResponse(code: .failureRequiringAppLaunch, userActivity: userActivity))
}
5)你可以用Siri启动:你会看到,如果你选择中国货币或任何其他非常规货币,然后我在代码中让你在欧元和美元之间进行选择,但之后在RESOLVE函数中(当siri想要解决货币时称为在更多的时间里)你会得到中国货币(所以你不需要像大卫要求的那样为按钮添加任何代码,因为所有的按钮界面都将由Siri提供)
在确认MSendPayment方法中,创建INSendPaymentIntentSolutions实例,并将INPaymentRecment实例分配给paymentRecment属性。我做了一个助手方法来做这件事。
func confirm(sendPayment intent: INSendPaymentIntent, completion: (INSendPaymentIntentResponse) -> Void) {
let response = INSendPaymentIntentResponse(code: .Ready, userActivity: nil)
response.paymentRecord = getPaymentRecord(fromIntent: intent)
completion(response)
}
private func getPaymentRecord(fromIntent intent: INSendPaymentIntent) -> INPaymentRecord? {
let currencyAmount = INCurrencyAmount(amount: intent.currencyAmount?.amount ?? 0.0, currencyCode: "INR")
return INPaymentRecord(payee: intent.payee, payer: nil, currencyAmount: currencyAmount, paymentMethod: nil, note: nil, status: .Pending)
}
希望这能有所帮助。
我创造了这个问题:Siri和错误的货币
您只需确认用户选择的货币。您的确认方法执行错误,您应该使用以下内容确认货币:
let response = INSendPaymentIntentResponse(code: .ready, userActivity: nil)
response.paymentRecord = INPaymentRecord(
payee: intent.payee,
payer: nil,
currencyAmount: intent.currencyAmount,
paymentMethod: nil,
note: nil,
status: .pending,
feeAmount: nil)
completion(response)
我必须将Siri集成到我们向个人付款的应用程序中。关于这个我有一些问题,, > 我得到了一些示例应用程序,其中人名是从手机或用户生成的联系人中获取的。因此,请任何人告诉我,是否有可能获取一些名单,例如受益人名单,我们可以从中选择受益人,然后在解决收款人详细信息时将其用作收款人。假设无法提取受益人名单,那么付款是如何工作的? 如何获取谁(付款人)向其他人汇款的详细信息。例如,因为我必须将其集成到银行
我用贝宝支付预付我的Magento购物车。我发现一个来自加拿大的客户的信用卡不断下降。我直接和客户谈了一下,做了以下测试: > 转到我的Paypal管理器中的虚拟终端,只测试授权,它也不工作。虚拟终端的单个事务测试给出错误:结果代码:12响应消息:Decreded:15005-无法处理此事务。 我在我的贝宝账户里发了一张2美元的发票,但这也不起作用。 客户然后使用信用卡从其他地方和它的工作很好。然
我需要一个支付网关为我的php应用程序。我经营一家软件咨询公司,员工来自世界各地。我已经建立了一个应用程序来管理发票并向他们付款。我需要将其与支付网关集成。 我的组织在美国。 我查看了一些支付网关,但他们需要每个员工的卖家帐户。这是不可能的。 我的直接要求是现金必须从我的卡/银行账户转移到我员工的银行账户。我想通过网上银行、信用卡/借记卡、电汇等方式付款。请帮忙!! 非常感谢。
因此,我试图将登录和支付与Amazon小部件集成,但遇到了一些问题。 所以,我把我的卖家帐户都设置在 https://sellercentral.amazon.de/gp/ 我有权访问我的API凭据,我需要获得一个LWA客户端。所以,我已经在 https://sellercentral.amazon.com/gp/homepage.htm 以创建应用程序。我已经设置了应用程序,在web设置上我已经
本文向大家介绍SpringBoot集成支付宝沙箱支付(支付、退款),包括了SpringBoot集成支付宝沙箱支付(支付、退款)的使用技巧和注意事项,需要的朋友参考一下 前言 支付宝推出一个沙箱环境,能够很好的模拟支付宝支付,并且还提供了demo,但demo是一个普通web项目,怎么整合到Spring Boot项目呢,其实很简单 简单配置请参照支付宝沙箱支付开发文档 一、支付部分 AlipayCon
本文向大家介绍springboot 集成支付宝支付的示例代码,包括了springboot 集成支付宝支付的示例代码的使用技巧和注意事项,需要的朋友参考一下 最简单的springboot集成支付宝 1 注册沙箱 沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下 然后沙箱需要注册一下,非常之简单,注册好以后进入到如下页面,选沙箱工具,然后下载一个生成密钥的工具。然后解压按照里面的rea