Shopify Web Checkout Issue

一笑奈何 提交于 2020-05-31 07:06:09

问题


I am doing WebCheckout. After that, I am getting a callback of that Checkout callback.

I have followed the way which has been written 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()
        )
    )
);

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

I am facing the following issues:

1. ID paymentId = ...;

It shouldn't be paymentId, It is checkoutId while will be received in response of this request.

2. Not getting null value in the response of below code:

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 If I removed the below line than I can able to get some data:

.onPayment(paymentQuery -> paymentQuery

So, code will be look like this :

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

In above code, I am always getting ready=true (Whether I have purchased the product or not). The ready field is using inside the retryHandler function.

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

- 2.2, I am getting order=null. I need orderNumber to display, so how can I get that?

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

Expected behavior:

  • In Point 1, It might be some typing mistake, instead of paymentId, it must display checkoutId. As it is confusing to the developer.
  • In Point 2, It must return the needed data.
  • In Point 2.1, The ready field must be changed when the order is successfully placed.
  • In Point 2.2, The order field must not be null.

回答1:


Found the solution,

Point 1,

  • It is checkoutId not paymentId

Point 2,

NOTE: Please make a note that, for getting updated result, you have to remove the defaultCachePolicy from the GraphClient object where we are setting up our shop to Shopify.

Now, while Polling for checkout completion, pass HTTPCachePolicy as

HttpCachePolicy.Default.NETWORK_ONLY

And the query will be as follows,

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


来源:https://stackoverflow.com/questions/61452059/shopify-web-checkout-issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!