如何使用C#使用包含标头和正文的JSON API? [英] How can I consume a JSON API with both header and body using C#
问题描述
亲爱的团队,
请帮助我。我想使用一个既需要使用C#又需要使用C#的API,而我所有努力实现这一点已被证明是无效的。下面是在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 narration =Regular Payment;
var amount =5000;
var beneficiaryEmail =qa@test.com;
var AES_128_ENCRYPT = function(rawData)
{
var key =cymsrniuxqtgfzva;
var iv =czidrfwqugpaxvkj;
key = CryptoJS.enc。 Utf8.parse(key);
iv = CryptoJS.enc.U tf8.parse(iv);
var encryptData = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(rawData),key,
{
keySize:128/8,
iv:iv,
模式:CryptoJS.mode.CBC,
填充:CryptoJS。 pad.Pkcs7
});
返回encryptData;
}
creditAccount = AES_128_ENCRYPT(creditAccount);
var d = new Date();
var requestId = d.getTime();
var randomnumber = Math.floor(Math.random()* 1101233)
var transRef = randomnumber;
var apiHash = CryptoJS.SHA512(apiKey + requestId + apiToken);
toBank = AES_128_ENCRYPT(toBank);
旁白= AES_128_ENCRYPT(旁白);
金额= AES_128_ENCRYPT(金额);
transRef = AES_128_ENCRYPT(transRef);
fromBank = AES_128_ENCRYPT(fromBank);
debitAccoun t = AES_128_ENCRYPT(debitAccount);
beneficiaryEmail = AES_128_ENCRYPT(beneficiaryEmail);
var dd = d.getDate();
var mm = d.getMonth()+ 1; //一月是0!
var yyyy = d.getFullYear();
if(dd< 10){
dd ='0 '+ dd;
}
if(mm< 10){
mm ='0'+ mm;
}
var hours = d.getUTCHours();
var minutes = d.getUTCMinutes();
var seconds = d。 getUTCSeconds();
var timeStamp = yyyy +' - '+ mm +' - '+ dd +'T'+小时+':'+分钟+':'+秒+'+ 000000';
postman.setGlobalVariable('merchantId',merchantId);
postman.setGlobalVariable('apiKey',apiKey);
postman.setGlobalVariable('requestId', requestId);
postman.setGlobalVariable('apiHash',apiHash);
postman.setGlobalVariable('timeStamp',timeStamp);
postman .setGlobalVariable('toBank',toBank);
postman.setGlobalVariable('creditAccount',creditAccount);
postman.setGlobalVariable('narration',narration);
postman.setGlobalVariable('am $',金额);
postman.setGlobalVariable('transRef',transRef);
postman.setGlobalVariable('fromBank',fromBank);
postman.setGlobalVariable('debitAccount',debitAccount);
postman.setGlobalVariable('beneficiaryEmail',beneficiaryEmail);
//pm.variables.get(\"variable_key );
我的尝试:
// = ===========我的代码打电话给第三方转账====================
试试< br $>
{
var apiToken =dWFBTVVGTGZRUEZaemRvVC8wYVNuRkVTc2REVi9GWGdCMHRvWHNXTnovaz0 =;
var apiKey =S1VESTEyMzR8S1VESQ ==;
var requestId = objacc.Transid.ToString();
double getFullYear = Convert.ToDouble(System.DateTime.Now.Year.ToString());
double getMonth = Convert .ToDouble(System.DateTime.Now.Month.ToString());
double getDate = Convert.ToDouble(System.DateTime.Now.Day.ToString());
double getUTCHours = Convert.ToDouble(System.DateTime.Now.Hour.ToString()) ;
double getUTCMinutes = Convert.ToDouble(System.DateTime.Now.Minute.ToString());
double getUTCSeconds = Convert.ToDouble(System.DateTime.Now。 Second.ToString());
var dd = getDate;
var mm = getMonth + 1; //一月是0!
var yyyy = getFullYear;
if(dd< 10)
{
dd ='0'+ dd;
}
if(mm< 10)
{
mm ='0'+ mm;
}
var hours = getUTCHours;
var minutes = getUTCMinutes ;
var seconds = getUTCSeconds;
var timeStamp = yyyy + - + mm + - + dd +T+小时+:+分钟+:+秒++000000;
var apiHash = GenerateSHA512String(apiKey + requestId + apiToken);
// var apiHash = CryptoJS.SHA512(apiKey + requestId + apiToken);
double n4 = Convert.ToDouble(timeStamp);
double randomnumber = Math.Floor( (n4)* 1101233);
// var randomnumber = Math.floor(Math.random()* 1101233);
var transRef1 = randomnumber;
double toBank1 = 058;
double fromBank1 = 044;
double debitAccount1 = 1234565678;
double creditAccount1 = 0582915208017;
string narration1 =Regular Payment;
double amount1 = 5000;
string beneficiaryEmail1 =qa @ test .com;
double toBank = Convert.ToDouble(toBank1);
string narration =(narration1);
double amount = Convert.ToDouble(amount1);
double transRef = Convert.ToDouble(transRef1);
double fromBank = Convert.ToDouble(fromBank1);
double debitAccount = Conver t.ToDouble(debitAccount1);
string beneficiaryEmail =(beneficiaryEmail1);
double creditAccount = Convert.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.Method =POST;
使用(var streamWriter = new
StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = new JavaScriptSerializer()。Serialize(new
{
MERCHANT_ID =KUDI1234,
API_KEY =S1VESTEyMzR8S1VESQ ==,
REQUEST_ID = objacc.Transid.ToString(),
REQUEST_TS = timeStamp,
API_DETAILS_HASH = apiHash < br $> b $ b
});
{
toBank = Convert.ToDouble(objacc.phone.ToString());
creditAccount = Convert.ToDouble(objacc.phone.ToString());
叙述= objacc.phone.ToString();
金额= Convert.ToDouble(objacc.phone.ToString());
transRef = Convert.ToDouble(objacc.phone.ToString());
fromBank = Convert.ToDouble (objacc.phone.ToString());
debitAccount = Convert.ToDouble(obja cc.phone.ToString());
beneficiaryEmail = objacc.phone.ToString();
}
streamWriter.Write(json);
}
var httpResponse =(HttpWebResponse)httpWebRequest.GetResponse();
using(var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
Dear Team,
Please assist me. I want to consume an API that require both header and Body using C# and all my effort to achieve this has prove abortive. Below is the Pre-request SCRIPT when loaded on POSTMAN and same can be imported into postman collection via the link - https://www.getpostman.com/collections/ce99da192f80e44fb476.
I will appreciate any assistance that can be render to achieve this.
var merchantId ="KUDI1234";
var apiKey ="S1VESTEyMzR8S1VESQ==";
var apiToken ="dWFBTVVGTGZRUEZaemRvVC8wYVNuRkVTc2REVi9GWGdCMHRvWHNXTnovaz0=";
var fromBank= "044";
var debitAccount = "1234565678";
var toBank = "058";
var creditAccount = "0582915208017";
var narration = "Regular Payment";
var amount = "5000";
var beneficiaryEmail = "qa@test.com";
var AES_128_ENCRYPT = function(rawData)
{
var key = "cymsrniuxqtgfzva";
var iv = "czidrfwqugpaxvkj";
key = CryptoJS.enc.Utf8.parse(key);
iv = CryptoJS.enc.Utf8.parse(iv);
var encryptData = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(rawData), key,
{
keySize: 128 / 8,
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encryptData;
}
creditAccount = AES_128_ENCRYPT(creditAccount);
var d = new Date();
var requestId = d.getTime();
var randomnumber=Math.floor(Math.random()*1101233)
var transRef = randomnumber;
var apiHash = CryptoJS.SHA512(apiKey + requestId + apiToken);
toBank = AES_128_ENCRYPT(toBank);
narration = AES_128_ENCRYPT(narration);
amount = AES_128_ENCRYPT(amount);
transRef = AES_128_ENCRYPT(transRef);
fromBank= AES_128_ENCRYPT(fromBank);
debitAccount = AES_128_ENCRYPT(debitAccount);
beneficiaryEmail = AES_128_ENCRYPT(beneficiaryEmail);
var dd = d.getDate();
var mm = d.getMonth()+1; //January is 0!
var yyyy = d.getFullYear();
if(dd<10){
dd='0'+dd;
}
if(mm<10){
mm='0'+mm;
}
var hours = d.getUTCHours();
var minutes = d.getUTCMinutes();
var seconds = d.getUTCSeconds();
var timeStamp = yyyy+'-'+mm+'-'+dd+'T'+hours+':'+minutes+':'+seconds+'+000000';
postman.setGlobalVariable('merchantId', merchantId);
postman.setGlobalVariable('apiKey', apiKey);
postman.setGlobalVariable('requestId', requestId);
postman.setGlobalVariable('apiHash', apiHash);
postman.setGlobalVariable('timeStamp', timeStamp);
postman.setGlobalVariable('toBank', toBank);
postman.setGlobalVariable('creditAccount', creditAccount);
postman.setGlobalVariable('narration', narration);
postman.setGlobalVariable('amount', amount);
postman.setGlobalVariable('transRef', transRef);
postman.setGlobalVariable('fromBank', fromBank);
postman.setGlobalVariable('debitAccount', debitAccount);
postman.setGlobalVariable('beneficiaryEmail', beneficiaryEmail);
//pm.variables.get("variable_key");
What I have tried:
//============my code to call third party for fund transfer====================
try
{
var apiToken = "dWFBTVVGTGZRUEZaemRvVC8wYVNuRkVTc2REVi9GWGdCMHRvWHNXTnovaz0=";
var apiKey = "S1VESTEyMzR8S1VESQ==";
var requestId = objacc.Transid.ToString();
double getFullYear = Convert.ToDouble(System.DateTime.Now.Year.ToString());
double getMonth = Convert.ToDouble(System.DateTime.Now.Month.ToString());
double getDate = Convert.ToDouble(System.DateTime.Now.Day.ToString());
double getUTCHours = Convert.ToDouble(System.DateTime.Now.Hour.ToString());
double getUTCMinutes = Convert.ToDouble(System.DateTime.Now.Minute.ToString());
double getUTCSeconds = Convert.ToDouble(System.DateTime.Now.Second.ToString());
var dd = getDate;
var mm = getMonth + 1; //January is 0!
var yyyy = getFullYear;
if (dd < 10)
{
dd = '0' + dd;
}
if (mm < 10)
{
mm = '0' + mm;
}
var hours = getUTCHours;
var minutes = getUTCMinutes;
var seconds = getUTCSeconds;
var timeStamp = yyyy + "-" + mm + "-" + dd + "T" + hours + ":" + minutes + ":" + seconds + "+000000";
var apiHash = GenerateSHA512String(apiKey + requestId + apiToken);
// var apiHash = CryptoJS.SHA512(apiKey + requestId + apiToken);
double n4 = Convert.ToDouble(timeStamp);
double randomnumber = Math.Floor((n4) * 1101233);
// var randomnumber = Math.floor(Math.random() * 1101233);
var transRef1 = randomnumber;
double toBank1 = 058;
double fromBank1 = 044;
double debitAccount1 = 1234565678;
double creditAccount1 = 0582915208017;
string narration1 = "Regular Payment";
double amount1 = 5000;
string beneficiaryEmail1 = "qa@test.com";
double toBank = Convert.ToDouble(toBank1);
string narration = (narration1);
double amount = Convert.ToDouble(amount1);
double transRef = Convert.ToDouble(transRef1);
double fromBank = Convert.ToDouble(fromBank1);
double debitAccount = Convert.ToDouble(debitAccount1);
string beneficiaryEmail = (beneficiaryEmail1);
double creditAccount = Convert.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.Method = "POST";
using (var streamWriter = new
StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = new JavaScriptSerializer().Serialize(new
{
MERCHANT_ID = "KUDI1234",
API_KEY = "S1VESTEyMzR8S1VESQ==",
REQUEST_ID = objacc.Transid.ToString(),
REQUEST_TS = timeStamp,
API_DETAILS_HASH = apiHash
});
{
toBank = Convert.ToDouble(objacc.phone.ToString());
creditAccount = Convert.ToDouble(objacc.phone.ToString());
narration = objacc.phone.ToString();
amount = Convert.ToDouble(objacc.phone.ToString());
transRef = Convert.ToDouble(objacc.phone.ToString());
fromBank = Convert.ToDouble(objacc.phone.ToString());
debitAccount = Convert.ToDouble(objacc.phone.ToString());
beneficiaryEmail = objacc.phone.ToString();
}
streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
textboxError.Text = result;
textboxError.Visible = true;
}
}
}
catch (Exception ex)
{
this.textboxError.Text = ex.Message;
textboxError.Visible = true;
}
}
}
推荐答案
我发现任何人都无法帮助你没有错误或反应检查。
我在某些时候看到,你甚至对设置属性有点厌倦:
I see nothing that anyone can help you with since you do no error or response checking.
I see at some point, you even got a little "tired" of setting properties:
toBank = Convert.ToDouble(objacc.phone.ToString());
creditAccount = Convert.ToDouble(objacc.phone.ToString());
narration = objacc.phone.ToString();
amount = Convert.ToDouble(objacc.phone.ToString());
transRef = Convert.ToDouble(objacc.phone.ToString());
fromBank = Convert.ToDouble(objacc.phone.ToString());
debitAccount = Convert.ToDouble(objacc.phone.ToString());
beneficiaryEmail = objacc.phone.ToString();
我真的不认为你的心在这。
I really don't think your heart is in this.
这篇关于如何使用C#使用包含标头和正文的JSON API?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!