【问题标题】:WorldPay Apple Pay SDK unrecognized selector sent to instanceWorldPay Apple Pay SDK 无法识别的选择器发送到实例
【发布时间】:2017-08-24 22:23:49
【问题描述】:

我正在尝试通过 Apple Pay 使用 World Pay 及其 SDK HERE https://github.com/Worldpay/worldpay-lib-ios 进行支付。在我的应用程序中,此付款是通过通知完成的,用户单击通知,我的应用程序打开并显示苹果支付视图。

当我尝试使用此行提出付款请求(按照下面的代码)时

let request = wp.createPaymentRequest(withMerchantIdentifier: ApplePaySwagMerchantID)

但是我的应用程序崩溃了:

2017-03-30 20:38:20.026378 CarGo[757:79619] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Worldpay createPaymentRequestWithMerchantIdentifier:]: unrecognized selector sent to instance 0x1740fea00'

我不确定是什么原因造成的,或者如何调试它?

我在应用委托中运行的完整方法:

func makePayment(locationString: String){

        let defaults = UserDefaults.standard

        let topWindow: UIWindow = UIWindow(frame: UIScreen.main.bounds)
        topWindow.rootViewController = UIViewController()
        topWindow.windowLevel = UIWindowLevelAlert + 1
        topWindow.makeKeyAndVisible()

        let wp: Worldpay = Worldpay.sharedInstance();
        wp.clientKey = "xxxxxxx";
        wp.reusable = true;


        let request = wp.createPaymentRequest(withMerchantIdentifier: ApplePaySwagMerchantID)
        request?.supportedNetworks = SupportedPaymentNetworks
        request?.countryCode = "GB"
        request?.currencyCode = "GBP"
        request?.merchantCapabilities = PKMerchantCapability.capability3DS

        var decimalValue = NSDecimalNumber(string: defaults.string(forKey: locationString))

        decimalValue = decimalValue.multiplying(by: 100)

        self.transactionsDescription = "Toll Payment: " + locationString
        self.transactionCost = decimalValue.intValue

        request?.paymentSummaryItems = [
            PKPaymentSummaryItem(label: "Toll Payment: " + locationString, amount:NSDecimalNumber(string: defaults.string(forKey: locationString)))
        ]

        let applePayController = PKPaymentAuthorizationViewController(paymentRequest: request!)
        applePayController.delegate = self

        topWindow.rootViewController?.present(applePayController, animated: true, completion: nil)

    }

我的桥头文件:

#import "Worldpay.h"
#import "APMController.h"
#import "WorldpayAPMViewController.h"
#import "ThreeDSController.h"
#import "WorldpayCardViewController.h"
#import "Worldpay+ApplePay.h"

【问题讨论】:

  • 您使用的是哪个版本的 WorldPay SDK?我在此处的文档中找不到您正在使用的 WorldPay 类:worldpayus.github.io/ipc_sdk_ios
  • 您在哪里找到wp.createPaymentRequest(withMerchantIdentifier: ApplePaySwagMerchantID) 的签名?它是由 Xcode 自动完成的吗?使用 ObjC 类的指南建议使用 wp.createPaymentRequestWithMerchantIdentifier(ApplePaySwagMerchantID)。参考,使用方法:developer.apple.com/library/content/documentation/Swift/…
  • 'createPaymentRequestWithMerchantIdentifier' 已重命名为 'createPaymentRequest(withMerchantIdentifier:)'
  • @ZacPowell 出于兴趣,您是如何在 WorldPay 测试环境中测试 Apple Pay 支付的?我无法将 WorldPay 测试卡详细信息添加到手机上的钱包中:/

标签: ios swift applepay worldpay


【解决方案1】:

我想我可能已经找到了问题所在。您是否在 Objective-C 桥接头中包含以下导入?

import "Worldpay+ApplePay.h"

这是一个使用与 Apple Pay 相关的方法扩展 WorldPay 类的类别,并且可能包含有问题的方法。

编辑:

确保在Build Settings 中项目的Other Linker Flags 属性中包含-ObjC 链接器标志。

【讨论】:

  • 您可能还需要添加 -ObjC 链接器标志,在此答案中列出:stackoverflow.com/a/26124317/797767
  • 您的项目中也添加了-ObjC 链接器标志?
  • 大坝链接器标志一些怎么走!
  • 我将更新答案以包含链接器标志。很高兴它解决了您的问题!
猜你喜欢
  • 2019-08-28
  • 2012-07-24
相关资源
最近更新 更多