Authorize.Net is a payment gateway service provider, It allows merchants to accept credit card and electronic check payments through their website and over an Internet Protocol connection. It is a safer way to process transactions online.
static let kClientKey = "5qwhb******************************************************43NsN" static let kClientName = "9r********5A" static let kClientTransationKey = "2w************7t" static let kValidationMode = "testMode" // liveMode static let kPaymentMode = AcceptSDKEnvironment.ENV_TEST //AcceptSDKEnvironment.ENV_LIVE static let kAuthorisedAPI = "https://apitest.authorize.net/" //https://api.authorize.net/ static let ApplePayMerchantID = "merchant.com.MyTestApp"
@IBOutlet weak var btnApplePay: UIButton!
import PassKit
var SupportedPaymentNetworks = [PKPaymentNetwork.amex, PKPaymentNetwork.cartesBancaires, PKPaymentNetwork.cartesBancaires, PKPaymentNetwork.chinaUnionPay, PKPaymentNetwork.discover, PKPaymentNetwork.eftpos, PKPaymentNetwork.electron, PKPaymentNetwork.elo, PKPaymentNetwork.idCredit, PKPaymentNetwork.interac, PKPaymentNetwork.JCB, PKPaymentNetwork.mada, PKPaymentNetwork.maestro, PKPaymentNetwork.masterCard, PKPaymentNetwork.privateLabel, PKPaymentNetwork.quicPay, PKPaymentNetwork.suica, PKPaymentNetwork.visa, PKPaymentNetwork.vPay]
@IBAction func btnApplePayTapped(_ sender: UIButton) { //MARK: Checks apple pay is supported on current device or not if PKPaymentAuthorizationViewController.canMakePayments() == false { let alert = UIAlertController(title: "Apple Pay is not available", message: nil, preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil)) return self.present(alert, animated: true, completion: nil) } //MARK: checks apple pay is available then opens wallet app if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: supportedNetworks) == false { openWalletApp() } let tempDict = cartDetailsFetch?.value(forKey: "data") as! Dictionary <String, Any> var totalPay : NSDecimalNumber? let request = PKPaymentRequest() request.currencyCode = "USD" request.countryCode = "US" // Set your apple pay merchant id request.merchantIdentifier = Constants.ApplePayMerchantID request.supportedNetworks = SupportedPaymentNetworks // DO NOT INCLUDE PKMerchantCapability.capabilityEMV request.merchantCapabilities = PKMerchantCapability.capability3DS //MARK: pass total value and currency code to apple payment request request.paymentSummaryItems = [ PKPaymentSummaryItem(label: "Total", amount: totalPay as! NSDecimalNumber) ] let applePayController = PKPaymentAuthorizationViewController(paymentRequest: request) applePayController?.delegate = self self.present(applePayController!, animated: true, completion: nil) } //MARK: opens wallet app func openWalletApp() { let library = PKPassLibrary() library.openPaymentSetup() } //MARK: encrypt data and returns encrypted string @objc func base64forData(_ theData: Data) -> String { let charSet = CharacterSet.urlQueryAllowed let paymentString = NSString(data: theData, encoding: String.Encoding.utf8.rawValue)!.addingPercentEncoding(withAllowedCharacters: charSet) return paymentString! }
func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, completion: (@escaping (PKPaymentAuthorizationStatus) -> Void)) { print("paymentAuthorizationViewController delegates called") // completion(PKPaymentAuthorizationStatus.success) print("Payment method data : \(payment.token.paymentMethod.description)") print("Payment method data : \(payment.token.paymentData.description)") if payment.token.paymentData.count > 0 { let base64str = self.base64forData(payment.token.paymentData) let message = String(format: "Data Value: %@", base64str) let alert = UIAlertController(title: "Authorization Success", message: "", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil)) completion(PKPaymentAuthorizationStatus.success) //call api CallCreateCustApplePayProfile(payment: payment) } else { let alert = UIAlertController(title: "Authorization Failed!", message: nil, preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil)) completion(PKPaymentAuthorizationStatus.failure) return self.performApplePayCompletion(controller, alert: alert) } } //MARK: apple payment is finished then this method calls @objc func performApplePayCompletion(_ controller: PKPaymentAuthorizationViewController, alert: UIAlertController) { controller.dismiss(animated: true, completion: {() -> Void in self.present(alert, animated: false, completion: nil) }) } func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) { controller.dismiss(animated: true, completion: nil) print("paymentAuthorizationViewControllerDidFinish called") }
func CallCreateCustApplePayProfile(payment: PKPayment){ let tempDict = cartDetailsFetch?.value(forKey: "data") as! Dictionary <String, Any> let addressData = UserDefaults.standard.value(forKey: "CheckOutAddress") as? Dictionary <String,Any> let firstName = addressData!["first_name"] ?? "" let lastName = addressData!["last_name"] ?? "" let address1: String = addressData!["addres1"] as! String let address2: String = addressData!["addres2"] as! String let addressString = NSString(format: "%@,%@", address1,address2) let city = addressData!["city_name"] ?? "" let state = addressData!["state"] ?? "" let zip = addressData!["pincode"] ?? "" let country = "" _ = addressData!["mobile"] ?? "" let base64str = payment.token.paymentData.base64EncodedString() print("Data value: \(base64str)") let totalPay = tempDict["total"] as? String ?? "0.0" //MARK: Send basic details to authorize.net api let savecardJson = "{\r\n \"createTransactionRequest\": {\r\n \"merchantAuthentication\": {\r\n \"name\": \"\(Constants.kClientName)\",\r\n \"transactionKey\": \"\(Constants.kClientTransationKey)\" },\r\n \"transactionRequest\": {\r\n \"transactionType\": \"authCaptureTransaction\",\r\n \"amount\": \"\(totalPay)\",\r\n \"payment\": {\r\n \"opaqueData\":{\r\n \"dataDescriptor\": \"COMMON.APPLE.INAPP.PAYMENT\",\r\n \"dataValue\": \"\(base64str)\" } }, \r\n \"order\" : {\r\n \"invoiceNumber\" : \"\(self.invoiceNo)\", \r\n \"description\" : \"OrderFromiOS\"}, \r\n \"billTo\": {\r\n \"firstName\": \"\(firstName)\",\r\n \"lastName\": \"\(lastName)\",\r\n \"company\": \"\("company")\",\r\n \"address\": \"\(addressString)\",\r\n \"city\": \"\(city)\",\r\n \"state\": \"\(state)\",\r\n \"zip\": \"\(zip)\",\r\n \"country\": \"\(country)\"},\r\n \"shipTo\": {\r\n \"firstName\": \"\(firstName)\",\r\n \"lastName\": \"\(lastName)\",\r\n \"company\": \"\("company")\",\r\n \"address\": \"\(addressString)\",\r\n \"city\": \"\(city)\",\r\n \"state\": \"\(state)\",\r\n \"zip\": \"\(zip)\",\r\n \"country\": \"\(country)\"},\r\n \"customerIP\": \"\(IPAdress)\"}} }" print("CallCreateCustApplePayProfile payment data : \(savecardJson)") let jsonData = Data(savecardJson.utf8) let request = NSMutableURLRequest(url: NSURL(string: "\(Constants.kAuthorisedAPI)xml/v1/request.api")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" //request.allHTTPHeaderFields = headers request.httpBody = jsonData as Data request.timeoutInterval = 60 let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error ?? "") let httpResponse = response as? HTTPURLResponse print(httpResponse ?? "") self.aryCreatePayProf = try! JSONSerialization.jsonObject(with: data!, options: []) as! NSDictionary as! [String : Any] print("payment details from apple pay from error block :== \(self.aryCreatePayProf)") _ = "\(Constants.APP_URL+URLs.placeOrder.rawValue)" } else { let httpResponse = response as? HTTPURLResponse print(httpResponse!) self.aryCreatePayProf = try! JSONSerialization.jsonObject(with: data!, options: []) as! NSDictionary as! [String : Any] print("payment details from apple pay :== \(self.aryCreatePayProf)") let messages = self.aryCreatePayProf["messages"] as! Dictionary<String,Any> let arymessages = messages["message"]! as! NSArray let message = arymessages[0] as! Dictionary<String,Any> if "\(message["code"]!)" == "I00001" { //call your server api here for submit data to your server } else { DispatchQueue.main.async { self.view.makeToast("\(message["text"]!)", duration: 5.0, position: .bottom) ACProgressHUD.shared.hideHUD() } } } }) dataTask.resume() }
You can see which params needed when authorize.net API calling from this link: https://developer.authorize.net/api/reference/index.html#mobile-in-app-transactions-create-an-apple-pay-transaction
To know more about us and the other services or solutions we provide, contact us.
Web design was once an element of online brand-building that you needed to know how…
Financial services and banking are being reshaped and revolutionized by what artificial intelligence has made…
Yes, you can add Google Maps to your Android app, providing seamless, interactive mapping for…
SEO and digital marketing are constantly evolving. It happens slowly but quickly at the same…
As an AI development team, we regularly encounter scenarios and questions from clients regarding AI…
Predictive analytics is your ultimate guide to data-backed business strategy. Data-driven insights, proactive decision-making, and…