Как я могу использовать JSON API как с заголовком, так и с телом, используя C#
Уважаемая Команда,
Пожалуйста, помогите мне. Я хочу использовать API, который требует как заголовка, так и тела, используя C#, и все мои усилия по достижению этого оказались безуспешными. Ниже приведен сценарий предварительного запроса при загрузке на POSTMAN, и он же может быть импортирован в коллекцию postman по ссылке- https://www.getpostman.com/collections/ce99da192f80e44fb476.
Я буду признателен за любую помощь, которая может быть оказана для достижения этой цели.
var merchantId ="KUDI1234";
var apiKey ="S1VESTEyMzR8S1VESQ==";
var apiToken ="dWFBTVVGTGZRUEZaemRvVC8wYVNuRkVTc2revi9gwgdcmhrvwhnxtnovaz0=";
var fromBank= "044";
var debitAccount = "1234565678";
var toBank = "058";
var creditAccount = "0582915208017";
ВАР повествование = "регулярный платеж";
сумма var = "5000";
ВАР beneficiaryEmail = "qa@test.com";
var AES_128_ENCRYPT = функция(rawData)
{
var key = "cymsrniuxqtgfzva";
ВАР Ив = "czidrfwqugpaxvkj";
ключ = CryptoJS.enc.Utf8.parse(ключ);
Ив = CryptoJS.прил.Кодировке utf8.синтаксический анализ(ИЖ);
var encryptData = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(rawData), ключ,
{
размер ключа: 128 / 8,
iv: iv,
режим: CryptoJS.mode.КЛИНИЧЕСКИЙ АНАЛИЗ КРОВИ,
заполнение: CryptoJS.pad.Pkcs7
});
возврат encryptData;
}
creditAccount = AES_128_ENCRYPT(creditAccount);
ВАР д = новая дата();
ВАР ордера = д.методов gettime();
ВАР датчика случайных чисел=математика.пол(мат.случайный()*1101233)
ВАР трансреф = датчика случайных чисел;
var apiHash = CryptoJS.SHA512(apiKey + requestId + apiToken);
toBank = AES_128_ENCRYPT(toBank);
повествование = AES_128_ENCRYPT(повествование);
сумма = AES_128_ENCRYPT(сумма);
трансреф = AES_128_ENCRYPT(трансреф);
fromBank= AES_128_ENCRYPT(fromBank);
debitAccount = AES_128_ENCRYPT(debitAccount);
beneficiaryEmail = AES_128_ENCRYPT(beneficiaryEmail);
ВАР ДД = д.функции getdate();
var mm = d.getMonth()+1; //январь равен 0!
ВАР гггг = д.getFullYear();
если(dd<10){
dd='0'+dd;
}
если(мм<10){
мм='0'+мм;
}
ВАР часов = D.getUTCHours();
ВАР минут = D.getUTCMinutes();
var seconds = d.getUTCSeconds();
var timeStamp = гггг+'-'+ММ+'-'+ДД+'Т'+часы+':'+минуты+':'+секунды+'+000000';
postman.setGlobalVariable('merchantId', merchantId);
postman.setGlobalVariable('apiKey', apiKey);
почтальон.setGlobalVariable('ордера', ордера);
postman.setGlobalVariable('apiHash', apiHash);
postman.setGlobalVariable('timeStamp', отметка времени);
postman.setGlobalVariable('toBank', toBank);
postman.setGlobalVariable('creditAccount', creditAccount);
postman.setGlobalVariable('повествование', повествование);
postman.setGlobalVariable('сумма', сумма);
почтальон.setGlobalVariable('трансреф', трансреф);
postman.setGlobalVariable('fromBank', фромбанк);
postman.setGlobalVariable('debitAccount', debitAccount);
postman.setGlobalVariable('beneficiaryEmail', beneficiaryEmail);
//pm.variables.get("variable_key");
Что я уже пробовал:
//============мой код для вызова третьей стороны для перевода средств====================
пробовать
{
var apiToken = "dWFBTVVGTGZRUEZaemRvVC8wYVNuRkVTc2revi9gwgdcmhrvwhnxtnovaz0=";
var apiKey = "S1VESTEyMzR8S1VESQ==";
ВАР ордера = objacc.Трансид.Метод toString();
double getFullYear = конвертировать.ToDouble(Система.Датавремя.Сейчас.Год.Метод toString());
double getMonth = конвертировать.ToDouble(Система.Датавремя.Сейчас.Месяц.Метод toString());
double getDate = конвертировать.ToDouble(Система.Датавремя.Сейчас.День.Метод toString());
double getUTCHours = конвертировать.ToDouble(Система.Датавремя.Сейчас.Час.Метод toString());
double getUTCMinutes = конвертировать.ToDouble(Система.Датавремя.Сейчас.С минуты на минуту.Метод toString());
double getUTCSeconds = конвертировать.ToDouble(Система.Датавремя.Сейчас.Во-вторых.Метод toString());
ВАР ДД = функции getdate;
var mm = getMonth + 1; //январь равен 0!
var yyyy = getFullYear;
если (dd < 10)
{
dd = '0' + dd;
}
если (мм < 10)
{
мм = '0' + мм;
}
var hours = getUTCHours;
var minutes = getUTCMinutes;
var seconds = getUTCSeconds;
var timeStamp = гггг + "-" + ММ + "-" + ДД + "Т" + часы + ":" + минуты + ":" + секунды + "+000000";
var apiHash = GenerateSHA512String(apiKey + requestId + apiToken);
// var apiHash = CryptoJS.SHA512(apiKey + requestId + apiToken);
double n4 = конвертировать.ToDouble(метка времени);
двойное случайное число = математика.Этаж((n4) * 1101233);
// var randomnumber = Math.floor(Math.random() * 1101233);
var transRef1 = случайное число;
двойной тобанк1 = 058;
двойной фромбанк 1 = 044;
debitAccount1 двойной = 1234565678;
двойной кредитный счет1 = 0582915208017;
строка повествования1 = "регулярный платеж";
двойная сумма 1 = 5000;
строка beneficiaryEmail1 = "qa@test.com";
двойной тобанк = конвертация.Метод todouble(toBank1);
строка повествования = (повествование1);
двойная сумма = конвертация.ToDouble(сумма 1);
double transRef = конвертировать.Метод todouble(transRef1);
двойной фромбанк = конвертация.Метод todouble(fromBank1);
двойной дебетовый счет = конвертация.Метод todouble(debitAccount1);
строка beneficiaryEmail = (beneficiaryEmail1);
двойной кредитный счет = конвертация.Метод todouble(creditAccount1);
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://remitademo.net/remita/exapp/api/v1/send/api/rpgsvc/rpg/api/v2/merc/payment/singlePayment.json");
класс HttpWebRequest.ContentType = "application/json";
класс HttpWebRequest.Метод = "сообщение";
используя (ВАР модулю записи StreamWriter = новый
Модулю записи StreamWriter(класса HttpWebRequest.Метод getrequeststream()))
{
string json = new JavaScriptSerializer().Serialize(new
{
MERCHANT_ID = "KUDI1234",
API_KEY = "S1VESTEyMzR8S1VESQ==",
REQUEST_ID = objacc.Трансид.Метод toString(),
REQUEST_TS = метка времени,
API_DETAILS_HASH = apiHash
});
{
toBank = конвертировать.Метод todouble(objacc.телефоне.Метод toString());
creditAccount = конвертировать.Метод todouble(objacc.телефоне.Метод toString());
повествование = objacc.phone.Метод toString();
сумма = конвертация.Метод todouble(objacc.телефоне.Метод toString());
transRef = преобразовать.Метод todouble(objacc.телефоне.Метод toString());
fromBank = конвертировать.Метод todouble(objacc.телефоне.Метод toString());
debitAccount = конвертировать.Метод todouble(objacc.телефоне.Метод toString());
beneficiaryEmail = objacc.phone.Метод toString();
}
модулю записи StreamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
используя (вар что streamreader = новый поток streamreader(объект HttpResponse.GetResponseStream()))
{
ВАР результат = что streamreader.ReadToEnd();
textboxError.Text = result; textboxError.Visible = true; } } } catch (Exception ex) { this.textboxError.Text = ex.Message; textboxError.Visible = true; } } }
Richard MacCutchan
Почему вы используете двойные типы для целочисленных значений?
Member 12939914
int использует до 4 байт памяти (и он не может содержать десятичную дробь), double использует 8 байт памяти. Просто разные инструменты для разных целей. int-это двоичное представление целого числа, double-число с плавающей запятой двойной точности
Richard MacCutchan
Это не имеет значения. Вы все еще используете двойники для значений, которые всегда будут целыми. Вы преобразуете части даты (год, месяц, день) в двойники, когда они никогда не будут ничем иным, как целыми числами. Затем вы строите строку из этих чисел и пытаетесь преобразовать ее в двойное значение.
Richard MacCutchan
Используя ту часть вашего кода, которая обрабатывает значения дат, я получаю следующее:
dd: 13 mm: 4 dd: 13 mm: 52 timeStamp: 2019-52-13T14:48:55+000000 Input string was not in a correct format.
Member 12939914
Дорогой Ричард, Спасибо за ваше время и отзыв.
Я стараюсь изо всех сил, но все усилия оказываются безуспешными.
Я постоянно получаю одно и то же сообщение об ошибке "входная строка была не в правильном формате".
Можете ли вы помочь в любом случае.
Спасибо.
Richard MacCutchan
Во-первых: прекратите использовать двойные значения, они не служат никакой цели и, вероятно, приведут к неверным результатам. Используйте целые числа для всего, даже для валютных значений. Если вам нужен лучший класс для валюты, то используйте десятичный тип.
Во-вторых: не складывайте символы и цифры вместе ('0' и 3) и не ждите осмысленного результата.
В-третьих: не пытайтесь преобразовать строку datetime, как описано выше, в число, это не сработает и не имеет смысла.
В-четвертых, не преобразуйте числовые значения в строки только для того, чтобы преобразовать их обратно в числа.
Наконец, вам нужно объяснить, что весь этот код должен создавать. Сейчас я не могу понять, что он пытается сделать.
Member 12939914
Спасибо за информацию, Ричард.
Я пытаюсь использовать API с ниже заголовков, текста и предварительного сценария от почтальона.
ЗАГОЛОВКИ
Content-Type application/json
MERCHANT_ID {{merchantId}}
API_KEY {{apiKey}}
ИДЕНТИФИКАТОР_ЗАПРОСА {{ордера}}
REQUEST_TS {{отметка времени}}
API_DETAILS_HASH {{apiHash}}
ТЕЛО
{
"тобанк":"{{тобанк}}",
"creditAccount":"{{creditAccount}}",
"повествование":"{{повествование}}",
"сумма":"{{сумма}}",
"трансреф":"{{трансреф}}",
"фромбанк":"{{фромбанк}}",
"debitAccount":"{{debitAccount}}",
"beneficiaryEmail":"{{beneficiaryEmail}}"
}
СЦЕНАРИЙ ПРЕДВАРИТЕЛЬНОГО ЗАПРОСА
var merchantId ="KUDI1234";
var apiKey ="S1VESTEyMzR8S1VESQ==";
var apiToken ="dWFBTVVGTGZRUEZaemRvVC8wYVNuRkVTc2revi9gwgdcmhrvwhnxtnovaz0=";
var fromBank= "044";
var debitAccount = "1234565678";
var toBank = "058";
var creditAccount = "0582915208017";
ВАР повествование = "регулярный платеж";
сумма var = "5000";
ВАР beneficiaryEmail = "qa@test.com";
var AES_128_ENCRYPT = функция(rawData)
{
var key = "cymsrniuxqtgfzva";
ВАР Ив = "czidrfwqugpaxvkj";
ключ = CryptoJS.enc.Utf8.parse(ключ);
Ив = CryptoJS.прил.Кодировке utf8.синтаксический анализ(ИЖ);
var encryptData = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(rawData), ключ,
{
размер ключа: 128 / 8,
iv: iv,
режим: CryptoJS.mode.КЛИНИЧЕСКИЙ АНАЛИЗ КРОВИ,
заполнение: CryptoJS.pad.Pkcs7
});
возврат encryptData;
}
creditAccount = AES_128_ENCRYPT(creditAccount);
ВАР д = новая дата();
ВАР ордера = д.методов gettime();
ВАР датчика случайных чисел=математика.пол(мат.случайный()*1101233)
ВАР трансреф = датчика случайных чисел;
var apiHash = CryptoJS.SHA512(apiKey + requestId + apiToken);
toBank = AES_128_ENCRYPT(toBank);
повествование = AES_128_ENCRYPT(повествование);
сумма = AES_128_ENCRYPT(сумма);
трансреф = AES_128_ENCRYPT(трансреф);
fromBank= AES_128_ENCRYPT(fromBank);
debitAccount = AES_128_ENCRYPT(debitAccount);
beneficiaryEmail = AES_128_ENCRYPT(beneficiaryEmail);
ВАР ДД = д.функции getdate();
var mm = d.getMonth()+1; //январь равен 0!
ВАР гггг = д.getFullYear();
если(dd<10){
dd='0'+dd;
}
если(мм<10){
мм='0'+мм;
}
ВАР часов = D.getUTCHours();
ВАР минут = D.getUTCMinutes();
var seconds = d.getUTCSeconds();
var timeStamp = гггг+'-'+ММ+'-'+ДД+'Т'+часы+':'+минуты+':'+секунды+'+000000';
postman.setGlobalVariable('merchantId', merchantId);
postman.setGlobalVariable('apiKey', apiKey);
почтальон.setGlobalVariable('ордера', ордера);
postman.setGlobalVariable('apiHash', apiHash);
postman.setGlobalVariable('timeStamp', отметка времени);
postman.setGlobalVariable('toBank', toBank);
postman.setGlobalVariable('creditAccount', creditAccount);
postman.setGlobalVariable('повествование', повествование);
postman.setGlobalVariable('сумма', сумма);
почтальон.setGlobalVariable('трансреф', трансреф);
postman.setGlobalVariable('fromBank', фромбанк);
postman.setGlobalVariable('debitAccount', debitAccount);
postman.setGlobalVariable('beneficiaryEmail', beneficiaryEmail);
//pm.variables.get("variable_key");
Richard MacCutchan
Вы все еще не объяснили, в чем ваша проблема. Пожалуйста, отредактируйте свой вопрос, поместите теги <pre> вокруг вашего кода и пожалуйста расскажите нам подробно, в чем проблема.