Метод оплаты CashApp не отображается в Django при интеграции с Adyen

Я пытаюсь интегрировать методы оплаты Adyen (включая CashApp) в мое веб-приложение Django, но метод оплаты CashApp не отображается на фронт-энде. Вместо этого я получаю следующую ошибку:

ERROR Error during initialization ERROR: Error during initialization
at e.<anonymous> (https://checkoutshopper-test.adyen.com/checkoutshopper/sdk/5.68.0/adyen.js:1:460538)
at P (https://checkoutshopper-test.adyen.com/checkoutshopper/sdk/5.68.0/adyen.js:1:41524)
at Generator.<anonymous> (https://checkoutshopper-test.adyen.com/checkoutshopper/sdk/5.68.0/adyen.js:1:42844)

Этот же код отображается на шлюзе карточных платежей, но не работает на cashapp.

Мой html код: Где используется adyen sdk=5.68.0 версия. Версия больше чем 5.69.0 выдает другую ошибку, что AdyenCheckout не определен, я не знаю как решить и это.

<link rel="stylesheet" href="https://checkoutshopper-test.adyen.com/checkoutshopper/sdk/5.68.0/adyen.css">
<div id="component"></div>
<script src="https://checkoutshopper-test.adyen.com/checkoutshopper/sdk/5.68.0/adyen.js"></script>

async function startCheckout() {
    const checkoutSessionResponse = await callServer({% url 'sessions' %});
    const checkout = await createAdyenCheckout(checkoutSessionResponse);
    checkout.create(type).mount("#component");
}

async function createAdyenCheckout(session) {
    return new AdyenCheckout({
        clientKey,
        session: session,
        paymentMethodsConfiguration: {
            cashapp: { amount: { value: 100, currency: "USD" }, countryCode: "US" }
        }
    });
}

Файл django view.py:


def adyen_sessions(request):
    # payments = ["card", "cashapp", "ideal"]
    session_response = {
        'client_key': settings.ADYEN_CLIENT_KEY,
        'method': 'cashapp'
    }
    return render(request, 'component.html', context=session_response)

def sessions(request):
    if request.method == "POST":
        adyen = Adyen.Adyen()
        adyen.payment.client.xapikey = settings.ADYEN_API_KEY
        adyen.payment.client.platform = settings.ADYEN_ENVIRONMENT
        adyen.payment.client.merchant_account = settings.ADYEN_MERCHANT_ACCOUNT

        request_data = {
            'amount': {
                "value": 100,  # amount in minor units
                "currency": "USD"
            },
            'reference': f"Reference {uuid.uuid4()}",
            'returnUrl': f"{request.build_absolute_uri('/redirect/')}",
            'countryCode': "US",
            'lineItems': [
                {
                    "quantity": 1,
                    "amountIncludingTax": 5000,
                    "description": "Sunglasses"
                },
                {
                    "quantity": 1,
                    "amountIncludingTax": 5000,
                    "description": "Headphones"
                }
            ],
            'merchantAccount': settings.ADYEN_MERCHANT_ACCOUNT,
        }
        result = adyen.checkout.payments_api.sessions(request_data)
        data = json.loads(result.raw_response)
        print("/sessions response:\n" + data.__str__())
        return JsonResponse(data, status=200, safe=False)

Согласно Adyen Documentation for CashApp вам необходимо включить в запрос следующие два параметра:

  • "storePaymentMethodMode": "askForConsent"
  • "recurringProcessingModel": "CardOnFile"

Я бы также убедился, что startCheckout(...) вызывается на странице. Я не вижу, чтобы startCheckout(...) вызывался во вставленном фрагменте.

example of cash app rendering on Drop-in

Вот моя версия кода, я немного изменил пример Python-integration-example на Github:

def adyen_sessions(host_url):
    adyen = Adyen.Adyen()
    adyen.payment.client.xapikey = get_adyen_api_key() // your API key
    adyen.payment.client.platform = "test" 
    adyen.payment.client.merchant_account = get_adyen_merchant_account() // your merchant account

    request = {}

    request['amount'] = {"value": "10000", "currency": "USD"}  # amount in minor units
    request['reference'] = f"Reference {uuid.uuid4()}"  # provide your unique payment reference
    # set redirect URL required for some payment methods
    request['returnUrl'] = f"{host_url}/redirect?shopperOrder=myRef"
    request['countryCode'] = "US"
    request['recurringProcessingModel'] = "CardOnFile"
    request['storePaymentMethodMode'] = "askForConsent"

    # set lineItems: required for some payment methods (ie Klarna)
    request['lineItems'] = \
        [{"quantity": 1, "amountIncludingTax": 5000, "description": "Sunglasses"}, # amount in minor units
         {"quantity": 1, "amountIncludingTax": 5000, "description": "Headphones"}] # amount in minor units

    request['merchantAccount'] = get_adyen_merchant_account()

    result = adyen.checkout.payments_api.sessions(request)

    formatted_response = json.dumps((json.loads(result.raw_response)))
    print("/sessions response:\n" + formatted_response)

    return formatted_response

Надеюсь, это помогло!

Вернуться на верх