Метод оплаты 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(...) вызывался во вставленном фрагменте.
Вот моя версия кода, я немного изменил пример 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
Надеюсь, это помогло!