Получение 422 Ошибка кода состояния при отправке на квадрат?

Пожалуйста, помогите мне закончить этот последний шаг, чтобы я мог сделать с этим проектом:)

Я пытаюсь преобразовать этот пример в Vb.Net:

https://docs.connect.squareup.com/articles/processing-payment-rest/

Я могу успешно получить идентификатор CardOnce после того, как пользователь введет данные кредитной карты. Я могу успешно выполнить ЧТЕНИЕ с Площади, чтобы получить идентификатор моего местоположения. Тем не менее, я застрял на последнем шаге, когда я предоставляю CardOnce ID, Location ID и сумму POST, я получаю сообщение об ошибке: "Удаленный сервер возвратил ошибку: (422) код состояния 422."

Мой код указан ниже и происходит ошибка:

Ошибка происходит, когда это называется:

response = DirectCast(request.GetResponse(), HttpWebResponse)

Полный код здесь:

Public Function IsSuccessProcess(ByVal sLocationId As String, ByVal sCardOnce As String, ByVal iAmount As Integer)
    Dim request As HttpWebRequest
    Dim response As HttpWebResponse = Nothing
    Dim reader As StreamReader
    Dim address As Uri
    Dim data As StringBuilder
    Dim byteData() As Byte
    Dim postStream As Stream = Nothing

    address = New Uri("https://connect.squareup.com/v2/locations/" & sLocationId & "/transactions")

    ' Create the web request  
    request = DirectCast(WebRequest.Create(address), HttpWebRequest)

    ' Set type to POST  
    request.Method = "POST"
    request.ContentType = "application/json"
    request.Accept = "application/json"
    request.Headers.Add("Authorization", "Bearer " & AccessToken)

    data = New StringBuilder()
    Dim sQuote As String = """"
    sQuote = "'"
    data.Append("{" & sQuote & "card_nonce" & sQuote & ": " & sCardOnce & "," & sQuote & "amount_money" & sQuote & ": {" & sQuote & "amount" & sQuote & ": " & iAmount & "," & sQuote & "currency" & sQuote & ": " & sQuote & "USD" & sQuote & "}")

    Dim didempotency_key As Double = Microsoft.VisualBasic.Timer
    Dim idempotency_key As Integer = CInt(didempotency_key)
    data.Append("'idempotency_key': " & idempotency_key)
    ' Create a byte array of the data we want to send  
    byteData = UTF8Encoding.UTF8.GetBytes(data.ToString())
    ' Set the content length in the request headers  
    request.ContentLength = byteData.Length

    ' Write data  
    Try
        postStream = request.GetRequestStream()
        postStream.Write(byteData, 0, byteData.Length)
    Finally
        If Not postStream Is Nothing Then postStream.Close()
    End Try

    Try
        ' Get response  
        response = DirectCast(request.GetResponse(), HttpWebResponse)

        ' Get the response stream into a reader  
        reader = New StreamReader(response.GetResponseStream())

        ' Console application output  
        Console.WriteLine(reader.ReadToEnd())
    Finally
        If Not response Is Nothing Then response.Close()
    End Try


    Return True

End Function

2 ответа

Решение

Я продолжал играть со строкой JSON и, наконец, получил выигрышную комбинацию. Я не использовал "amount_money" правильно. Кроме того, SDK говорит, что вы ДОЛЖНЫ использовать idempotency_key, который я не использовал во время некоторых испытаний. Наконец, вы ДОЛЖНЫ использовать реальные кавычки, а не один апостроф:

Dim sKey As String = Guid.NewGuid().ToString()
Dim sMyJsonString As String
sMyJsonString = "{" & sQuote & "card_nonce" & sQuote & ":" & sQuote & sCardOnce & sQuote & "," & sQuote & "amount_money" & sQuote & ": {" & sQuote & "amount" & sQuote & ": " & iAmount & "," & sQuote & "currency" & sQuote & ": " & sQuote & "USD" & sQuote & "}," & sQuote & "idempotency_key" & sQuote & ":" & sQuote & sKey & sQuote & "}"
data.Append(sMyJsonString)

Я, наконец, взял с меня 1 доллар, который появился в моем аккаунте Square. Это заняло гораздо больше времени, чем я рассчитывал, но все хорошо, что хорошо кончается.

Эта ошибка, вероятно, происходит, потому что вы используете одинарные кавычки в вашем теле JSON вместо двойных кавычек. Попробуйте заменить их в качестве первого шага.

Обратите внимание, что вам может быть проще создавать и анализировать объекты JSON с помощью сторонней библиотеки, такой как Json.NET.

Наконец, как упоминал Трой, полезные сообщения об ошибках возвращаются в тела ответов конечных точек, что должно помочь вам диагностировать будущие проблемы. Смотрите эту статью для получения дополнительной информации.

Другие вопросы по тегам