jquery ajax를 직접 사용하여 SagePay에 POST 요청을 보내지 마십시오. 대신 서버에 아약스 요청을해야만 SagePay에 데이터가 게시됩니다. PHP 예제는 여기에서 얻을 수 있습니다 : SagePay drop-in Checkout
아래에서 C# 코드를 확인하십시오.
HTML :
<div id="sagePayDetails"></div>
<form id="paymentForm"><input type="submit" value="Submit"></input></form>
JQuery와 :
$.ajax({
url: "@Url.Content("~/YourServerMethod")",
type: "GET",
success: function (data) {
if (data.Status == "SUCCESS") {
sagepayCheckout(
{
merchantSessionKey: data.SessionKey,
containerSelector: "#sagePayDetails"
}).form({ formSelector: "#paymentForm" });
} else {
showError("Some error occurred, please try again later.");
}
},
error: function (xhr, status, error) {
showError("Some error occurred, please try again later.");
}});
C 번호 :
public JsonResult YourServerMethod(){
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls |
SecurityProtocolType.Tls11 |
SecurityProtocolType.Tls12;
var invokeUrl = "https://pi-test.sagepay.com/api/v1/merchant-session-keys";
var integrationKey = "*****"
var integrationPassword = "*****";
var paymentVendor = "YourVendorName";
var apiKey = Base64Encode(
integrationKey + ":" + integrationPassword); //Your method to encode string to Base64
var request = new SagePayEntity.MerchantSessionKeyRequest {
vendorName = paymentVendor };
var requestData = new StringContent(
JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
var handler = new WebRequestHandler();
handler.ClientCertificates.Add(new X509Certificate2(
Server.MapPath("~/Certificate.crt"))); //Your SSL certificate for the domain
handler.CachePolicy = new HttpRequestCachePolicy(
HttpRequestCacheLevel.NoCacheNoStore);
var client = new HttpClient(handler);
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", apiKey);
client.DefaultRequestHeaders
.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.PostAsync(invokeUrl, requestData).Result;
var result = response.Content.ReadAsStringAsync().Result;
if (response.StatusCode == HttpStatusCode.Created)
{
var sageResponse = JsonConvert
.DeserializeObject<SagePayEntity.MerchantSessionKeyResponse>(result,
new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None
});
return Json(new { SessionKey = sageResponse.MerchantSessionKey,
Status = "SUCCESS" },
JsonRequestBehavior.AllowGet);
}
else
{
return Json(new { Status = "FAILURE" });
}}
그냥 그 이유는 명확하게하기 위해 : 당신의'token'이 비밀 * 있어야하는데 *. 서버 만이 서버인지 서버인지를 확인하는 데 사용됩니다. * 프론트 엔드 근처에 놓아 두거나 실수로 놓아 버리면 갱신하지 마십시오. 'merchantSessionKey'는'token'을 사용하여 서버 상에 생성됩니다. 이것은 일회용 제한된 평생 공용 토큰이며, 계정을 에뮬레이션하는데 사용될 수 없습니다. – Jason