我已经按照 Shopware 的官方示例为我的无头 Shopware 6 商店实现了 PayPal Express Checkout。然而,我在最后一步遇到了问题,他们使用
fetch()
来调用 redirectUrl
。这种方法对我不起作用,因为 redirectUrl
响应是 HTML,并且触发对其的提取不会按预期将用户重定向到 PayPal。
这是我当前的解决方法:我不使用
fetch()
,而是将用户直接重定向到 redirectUrl
。这会再次打开 PayPal 界面进行第二次确认,虽然它确实在 Shopware 中将订单标记为已付款,但它为用户增加了不必要的步骤。
如何完成 PayPal Express Checkout 流程,而不需要重定向到redirectUrl 在 PayPal 进行第二次确认?在
handlePayment
后,如果没有此额外的重定向,我应该按照什么步骤在 Shopware 中将订单标记为已付款?
<PayPalScriptProvider
options={{
clientId: "<myClientId>",
}}
>
<PayPalButtons
createOrder={async () => {
// Create order --> PayPal
// POST /store-api/paypal/express/create-order
// return response.data.token
}}
onApprove={async (data, actions) => {
// Prepare Checkout --> PayPal
// POST /store-api/paypal/express/prepare-checkout { body: { token: data.orderId }}
// Update context --> set paymentMethodId to PayPal
// POST /store-api/account/register { body: { paymentMethodId: <paypalPaymentMethodId> }}
// Create order --> Shopware
// POST /store-api/checkout/order
// Handle Payment --> Shopware/PayPal
// POST /store-api/handlePayment
// { query: {isPayPalExpressCheckout: true, paypalOrderId: data.orderId } body: { orderId: <shopwareOrderId>, finishUrl: 'https://...', errorUrl: 'https://...' } }
// Redirect to the redirectUrl from the handlePayment endpoint --> re-confirmation at PayPal
}}
></PayPalButtons>
</PayPalScriptProvider>
在此设置中,handlePayment后重定向到redirectUrl会再次打开PayPal,提示用户再次确认付款。只有在第二次确认后,Shopware 才会将订单标记为“已付款”而不是“未确认”。
我也遇到了同样的问题,请问你找到解决办法了吗?