I am getting error while await applePayClient.PostAsJsonAsync(validationUrl, validationPayload)
I am testing it on local machine. Am I even can test this on local machine or not?
Error: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host..
validationUrl: https://apple-pay-gateway.apple.com/paymentservices/startSession
JS
<script> $("#pay-cc-button").click(function () { $.ajax({ url: "../Payment/ProcessCCPayment", data: {
},
type: "POST",
success: function (data) {
console.log(data);
},
error: function (data) {
console.log(data);
}
});
});
$(document).ready(function () {
if (window.ApplePaySession && ApplePaySession.canMakePayments()) {
$('#apple-pay-button').show();
$('#apple-pay-button').on('click', function () {
const paymentRequest = {
countryCode: 'US',
currencyCode: 'USD',
total: {
label: 'xxxxx',
amount: '1.10',
},
supportedNetworks: ['visa', 'masterCard', 'amex', 'discover'],
merchantCapabilities: ['supports3DS']//, 'supportsCredit', 'supportsDebit']
};
const session = new ApplePaySession(3, paymentRequest);
session.onvalidatemerchant = function (event) {
const validationURL = event.validationURL;
validateMerchant(validationURL).then(function (merchantSession) {
session.completeMerchantValidation(merchantSession);
});
};
session.onpaymentauthorized = function (event) {
const payment = event.payment;
processPayment(payment).then(function (success) {
if (success) {
session.completePayment(ApplePaySession.STATUS_SUCCESS);
} else {
session.completePayment(ApplePaySession.STATUS_FAILURE);
}
});
};
session.begin();
});
}
function validateMerchant(validationURL) {
return $.ajax({
url: '/Payment/ValidateMerchant',
method: 'POST',
contentType: 'application/json',
data: JSON.stringify({ validationURL: validationURL }),
success: function (data) {
$("#processStatus").append("success validate-merchant = " + data + "<br />");
},
error: function (data) {
$("#processStatus").append("error validate-merchant = " + data + "<br />");
},
});
}
function processPayment(payment) {
console.log("payment" + payment);
return $.ajax({
url: '/Payment/ProcessPayment',
method: 'POST',
contentType: 'application/json',
data: JSON.stringify(payment),
success: function (data) {
$("#processStatus").append("success process-payment = " + data + "<br />");
},
error: function (data) {
$("#processStatus").append("error validate-merchant = " + data + "<br />");
},
});
}
});
</script>
C# code:
var applePayClientHandler = new HttpClientHandler { SslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13 };
var applePayClient = new HttpClient(applePayClientHandler); var merchantId = "merchant.com.xxxxxx.sandbox"; var _displayName = "Sandbox"; var domainName = "xxxxxx.co";
var validationUrl = request.ValidationURL;
var validationPayload = new { MerchantIdentifier = merchantId, DisplayName = _displayName, Initiative = "web", InitiativeContext = domainName }; try { var response = await applePayClient.PostAsJsonAsync(validationUrl, validationPayload); var merchantSession = await response.Content.ReadAsStringAsync();
return merchantSession;
} catch (HttpRequestException httpEx) { // Log detailed HTTP request/response information Console.WriteLine($"HttpRequestException: {httpEx.Message}"); if (httpEx.InnerException != null) { Console.WriteLine($"InnerException: {httpEx.InnerException.Message}"); } throw; }