Apple Pay Integration

mail@pastecode.io avatar
unknown
swift
2 years ago
3.1 kB
2
Indexable
Never
import PassKit

class ApplePayManager: NSObject {
    
    // Crie um PKPaymentRequest que inclui os itens da compra e o valor total.
    func createPaymentRequest() -> PKPaymentRequest {
        let request = PKPaymentRequest()
        
        // Define o nome do seu serviço ou produto.
        request.merchantIdentifier = "merchant.com.yourcompany.yourapp"
        
        // Define as moedas suportadas pelo seu serviço.
        request.currencyCode = "USD"
        request.countryCode = "US"
        
        // Define os tipos de pagamento suportados pelo seu serviço.
        request.supportedNetworks = [.amex, .masterCard, .visa]
        
        // Define o tipo de processamento de pagamento para o seu serviço.
        request.merchantCapabilities = .capability3DS
        
        // Define o tipo de itens de compra que o cliente pode adquirir.
        let item = PKPaymentSummaryItem(label: "Assinatura Mensal", amount: NSDecimalNumber(string: "9.99"))
        let total = PKPaymentSummaryItem(label: "Total", amount: item.amount)
        request.paymentSummaryItems = [item, total]
        
        // Define as informações de envio e faturamento do cliente.
        request.requiredShippingContactFields = [.emailAddress, .name, .postalAddress]
        request.requiredBillingContactFields = [.emailAddress, .name, .postalAddress]
        
        // Retorna o pedido de pagamento.
        return request
    }
    
    // Inicia o processo de pagamento.
    func startPayment() {
        let paymentRequest = createPaymentRequest()
        let paymentController = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
        paymentController.delegate = self
        paymentController.present(completion: nil)
    }
}

extension ApplePayManager: PKPaymentAuthorizationControllerDelegate {
    
    // Verifica se o pagamento foi autorizado e captura as informações do pagamento.
    func paymentAuthorizationController(_ controller: PKPaymentAuthorizationController, didAuthorizePayment payment: PKPayment, handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {
        
        // Realiza a validação do pagamento e captura as informações do pagamento.
        let paymentToken = payment.token
        let paymentData = paymentToken.paymentData
        let paymentMethod = paymentToken.paymentMethod
        let billingAddress = payment.billingContact?.postalAddress
        let shippingAddress = payment.shippingContact?.postalAddress
        
        // Adicione aqui a lógica de validação do pagamento e conclusão da assinatura.
        // ...
        
        // Retorna o resultado do pagamento autorizado.
        let paymentAuthorizationResult = PKPaymentAuthorizationResult(status: .success, errors: nil)
        completion(paymentAuthorizationResult)
    }
    
 // Notifica o controle de pagamento que o processo de pagamento foi concluído.
func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
    controller.dismiss(completion: nil)
}