What's your biggest current challenge? Have your say in Community Polls along the right column.
Our Partner & Developer boards on the community are moving to a brand new home: the .dev community forums! While you can still access past discussions here, for all your future app and storefront building questions, head over to the new forums.

Re: Completing checkout with checkoutCompleteWithTokenizedPaymentV3 and Stripe

Completing checkout with checkoutCompleteWithTokenizedPaymentV3 and Stripe

alex-spataru
Visitor
2 0 8

Hello,

 

I am developing a mobile application (which is registered as a private app for my client's store) that uses the Storefront API. I have implemented most of the features that the client needs, however, I have some issues while using the checkoutCompleteWithTokenizedPaymentV3 mutation with the client's Stripe account.

 

For the moment, I use the following queries/mutations to build my checkout and associate customer information:

 

  1. Create checkout with products & quantities:
    # "..." Denotes the items & qty selected by the user
    mutation { checkoutCreate(input:{lineItems:[...]}) { checkout { id } } }
  2. Wait for response, get checkout ID & associate customer information:
    # Query
    mutation checkoutCustomerAssociateV2($checkoutId: ID!, $customerAccessToken: String!) {
    checkoutCustomerAssociateV2(checkoutId: $checkoutId, customerAccessToken: $customerAccessToken) {
    checkout {
    id
    }
    }
    }

    # Variables JSON
    {
    "checkoutId": $ID,
    "customerAccessToken": $CustomerAccessToken
    }
  3. Wait for response, update checkout ID (if necessary) & update shipping address:
    # Query
    mutation checkoutShippingAddressUpdateV2($shippingAddress: MailingAddressInput!, $checkoutId: ID!) {
    checkoutShippingAddressUpdateV2(shippingAddress: $shippingAddress, checkoutId: $checkoutId) {
    checkout {
    id
    }
    }
    }

    # Variables JSON
    {
    "checkoutId": $ID,
    "shippingAddress": {
    # Shipping address information from user
    }
    }
  4. Wait for response, update checkout ID (if necessary) and get available shipping rates from store:
    query { 
    node(id: $ID) {
    ... on Checkout {
    id
    availableShippingRates {
    ready
    shippingRates {
    handle
    priceV2 {
    amount
    }
    title
    }
    }
    }
    }
    }
  5. Select by default first option, and use checkoutShippingLineUpdate when user selects another option (shipping rates are displayed as a series of checkboxes in the UI). Get total order price, tax price, etc:
    mutation checkoutShippingLineUpdate($checkoutId: ID!, $shippingRateHandle: String!) { 
    checkoutShippingLineUpdate(checkoutId: $checkoutId, shippingRateHandle: $shippingRateHandle) {
    checkout {
    id
    totalTaxV2 {
    amount
    }
    subtotalPriceV2 {
    amount
    }
    totalPriceV2 {
    amount
    currencyCode
    }
    shippingLine {
    handle
    priceV2 {
    amount
    }
    }
    }
    }
    }
  6. User agrees with displayed prices and clicks on the next button. Client sends payment information to Stripe and obtains a valid token, then we use the following query:
    # Query
    mutation checkoutCompleteWithTokenizedPaymentV3($checkoutId: ID!, $payment: TokenizedPaymentInputV3!) {
    checkoutCompleteWithTokenizedPaymentV3(checkoutId: $checkoutId, payment: $payment) {
    checkout {
    id
    }
    payment {
    id
    errorMessage
    transaction {
    statusV2
    kind
    amountV2 {
    amount
    }
    }
    }
    checkoutUserErrors {
    message
    code
    }
    }
    }

    # Variables
    {
    "checkoutId": $CheckoutID,
    "payment": {
    "billingAddress": {
    # Billing address information
    },
    "idempotencyKey":"123",
    "paymentAmount":{
    "amount": $TotalAmount,
    "currencyCode": $StoreCurrency
    },
    "paymentData": $StripeToken,
    "type":"SHOPIFY_PAY"
    }
    }

 

The problem is that after sending the last query, the order is not created and the checkout is listed as an "abandoned checkout" in the Shopify Admin Console, no warnings/errors are shown in the order details. The Storefront API responds with the following information:

 

{
   "checkoutCompleteWithTokenizedPaymentV3":{
      "checkout":{
       "id": $CheckoutID
      },
      "checkoutUserErrors":[

      ],
      "payment":{
         "errorMessage":null,
         "id": $PaymentID,
         "transaction":null
      }
   }
}

 

Unfortunately, this was the last step I needed in order to finish the project. But I cannot find enough information in the documentation to find a way to fix this issue. Any help would be greatly appreciated.

 

Greetings!

 

PS: I'm sorry if I am using the wrong terminology and/or do not follow "standard" Shopify developer practices. I am an embedded developer and work mostly with C/C++, I've just started developing with Shopify because of a project that I needed to accept (thanks to COVID-19 and its economical repercussions).

Replies 6 (6)

AndreBastos
Excursionist
15 0 23

@alex-spataru did you find the answer to this?

 

I have this exact same problem. What are we doing wrong?

Is it possible to create an order through the Storefront API or not?

Nataliek
Shopify Partner
1 0 3

Same issue...

ilivestrong
Tourist
4 0 5

I am too sailing in the same boat.

We have requested for a Shopify Sandbox access though.

Does anyone here knows if the said access will help resolve this issue?

Any inputs would be highly appreciated.

 

Cheers!

Deep

alanraso
Excursionist
12 0 4

Same problem here, could anyone find out why the checkout is not generating a order?

nuhmansh
Shopify Partner
4 0 1

@alex-spataru did you find the answer to this?. I'm having same issue here...

Expecting reply from authorised team also ... 

My store has only development subscription, Is that the reason for issue?..

pubron
Excursionist
18 0 4

@alex-spataru @nuhmansh 

We are facing the same problem. Have you been able to resolve this?
I think that the app must be made a sales channel to complete the checkout and the order is not created.
https://shopify.dev/api/examples/checkout#requirements