Не можете прочитать ответ POST JSON в asp classic, когда живете, но работает в тесте? - PullRequest
0 голосов
/ 29 мая 2019

Я получаю ответ POST от платежной службы, от веб-крюка с данными JSON, отправляемого на страницу .asp, где я использую aspJson.asp, чтобы прочитать полученный JSON.

Я использую почтовый сервис онлайн для проверки отправки действительного JSON на мою страницу https://reqbin.com, и когда я получаю, я получаю 200 OK response, и я могу прочитать файл JSON, получить его значения и вставить его в моя база данных, как я должен.

Но если я сделаю реальный платеж, я вижу, что платежный сервис отправляет сообщение POST на мою страницу, поскольку я могу сделать простую вставку в свою базу данных. Но когда я пытаюсь прочитать JSON, который они отправляют, я не могу получить значения JSON?

Так что я не знаю, что мне не хватает? Предполагается, что JSON, с которым я тестирую, имеет ту же структуру, что и реальная, поэтому он должен работать так же.

JSON, с которым я тестирую, работает, если я отправлю его с https://reqbin.com, выглядит так.

{
    "Id": "12",
    "MerchantId": "11111",
    "Timestamp": "",
    "Event": "payment.checkout.completed",
    "Data": {
        "order": {
            "amount": {
                "amount": "2222",
                "currency": "SEK"
            },
            "reference": "161978963",
            "orderItems": [{
                "grossTotalAmount": "30000",
                "name": "Lampa",
                "netTotalAmount": "10000",
                "quantity": 1,
                "reference": "1-123",
                "taxRate": 2500,
                "taxAmount": "2500",
                "unit": "111",
                "unitPrice": 0
            }]
        },
        "consumer": {
            "firstName": "Claes",
            "lastName": "Gustavsson",
            "country": "NOR",
            "email": "info@xxx.se",
            "ip": "xx.xxx.xx.xx",
            "phoneNumber": {
                "prefix": "+47",
                "number": "12345678"
            },
            "shippingAddress": {
                "addressLine1": "Norrgatan1",
                "addressLine2": "",
                "city": "Varberg",
                "country": "",
                "postcode": "43200",
                "receiverLine": ""
            }
        },
        "paymentId": "12345678"
    }
}

Я получаю JSON с этим.

Response.ContentType = "application/json"

Function BytesToStr(bytes)
    Dim Stream
    Set Stream = Server.CreateObject("Adodb.Stream")
        Stream.Type = 1 'adTypeBinary
        Stream.Open
        Stream.Write bytes
        Stream.Position = 0
        Stream.Type = 2 'adTypeText
        Stream.Charset = "utf-8"
        BytesToStr = Stream.ReadText
        Stream.Close
    Set Stream = Nothing
End Function

if Request.TotalBytes > 0 then

    Dim postBody
    postBody = BytesToStr(Request.BinaryRead(Request.TotalBytes))

    Response.Write(postBody) ' the JSON data 

end if

И чтобы получить значения JSON, я использую это, и это работает, если я просто проверяю его, но оно не получает значение события, если я делаю правильный платеж?

jsonstring = Cstr(postBody)
Set oJSON = New aspJSON
oJSON.loadJSON(jsonstring)

theevent=oJSON.data("Event")
response.write "this is the event"&theevent

Так в чем же может быть разница, если я отправлю его как тест и когда получу его из платежного сервиса? Или что я пропустил?

Любой вклад действительно приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...