【问题标题】:Shopify Web Checkout IssueShopify 网络结帐问题
【发布时间】:2020-04-27 05:07:15
【问题描述】:

我正在做WebCheckout。之后,我收到了该 Checkout 回调的回调。

我已经按照here写的方式。

GraphClient client = ...;
ID paymentId = ...;

Storefront.QueryRootQuery query = Storefront.query(rootQuery -> rootQuery
    .node(paymentId, nodeQuery -> nodeQuery
        .onPayment(paymentQuery -> paymentQuery
        .checkout(checkoutQuery -> checkoutQuery
                    .ready()
            .order(orderQuery -> orderQuery
            .processedAt()
            .orderNumber()
            .totalPrice()))
        .errorMessage()
        .ready()
        )
    )
);

================================================ ========================

我面临以下问题:

1. ID paymentId = ...;

它不应该是 paymentId,它是 checkoutId 而将在this request 的响应中收到。

2.在以下代码的响应中没有得到 null 值:

Storefront.QueryRootQuery query = Storefront.query(rootQuery -> rootQuery
    .node(paymentId, nodeQuery -> nodeQuery
        .onPayment(paymentQuery -> paymentQuery
        .checkout(checkoutQuery -> checkoutQuery
            .order(orderQuery -> orderQuery
            .processedAt()
            .orderNumber()
            .totalPrice()))
        .errorMessage()
        .ready()
        )
    )
);

- 2.1 如果我删除了下面的行,我就可以获得一些数据:

.onPayment(paymentQuery -> paymentQuery

因此,代码将如下所示:

.node(paymentId) { nodeQuery: NodeQuery ->
    nodeQuery.onCheckout { checkoutQuery: CheckoutQuery ->
        checkoutQuery
            .createdAt()
            .updatedAt()
            .completedAt()
            .email()
            .ready()
            .order {
                it.orderNumber()
            }
    }
}

在上面的代码中,我总是ready=true(无论我是否购买了产品)。 ready 字段在 retryHandler 函数中使用。

RetryHandler.exponentialBackoff(500, TimeUnit.MILLISECONDS, 1.2f)
.whenResponse(
      response -> ((Storefront.Payment) ((GraphResponse<Storefront.QueryRoot>) response).data().getNode()).getReady() == false
    )
    .maxCount(12)
    .build()

- 2.2,我得到 order=null。我需要 orderNumber 才能显示,我该如何获得呢?

================================================ ====================

预期行为:

  • 在第 1 点,可能是输入错误,而不是 paymentId,它必须显示 checkoutId。因为这会让开发人员感到困惑。
  • 第2点,必须返回需要的数据。
  • 第2.1点,下单成功后必须更改ready字段。
  • 在第 2.2 点中,order 字段不能为空。

【问题讨论】:

    标签: shopify shopify-app shopify-mobile-buy-sdk


    【解决方案1】:

    找到解决办法,

    第 1 点,

    • 这是 checkoutId 而不是 paymentId

    第 2 点,

    注意:请注意,要获得更新的结果,您必须从我们设置 Shopify 的 GraphClient 对象中删除 defaultCachePolicy。

    现在,while Polling for checkout completion,将 HTTPCachePolicy 传递为

    HttpCachePolicy.Default.NETWORK_ONLY

    查询如下,

    rootQuery.node(paymentId) { nodeQuery: NodeQuery ->
        nodeQuery.onCheckout { checkoutQuery: CheckoutQuery ->
            checkoutQuery
                .createdAt()
                .updatedAt()
                .completedAt()
                .email()
                .ready()
                .order {
                    it.orderNumber()
                }
        }
    }
    

    【讨论】:

    • true,在 iOS GIT 文档中,他们将其称为 checkout_id,但在 Android GIT 文档中,他们提到与 payment_id 相同
    猜你喜欢
    • 2020-03-28
    • 1970-01-01
    • 2020-12-02
    • 2020-02-27
    • 2019-07-13
    • 2023-03-16
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    相关资源
    最近更新 更多