首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Adyen payments iOS集成

Adyen payments iOS集成
EN

Stack Overflow用户
提问于 2020-11-21 18:14:39
回答 1查看 206关注 0票数 3

有人成功地将Adyen payment插件集成到iOS应用程序中了吗?

我知道它会向用户显示支付选项,但选择其中一个选项并不会产生任何影响。我希望它能转到表单来捕获卡片的详细信息,但它并没有。

任何帮助都将不胜感激。视图控制器的代码如下所示。

代码语言:javascript
复制
import UIKit
import Adyen

extension Dictionary {
        func percentEncoded() -> Data? {
            return map { key, value in
                let escapedKey = "\(key)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
                let escapedValue = "\(value)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
                return escapedKey + "=" + escapedValue
            }
            .joined(separator: "&")
            .data(using: .utf8)
        }
    }

extension CharacterSet {
    static let urlQueryValueAllowed: CharacterSet = {
        let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4
        let subDelimitersToEncode = "!$&'()*+,;="
        
        var allowed = CharacterSet.urlQueryAllowed
        allowed.remove(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)")
        return allowed
    }()
}

class ViewController: UIViewController , DropInComponentDelegate {
    
    func didSubmit(_ data: PaymentComponentData, from component: DropInComponent) {
        
    }
    
    func didProvide(_ data: ActionComponentData, from component: DropInComponent) {
        
    }
    
    func didFail(with error: Error, from component: DropInComponent) {
       
    }
    
    func didCancel(component: PresentableComponent, from dropInComponent: DropInComponent){
       
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

    }
    
    @IBAction func buttonCLicked(_ sender: UIButton) {
        setUpAdyen()
    }
    
    func setUpAdyen() {
        
        let url = URL(string: "xxxxxxx")!
        
        var request = URLRequest(url: url)
        
        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
        
        request.httpMethod = "POST"
        
        let parameters: [String: Any] = [
            "amount": 1000,
        ]
        
        request.httpBody = parameters.percentEncoded()
        
        print(request.httpBody ?? "")
        
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            
            guard let data = data,
                  let response = response as? HTTPURLResponse,
                  error == nil else {
                print("error", error ?? "Unknown error")
                return
            }
            
            guard (200 ... 299) ~= response.statusCode else {
                print("statusCode should be 2xx, but is \(response.statusCode)")
                print("response = \(response)")
                return
            }
            
            do {
              
                let paymentMethods = try JSONDecoder().decode(PaymentMethods.self, from: data)
                
                let configuration = DropInComponent.PaymentMethodsConfiguration()
                
                configuration.clientKey = "xxxxxxxx"
                
                let dropInComponent = DropInComponent(paymentMethods: paymentMethods,paymentMethodsConfiguration: configuration)
                
                dropInComponent.delegate = self
                
                dropInComponent.environment = .test
                
                dropInComponent.payment = Payment(amount: Payment.Amount(value: 1000, currencyCode: "GBP"))
                
                DispatchQueue.main.async {
                    self.present(dropInComponent.viewController, animated: true)
                }
 
            } catch {
                print(error)
            }
        
        }
        
        task.resume()

        
    }
  
}

显示支付选项,但在应该显示屏幕以捕获卡详细信息时,单击其中任何一个选项都不会执行任何操作。

EN

回答 1

Stack Overflow用户

发布于 2020-12-01 00:20:18

dropInComponent应该持久化。

代码语言:javascript
复制
class ViewController: UIViewController , DropInComponentDelegate {

     private var dropInComponent: DropInComponent?

     ...
     
     func setUpAdyen() {
         ...

         let dropInComponent = DropInComponent(paymentMethods: paymentMethods,paymentMethodsConfiguration: configuration)
         self.dropInComponent = dropInComponent

         ...
                
     }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64941944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档