ios - 使用 Square SDK Swift 3 进行支付

标签 ios swift square-connect

当我尝试使用来自 Github (https://github.com/square/SquareRegisterSDK-iOS) 的 Square SDK 进行付款时,我无法在 Square POS 应用程序中找到我从我的应用程序传递过来的金额。

请找出我实际遵循的以下步骤。

  1. 我已经从下面的 git hub 链接下载了 Square Register SDK。

https://github.com/square/SquareRegisterSDK-iOS

  1. 我使用 cocoa pods 运行了该应用程序,并且我已在我的项目中成功安装了 pod 文件。

  2. 我在“我的应用程序”部分的客户端登录中创建了一个测试应用程序。

应用名称:MyApp

应用程序 ID:XXXXXXXXXXXXXX(我在 Square Dashboard 中的应用程序 ID)

  1. 我已经在 Register Api 部分注册了我的 Bundle Id 和 Callback Url

iOS 应用包 ID:我的包 ID

iOS 应用程序 URL 方案:我的回调 Url

  1. 因为我的帐户已激活,可以通过应用程序接收付款。

  2. 现在回到我的代码,我只是采用了 Square Register SDK ----> SwiftCharge 类方法。

  3. 请找到我用于收费的以下代码,请让我知道我要进行的任何更正。

    导入SquareRegisterSDK 导入 UIKit 让 yourClientID = "xxxxxxxxxx" let yourCallbackURL = URL(string: "MyApp://callback")!

    枚举部分:Int { case amount = 0, supportedTenderTypes, optionalFields, 设置

    init?(at indexPath: IndexPath) {
        self.init(rawValue: indexPath.section)
    }
    

    让 allTenderTypes: [SCCAPIRequestTenderTypes] = [.card, .cash, .other, .squareGiftCard, .cardOnFile]

    扩展字符串{ 变量 nilIfEmpty:字符串? { 返回是空的?无: self }

    类 View Controller :UIViewController {

    var supportedTenderTypes: SCCAPIRequestTenderTypes = .card
    var clearsDefaultFees = false
    var returnAutomaticallyAfterPayment = true
    
    @IBOutlet weak var currencyField: UITextField!
    @IBOutlet weak var amountField: UITextField!
    
    @IBOutlet weak var notesField: UITextField!
    @IBOutlet weak var userInfoStringField: UITextField!
    @IBOutlet weak var merchantIDField: UITextField!
    @IBOutlet weak var customerIDField: UITextField!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
    
        // Always set the client ID before creating your first API request.
        SCCAPIRequest.setClientID(yourClientID)
    }
    
    
    @IBAction func charge(sender: AnyObject) {
    
        let currencyCodeString = "USD"
        let amountString = "500"
    
        let amount: SCCMoney
        guard let amountCents = Int(amountString) else {
            showErrorMessage(title: "Invalid Amount", message: "\(amountString) is not a valid amount.")
            return
        }
    
        do {
            amount = try SCCMoney(amountCents: amountCents, currencyCode: currencyCodeString)
        } catch let error as NSError {
            showErrorMessage(title: "Invalid Amount", error: error)
            return
        }
    
        let userInfoString = "Radhachandan"
        let merchantID = ""
        let customerID = ""
        let notes = "Sample Test"
    
        let request: SCCAPIRequest
        do {
            request = try SCCAPIRequest(callbackURL: yourCallbackURL,
                                        amount: amount,
                                        userInfoString: userInfoString,
                                        merchantID: merchantID,
                                        notes: notes,
                                        customerID: customerID,
                                        supportedTenderTypes: supportedTenderTypes,
                                        clearsDefaultFees: clearsDefaultFees,
                                        returnAutomaticallyAfterPayment: returnAutomaticallyAfterPayment)
        } catch let error as NSError {
            showErrorMessage(title: "Invalid Amount", error: error)
            return
        }
    
        do {
            try SCCAPIConnection.perform(request)
    
        } catch let error as NSError {
    
    
    showErrorMessage(title: "Cannot Perform Request", error: error)
            return
        }
       }
    
    
    private func showErrorMessage(title: String, error: NSError) {
        showErrorMessage(title: title, message: error.localizedDescription)
    }
    
    private func showErrorMessage(title: String, message: String) {
        let alertView = UIAlertController(title: title, message: message, preferredStyle: .alert)
        alertView.addAction(UIAlertAction(title: "Dismiss", style: .default, handler: nil))
        present(alertView, animated: true, completion: nil)
    }
    

  4. 截至目前,它已重定向至 Square Point Of Sale 应用程序,但未显示我已通过的金额。

非常感谢您的友好反馈。

最佳答案

尝试像这样修改您的代码:

...
let userInfoString = "Radhachandan"
    let merchantID = nil
    let customerID = nil
    let notes = "Sample Test"
...

您已提醒我们在为这些参数传递空字符串时存在错误,我们将尽快进行修复。

关于ios - 使用 Square SDK Swift 3 进行支付,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42953667/

相关文章:

ios - 如何在移动应用程序 (iOS) 的谷歌分析中使用多个 View 设置事件跟踪

ios - 续订Advance Apple中的免费配置文件

javascript - 如何更改Square付款表格的字体

ios - 我可以以编程方式选择我的启动图像吗?

ios - Swift 项目中 Objective-C 的条件编译

ios - 在 ViewController 循环中隐藏/显示 TabBar

swift - Realm :创建新角色并向其添加用户失败

ios - 在 XCode 6 beta 7 中从 Swift 在 iOS 中打印

html - sqPaymentForm 不适用于 IOS 自动填充

android - 用于 Cordova/PhoneGap 应用程序的 Square POS api