Shopify Web Checkout Issue - PullRequest
       42

Shopify Web Checkout Issue

1 голос
/ 27 апреля 2020

Я делаю WebCheckout . После этого я получаю обратный вызов этого обратного вызова Checkout.

Я пошел по пути, который был написан здесь .

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, это checkdId, пока будет получить в ответ на этот запрос .

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 (независимо от того, приобрел я продукт или нет). Поле готовности используется внутри функции 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 не должно быть нулевым.

1 Ответ

1 голос
/ 27 апреля 2020

Нашли решение,

Точка 1,

  • Это проверкаIdI PaymentId

Точка 2 ,

ПРИМЕЧАНИЕ : обратите внимание, что для получения обновленного результата необходимо удалить defaultCachePolicy из объекта GraphClient, где мы настраиваем наш магазин на Shopify.

Теперь, при опросе для завершения проверки , передайте HTTPCachePolicy как

HttpCachePolicy.Default.NETWORK_ONLY

И запрос будет следующим образом,

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