Skip to content

Instantly share code, notes, and snippets.

@blisssan
Created February 16, 2021 14:45
Show Gist options
  • Save blisssan/de563dcae2814e450d0a9504834e5bb6 to your computer and use it in GitHub Desktop.
Save blisssan/de563dcae2814e450d0a9504834e5bb6 to your computer and use it in GitHub Desktop.
//
// DetailViewController.swift
// SDKSampleAppSwift
//
// Created by Muhammad Syafiq bin Mastor on 07/03/2019.
// Copyright © 2019 iPay88. All rights reserved.
//
import UIKit
class DetailViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var button: UIButton!
let cellIdentifier = "TextFieldTableViewCell"
var paymentSDK : Ipay?
var requeryPayment:IpayPayment?
var paymentView : UIView?
var viewModel : DetailViewModel = DetailViewModel()
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.dataSource = self
self.tableView.rowHeight = 70
button.setTitle("PROCEED TO PAYMENT", for: .normal)
let nib = UINib(nibName: cellIdentifier, bundle: nil)
self.tableView.register(nib, forCellReuseIdentifier: cellIdentifier)
}
@IBAction func handleButton(_ sender: UIButton) {
dump(viewModel.detail)
requeryPayment = IpayPayment();
requeryPayment?.paymentId = viewModel.detail.paymentID
requeryPayment?.merchantKey = viewModel.detail.merchantKey
requeryPayment?.merchantCode = viewModel.detail.merchantCode
requeryPayment?.refNo = viewModel.detail.refNo
requeryPayment?.amount = viewModel.detail.amount
requeryPayment?.currency = viewModel.detail.currency
requeryPayment?.prodDesc = viewModel.detail.productDescription
requeryPayment?.userName = viewModel.detail.customerName
requeryPayment?.userEmail = viewModel.detail.email
requeryPayment?.userContact = viewModel.detail.phoneNumber
requeryPayment?.remark = viewModel.detail.remark
requeryPayment?.lang = viewModel.detail.language
requeryPayment?.country = viewModel.detail.country
requeryPayment?.backendPostURL = viewModel.detail.backendURL
/* 2. SDK inititalization */
paymentSDK = Ipay();
paymentSDK?.delegate = self;
paymentView = paymentSDK?.checkout(requeryPayment)
/* 3. Payment Checkout Method - END */
self.view.addSubview(paymentView!);
}
}
extension DetailViewController : UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return viewModel.item.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) as? TextFieldTableViewCell else { return UITableViewCell() }
cell.titleLabel.text = viewModel.item[indexPath.section].rawValue
cell.textField.delegate = self
cell.textField.tag = indexPath.section
cell.textField.text = viewModel.item[indexPath.section].value
if viewModel.item[indexPath.section] == .refNo {
cell.textField.isEnabled = false
} else {
cell.textField.isEnabled = true
}
return cell
}
}
extension DetailViewController : UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func textFieldDidEndEditing(_ textField: UITextField) {
guard let text = textField.text else { return }
print(text)
switch viewModel.item[textField.tag] {
case .productDescription:
viewModel.detail.productDescription = text
case .amount:
viewModel.detail.amount = text
case .customerName:
viewModel.detail.customerName = text
case .phoneNumber:
viewModel.detail.phoneNumber = text
case .email:
viewModel.detail.email = text
case .merchantCode:
viewModel.detail.merchantCode = text
case .merchantKey:
viewModel.detail.merchantKey = text
case .paymentID:
viewModel.detail.paymentID = text
case .currency:
viewModel.detail.currency = text
case .language:
viewModel.detail.language = text
case .remark:
viewModel.detail.remark = text
case .country:
viewModel.detail.country = text
case .backendURL:
viewModel.detail.backendURL = text
case .refNo:
break
}
}
}
extension DetailViewController : PaymentResultDelegate {
func paymentSuccess(_ refNo: String!, withTransId transId: String!, withAmount amount: String!, withRemark remark: String!, withAuthCode authCode: String!) {
let message = "refNo=\(String(describing: refNo!))\n transId=\(String(describing: transId!))\n amount=\(String(describing: amount!))\n remark=\(String(describing: remark!)) \nauthCode:\(String(describing: authCode!))"
showMessage(title: "Payment Success", message: message)
}
func paymentFailed(_ refNo: String!, withTransId transId: String!, withAmount amount: String!, withRemark remark: String!, withErrDesc errDesc: String!) {
print("Failed")
let message = "refNo=\(String(describing: refNo!))\n transId=\(String(describing: transId!))\n amount=\(String(describing: amount!))\n remark=\(String(describing: remark!)) \nerrDesc:\(String(describing: errDesc!))"
showMessage(title: "Payment Failed", message: message)
}
func paymentCancelled(_ refNo: String!, withTransId transId: String!, withAmount amount: String!, withRemark remark: String!, withErrDesc errDesc: String!) {
print("Cancel")
let message = "refNo=\(String(describing: refNo!))\n transId=\(String(describing: transId!))\n amount=\(String(describing: amount!))\n remark=\(String(describing: remark!)) \nerrDesc:\(String(describing: errDesc!))"
showMessage(title: "Payment Cancelled", message: message)
}
func requerySuccess(_ refNo: String!, withMerchantCode merchantCode: String!, withAmount amount: String!, withResult result: String!) {
print("something")
}
func requeryFailed(_ refNo: String!, withMerchantCode merchantCode: String!, withAmount amount: String!, withErrDesc errDesc: String!) {
print("something")
}
func showMessage(title : String, message : String) {
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
let doneAction = UIAlertAction(title: "Done", style: .default) { (action) in
self.paymentView?.removeFromSuperview()
self.dismiss(animated: true, completion: nil)
}
alertController.addAction(doneAction)
self.present(alertController, animated: true, completion: nil)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment