Я получаю ответ 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
Так в чем же может быть разница, если я отправлю его как тест и когда получу его из платежного сервиса?
Или что я пропустил?
Любой вклад действительно приветствуется!