我知道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
但没有用。
我认为问题在于我们应该添加特定的标头,以使Cybersource Gateway不会出现会话超时问题。有人知道可能是什么问题吗?
我不知道是否有人会遇到此问题,但我通过向其中添加Cookie来解决了 Webview
即使在中导航Webview
也会引发相同的错误(会话超时)。但是通过添加以下代码可以解决此问题:
var domain = new Uri(webSource.BaseUrl).Host;
var cookie = new Cookie
{
Secure = true,
Expired = false,
HttpOnly = false,
Name = "cookie",
Expires = DateTime.Now.AddDays(10),
Domain = domain,
Path = "/"
};
cookies.Add(cookie);
paymentWebView.Cookies = cookies;
我遇到了同样的问题,但是使用了javascript和html。我将尝试使用cookie参数。