Okay für all jene die über Google auf diesen Beitrag stoßen.
So funktionierts:
- PayPal CardFields über die PayPal SDK rendern
- die CreateOrder Methode der PayPal SDK muss /paypal/express/create-order aufrufen
z.B (ob „product: „acdc“ sein muss oder nicht, weiß ich leider nicht“)
const response = await apiClient.invoke(
'payPalCreateOrder post /paypal/express/create-order',
{
body: {
product: 'acdc',
},
},
)
return response.data.token
- Der Response von 2 ist die orderID von PayPal.
- in onApprove von PayPal rufen createOrder von Shopware auf sowie handlePayment im Anschluss.
z.B
order.value = await createOrder({
orderId,
})
const finishUrl = `${window.location.origin}/${locale.value}/checkout/order/${order.value.id}/paid`
const errorUrl = `${window.location.origin}/${locale.value}/checkout/order/${order.value.id}/failed`
const handledPaymentResponse = await apiClient.invoke(
'handlePayment post /handle-payment',
{
query: {
orderId: order.value.id,
finishUrl,
},
body: {
orderId: order.value.id,
product: 'acdc',
paypalOrderId: orderId,
},
},
)
- Danach muss die Transaktion in PayPal noch bestätigt bzw. „captured“ werden. Wir haben uns eine eigene Caputre Payment Backend Route geschaffen die das erledigt.
- Der Response vomm Handlepayment aus SChritt 4 gibt eine „Finalize Transaction“ URL zurück. Die rufen wir mit einem GET Request auf.
- Erledigt und die Bestellung sollte als Bezahlt markiert sein.