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点,可能是打错了,不是
paymentId
,而是显示checkoutId
。因为它会让开发人员感到困惑。
- 第2点,必须return需要的数据。
- 在第2.1点,下单成功后必须修改
ready
字段。
- 第 2.2 点,
order
字段不能为空。
找到解决方案,
点 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()
}
}
}
我在做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点,必须return需要的数据。
- 在第2.1点,下单成功后必须修改
ready
字段。 - 第 2.2 点,
order
字段不能为空。
找到解决方案,
点 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()
}
}
}