Shopify 网络结账问题

Shopify Web Checkout Issue

我在做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,

  • 是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()
            }
    }
}