In Swift 5.0 Follow the following steps:-
1:- Follow these steps to download and import the library in your project:-
Download SDK from:-
https://github.com/Paytm-Payments/Paytm_iOS_App_Kit
Open your project in XCode and from the File menu, select Add files to
"your project"
Select Paytm.framework in the directory you just unzipped
Make sure 'Copy items if needed' is checked and click 'Add' Under
"Link Binary With Libraries" in the "Build Phases" tab of your
project settings, add SystemConfiguration.framework
Check if PaytmSDK.framework is added in both “Link Binary With
Libraries” and “Embedded Binaries”. If not, add by clicking on the plus icon.
Import PaytmSDK to ViewController
import PaymentSDK
Generate ChecksumHash
Security parameters to avoid tampering. Generated using server-side checksum utility provided by Paytm. Merchant has to ensure that this always gets generated on the server. Utilities to generate checksum hash is available
Add code on your payment ViewController to execute the payment process
var txnController = PGTransactionViewController()
var serv = PGServerEnvironment()
var params = [String:String]()
var order_ID:String?
var cust_ID:String?
func beginPayment() {
serv = serv.createStagingEnvironment()
let type :ServerType = .eServerTypeStaging
let order = PGOrder(orderID: "", customerID: "", amount: "", eMail: "", mobile: "")
order.params = ["MID": "rxazcv89315285244163",
"ORDER_ID": "order1",
"CUST_ID": "cust123",
"MOBILE_NO": "7777777777",
"EMAIL": "username@emailprovider.com",
"CHANNEL_ID": "WAP",
"WEBSITE": "WEBSTAGING",
"TXN_AMOUNT": "100.12",
"INDUSTRY_TYPE_ID": "Retail",
"CHECKSUMHASH": "oCDBVF+hvVb68JvzbKI40TOtcxlNjMdixi9FnRSh80Ub7XfjvgNr9NrfrOCPLmt65UhStCkrDnlYkclz1qE0uBMOrmuKLGlybuErulbLYSQ=",
"CALLBACK_URL": "https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID=order1"]
self.txnController = self.txnController.initTransaction(for: order) as! PGTransactionViewController
self.txnController.title = "Paytm Payments"
self.txnController.setLoggingEnabled(true)
if(type != ServerType.eServerTypeNone) {
self.txnController.serverType = type;
} else {
return
}
self.txnController.merchant = PGMerchantConfiguration.defaultConfiguration()
self.txnController.delegate = self
self.navigationController?.pushViewController(self.txnController, animated: true)
}
Change "CHECKSUMHASH": value in params that comes from API
order.params["CHECKSUMHASH"] = checkSum // API checkSum value
confirm the protocol-delegate of ‘PGTransactionDelegate’ to Handle error and success responses
To handle success/errors on completion of payment, implement "didFinishedResponse", "didCancelTrasaction", "errorMisssingParameter" methods of the "PGTransactionDelegate". Code snippet provided below:-
extension PaymentViewController : PGTransactionDelegate {
//this function triggers when transaction gets finished
func didFinishedResponse(_ controller: PGTransactionViewController, response responseString: String) {
let msg : String = responseString
var titlemsg : String = ""
if let data = responseString.data(using: String.Encoding.utf8) {
do {
if let jsonresponse = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any] , jsonresponse.count > 0{
titlemsg = jsonresponse["STATUS"] as? String ?? ""
}
} catch {
debugLog("Something went wrong")
}
}
let actionSheetController: UIAlertController = UIAlertController(title: titlemsg , message: msg, preferredStyle: .alert)
let cancelAction : UIAlertAction = UIAlertAction(title: "OK", style: .cancel) {
action -> Void in
controller.navigationController?.popViewController(animated: true)
}
actionSheetController.addAction(cancelAction)
self.present(actionSheetController, animated: true, completion: nil)
}
//this function triggers when transaction gets cancelled
func didCancelTrasaction(_ controller : PGTransactionViewController) {
controller.navigationController?.popViewController(animated: true)
}
//Called when a required parameter is missing.
func errorMisssingParameter(_ controller : PGTransactionViewController, error : NSError?) {
controller.navigationController?.popViewController(animated: true)
}
}