<!--
{
  "availability" : [
    "iOS: -",
    "iPadOS: -",
    "macCatalyst: -",
    "macOS: -",
    "visionOS: -",
    "watchOS: -"
  ],
  "documentType" : "symbol",
  "framework" : "PassKit",
  "identifier" : "/documentation/PassKit/PKPaymentAuthorizationControllerDelegate",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "PassKit (Apple Pay and Wallet)"
    ],
    "preciseIdentifier" : "c:objc(pl)PKPaymentAuthorizationControllerDelegate"
  },
  "title" : "PKPaymentAuthorizationControllerDelegate"
}
-->

# PKPaymentAuthorizationControllerDelegate

Methods that let you respond to user interactions with your payment authorization controller.

```
protocol PKPaymentAuthorizationControllerDelegate : NSObjectProtocol
```

## Overview

The [`PKPaymentAuthorizationControllerDelegate`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate) protocol is implemented by the payment authorization controller’s delegate. You implement this protocol to respond to user interaction with that controller.

In most cases, the payment authorization controller automatically waits for its delegate to finish responding to one method before it calls other delegate methods. You indicate that the delegate is finished with the current method by calling that method’s completion block. This action tells the pay authorization controller to proceed with the next step in the authorization process.

There is one exception to this step-by-step procedure: The pay authorization controller calls the [`paymentAuthorizationControllerDidFinish(_:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationControllerDidFinish(_:)) method as soon as the user cancels a payment without authorizing. The controller can call this method at any time.

## Topics

### Handling user interactions

[`presentationWindow(for:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/presentationWindow(for:))

Returns the window in which to present a payment authorization sheet.

### Handling user’s payment method selection

[`paymentAuthorizationController(_:didSelectPaymentMethod:handler:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationController(_:didSelectPaymentMethod:handler:))

Tells the delegate that the user changed the payment method, and asks for an updated payment request.

[`paymentAuthorizationController(_:didSelectPaymentMethod:completion:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationController(_:didSelectPaymentMethod:completion:))

Tells the delegate that the user changed the payment method, and asks for an updated payment request.

### Handling coupons

[`paymentAuthorizationController(_:didChangeCouponCode:handler:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationController(_:didChangeCouponCode:handler:))

Tells the delegate that the user entered or updated a coupon code.

### Handling shipping information

[`paymentAuthorizationController(_:didSelectShippingContact:handler:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationController(_:didSelectShippingContact:handler:))

Tells the delegate that the user selected a shipping address.

[`paymentAuthorizationController(_:didSelectShippingContact:completion:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationController(_:didSelectShippingContact:completion:))

Tells the delegate that the user selected a shipping address.

[`paymentAuthorizationController(_:didSelectShippingMethod:handler:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationController(_:didSelectShippingMethod:handler:))

Tells the delegate that the user selected a shipping method.

[`paymentAuthorizationController(_:didSelectShippingMethod:completion:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationController(_:didSelectShippingMethod:completion:))

Tells the delegate that the user selected a shipping method.

### Handling user’s payment authorization

[`paymentAuthorizationController(_:didRequestMerchantSessionUpdate:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationController(_:didRequestMerchantSessionUpdate:))

Requests an object that validates the identity of a merchant for a payment request.

[`paymentAuthorizationControllerWillAuthorizePayment(_:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationControllerWillAuthorizePayment(_:))

Tells the delegate that the user is authorizing the payment request.

[`paymentAuthorizationController(_:didAuthorizePayment:handler:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationController(_:didAuthorizePayment:handler:))

Tells the delegate that the user authorized the payment request, and asks for a result.

[`paymentAuthorizationController(_:didAuthorizePayment:completion:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationController(_:didAuthorizePayment:completion:))

Tells the delegate that the user authorized the payment request, and asks for a result.

[`paymentAuthorizationControllerDidFinish(_:)`](/documentation/PassKit/PKPaymentAuthorizationControllerDelegate/paymentAuthorizationControllerDidFinish(_:))

Tells the delegate that payment authorization has completed.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)