Posts

Post not yet marked as solved
0 Replies
677 Views
I have an application which should use Apple Pay. As soon as user accept payment and Apple Pay works well, like Face ID or PIN, I would like to send Apple Pay Token to PayU. Unfortunatelly I did not find and support in PayU (https://czech.payu.com/en/) In my ApplePayViewController I have method like: class ApplePayViewController: { func submitToken(payment: PKPayment, completion: @escaping (PKPaymentAuthorizationResult) -> Void) { let result = PKPaymentAuthorizationResult(status: .failure, errors: nil) let jsonPayment = try? JSONSerialization.jsonObject(with: payment.token.paymentData, options: []) as? Dictionary<String, AnyObject> if let jsonData = jsonPayment { let jsonTokenString = String(decoding: payment.token.paymentData, as: UTF8.self) print("Json Data String: \(jsonTokenString)") } // What should be sent to PayU? // paymentData? https://developer.apple.com/documentation/passkit/pkpaymenttoken/1617000-paymentdata // Or data from Payment Token Structure https://developer.apple.com/documentation/passkit/apple_pay/payment_token_format_reference#//apple_ref/doc/uid/TP40014929 // Data are sent to my server over API like // https://<URL>/api/send_payment&user=<username>&token=<token>&payment_data=<ApplePayToken> do { send_payment(data: paymentData, completion: { apiResponse in switch apiResponse { case .success(let zapisStatus): result.status = PKPaymentAuthorizationStatus.success completion(result) case .failure(let error): result.status = PKPaymentAuthorizationStatus.failure completion(result) } }) } } extension ApplePayViewController: PKPaymentAuthorizationViewControllerDelegate { func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController!, didAuthorizePayment payment: PKPayment!, handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) { let status = PKPaymentAuthorizationStatus(rawValue: 0)! switch status.rawValue { case 0: self.paymentStatus = PKPaymentAuthorizationStatus.success completion(PKPaymentAuthorizationResult(status: PKPaymentAuthorizationStatus.success, errors: nil)) case 1: self.paymentStatus = PKPaymentAuthorizationStatus.failure completion(PKPaymentAuthorizationResult(status: PKPaymentAuthorizationStatus.failure, errors: nil)) default: self.paymentStatus = PKPaymentAuthorizationStatus.failure completion(PKPaymentAuthorizationResult(status: PKPaymentAuthorizationStatus.failure, errors: nil)) } if payment.token.paymentData.count > 0 { self.submitToken(payment: payment) } } The data are send over by this code: public func getURLRequest(endpoint: String, data: Data) -> URLRequest{ guard let url = URL(string: RestAPIHelper.RestAPIKeys.url_pub + endpoint) else { fatalError() } var urlRequest = URLRequest(url: url) urlRequest.httpMethod = "POST" urlRequest.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") urlRequest.httpBody = data return urlRequest } func send_payment(data: Data, completion: @escaping(Result<[UserPlatbyInfo], APIError>) -> Void) { let urlRequest = getURLRequest(endpoint: APIInterface.user_zapisplatbu.rawValue, data: data) let dataTask = URLSession.shared.dataTask(with: urlRequest) { respData, resp, _ in // Handle return status dataTask.resume() } Basically I don't know what PayU expects in order to accept ApplePayToken. PayU expects Apple Pay Token, but it is https://developer.apple.com/documentation/passkit/pkpaymenttoken/1617000-paymentdata or https://developer.apple.com/documentation/passkit/apple_pay/payment_token_format_reference#//apple_ref/doc/uid/TP40014929
Posted
by phracek.
Last updated
.