# Payment
Each payment type must be wrapped in abstract observer. The abstract observer is responsable to validate some payment parameters and have some lifecycle hooks for the payment
<abstract-payment-observer v-if="selectedProvider.name">
<component
class="py-8"
@isPaymentReady="isPaymentReady = arguments[0]"
@providerPaymentHandler="providerPaymentHandler = arguments[0]"
:provider="selectedProvider"
:is="getComponentProviderByName(selectedProvider.name)"
/>
</abstract-payment-observer>
# Adyen external
Oddo will create a dinamic form. We build this form and on click, he send to external adyen new tab. Our AdyenExternalPaymentProvider handle all this logic using the user session.