2017-02-08 2 views
-1

Я пытаюсь интегрировать платежную платформу в свое веб-приложение, но одно из требований к запросу транзакции - отправить хешированное значение (определенных переменных) в виде заголовка с использованием запроса на получение. Это то, что я пробовал:Как отправить значение хэша в качестве заголовка с помощью HttpClient?

string hashcode = "3409877" + "117" + "D3D1D05AFE42AD508"; 
var hashedBytes = SHA512.Create().ComputeHash(Encoding.UTF8.GetBytes(hashcode)); 
// Get the hashed string. 
var hash = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower(); 
hash = hash.ToString().ToUpper(); 
var amount_kobo = Convert.ToInt32(model.TransactionAmount * 100); 
string url = "https://sandbox.interswitchng.com/collections/api/v1/gettransaction.json?productid=117&transactionreference=" + model.TransactionReference + "&amount=" + amount_kobo; 

using (var client = new HttpClient()) 
{ 

#if DNX451 
    // ignore server certificate error 
    //ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => { return true; }; 
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; 
#elif DNXCORE50 
    // no implementation for the target DNX 
#endif 
    client.BaseAddress = new Uri(url); 
    client.DefaultRequestHeaders.Accept.Clear(); 


client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/html")); 
    client.DefaultRequestHeaders.Add("Hash",hash); 


    HttpResponseMessage response = await client.GetAsync(url); 
    string responsestr = ""; 
    if (response.IsSuccessStatusCode) 
    { 
     responsestr = await response.Content.ReadAsStringAsync(); 
     return Json(new { success = true, response = responsestr, hash = hash }); 
    } 
} 

но мой хэш не отправляется, когда я проверить браузер после отправки запроса я не вижу свой заголовок хэш, также я должен послать заголовок как тип хэша, но Я понятия не имею, что делать.

Я попытался изменить эту строку:

client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("hash")); 

еще не работает.

Update Вот скриншот из заголовков запроса в браузере Request headers

Кажется, мой заголовок не отправляется на всех.

ответ

0

Попробуйте вместо этого использовать client.DefaultRequestHeaders.Add("Hash", hash).

Ваш код пытается добавить заголовок запроса Accept, который используется для указания того, какие типы медиа приемлемы для ответа.

+0

То не работает, я обновил свой ответ с заголовками запроса отображается в браузере, а мой хеш-заголовок не существует ... что могло бы остановить мой заголовок от отправки PLS? –

+0

Большое спасибо, удалил client.DefaultRequestHeaders.Accept.Add (новый System.Net.Http.Headers.MediaTypeWithQualityHeaderValue ("hash")); и это сработало. –

0

После преобразования хеша в строку ваша строка может содержать символы, которые ограничены для отправки в GET запросах. Таким образом, вы должны рассмотреть, чтобы закодировать строку, используя Uri.EscapeDataString() функции перед отправкой:

hash = Uri.EscapeDataString(hash); 

Или converthashedBytes в Base64 и encode только несколько символов после того, как он

Смежные вопросы