如何在 shopware 6 中使用 store-api 设置付款详情

How to set payment details with store-api in shopware 6

我想将 shopware 用作带条纹支付提供商的无头商店。支付在 shopware 中没有问题。

现在我只用 api 测试订单步骤。最后一步是通过提供商(在本例中为条纹)处理付款。 在 shopware documentation 中,它通过 api 调用 /store-api/handle-payment 处理。 有效负载如下所示:

{
    "orderId": "string",
    "finishUrl": "string",
    "errorUrl": "string"
}

现在,当我请求 api 时,我收到 500 错误消息:

No credit card selected

我的问题是,如何通过这个api发送信用卡数据,以便 Stripe 可以处理付款。有人解决这个问题吗?

您有以下选择:

  • 查看本地 API 文档 - 它可能比 public 包含更多信息,因为它支持已安装的模块(参见

  • 联系他们的支持以获取更多信息,因为 API 文档

    中未涵盖这些信息
  • 通过正常店面进行测试付款,并查看在浏览器开发工具的网络面板中发出的请求

根据 Alex 的建议,我找到了以下解决方案:

  1. 查找错误credit card not selected:仅当您尝试按api 请求付款时才会发生这种情况。我发现的原因是,Stripe 将付款详细信息(信用卡 ID)保存在会话对象中。根据 api,您默认无法访问此内容,这就是为什么您会收到消息 credit card not selected

  2. 看看 stripe 插件,尤其是在您的 PaymentMethods/Card/CardPaymentConfigurator 中。 我将以下内容放在配置方法中 来自第 46 - 62 行

    $requestDataBag = $stripePaymentContext;
    $paymentDetails = $requestDataBag->requestDataBag->get('paymentDetails');
    if(!null == $paymentDetails) {
         $card = $paymentDetails->get('creditCardId');
    } else {
         $card = null;
    }
    $selectedCard = $this->stripePaymentMethodSettings->getSelectedCard();
    if ($selectedCard || isset($selectedCard['id'])) {
        $selectedCard = $selectedCard['id'];
    } elseif ($card) {
         $selectedCard = $card;
    } else {
         throw PaymentIntentPaymentConfiguratorException::noCreditCardSelected();
    }
    
  3. 按处理付款请求发送付款数据:

    let payload = {
         "orderId": event,
         "finishUrl": "https://www.myfinishurl.de",
         "errorUrl": "https://www.myurl.de/order/error",
         "paymentDetails": {
             "creditCardId": "creditcardid"
         }
    

现在对您需要的所有方法执行此操作。有用。也许 Stripe 可以在未来实现这一点。