Я знаю, что Cybersource здесь не так уж и знакомо, но я действительно в чем-то застрял, и, возможно, кто-то может мне помочь. Центр поддержки Cybersource , но, очевидно, они не поддерживают тестовые учетные записи.
У меня есть следующий код, в котором я пытаюсь выполнить почтовый запрос в Cybersource:
private async void Confirm_Payment(object sender, EventArgs e)
{
var randomGuid = Guid.NewGuid().ToString();
var currentDateTime = GetUTCDateTime();
var referenceNumber = "1594706148080";
using (var client = new HttpClient())
{
using (var content = new MultipartFormDataContent())
{
var values = new Dictionary<string, string>
{
{"access_key", "ACCESS_KEY"},
{"profile_id", "PROFILE_ID"},
{"transaction_uuid", randomGuid},
{"signed_field_names", "access_key,profile_id,transaction_uuid,signed_field_names,unsigned_field_names,signed_date_time,locale,transaction_type,reference_number,amount,currency"},
{"unsigned_field_names", ""},
{"signed_date_time", currentDateTime},
{"locale", "en"},
{"transaction_type", "authorization"},
{"reference_number", referenceNumber},
{"amount", "100.00"},
{"currency", "USD"},
{"submit", "Submit"}
};
var signature = Security.Sign(values);
foreach (var keyValuePair in values)
{
content.Add(new StringContent(keyValuePair.Value), keyValuePair.Key);
}
content.Add(new StringContent(signature), "signature");
var requestUri = "https://testsecureacceptance.cybersource.com/pay";
var result = await client.PostAsync(requestUri, content);
if (result.IsSuccessStatusCode)
{
var resp = await result.Content.ReadAsStringAsync();
await Navigation.PushAsync(new WebScreen(requestUri));
}
}
}
}
result.IsSuccessStatusCode
это 200 OK
, но всякий раз, когда я получаю await result.Content.ReadAsStringAsync();
, я получаю Страница тайм-аута сеанса
Обратите внимание, что тот же код в NET работает нормально:
<form id="payment_confirmation" action="https://testsecureacceptance.cybersource.com/pay" method="post">
<fieldset id="confirmation">
<legend>Review Payment Details</legend>
<div>
<%
foreach (var key in Request.Form.AllKeys)
{
Response.Write("<div>");
Response.Write("<span class=\"fieldName\">" + key + ":</span><span class=\"fieldValue\">" + Request.Params[key] + "</span>");
Response.Write("</div>");
}
%>
</div>
</fieldset>
<%
IDictionary<string, string> parameters = new Dictionary<string, string>();
foreach (var key in Request.Form.AllKeys)
{
Response.Write("<input type=\"hidden\" id=\"" + key + "\" name=\"" + key + "\" value=\"" + Request.Params[key] + "\"/>\n");
parameters.Add(key, Request.Params[key]);
}
Response.Write("<input type=\"hidden\" id=\"signature\" name=\"signature\" value=\"" + secureacceptance.Security.Sign(parameters) + "\"/>\n");
%>
<input type="submit" id="submit" value="Confirm" />
</form>
Я пытался взять тот же код и выполнить его в Xamarin Forms
, но это не сработало.
Я думаю, проблема в том, что мы должны добавить определенные c заголовки, чтобы Cybersource Gateway не вызывает проблемы с тайм-аутом сеанса. Кто-нибудь знает, в чем может быть проблема?