Я хочу добавить трехмерную безопасную аутентификацию для платежей по кредитным картам, сделанным через веб-сайт. Я использую Sitefinity 8, подключаемый модуль электронной коммерции и SagePay в качестве процессора платежей.Внедрение 3D-Secure с Sitefinity Электронная торговля
Я создал пользовательский поставщик платежей и могу успешно перенаправить пользователей на защищенную страницу 3D. Я могу выполнить второй вызов аутентификации в SagePay, используя набор интеграции SagePay (то есть внешне из плагина электронной коммерции). Тем не менее, я изо всех сил пытаюсь найти способ завершить оплату из-за того, как функционируют внутренние классы электронной коммерции.
Сложность в том, что обработчик заказа обрабатывает платеж как отклоненный, если требуется трехмерная аутентификация, но, похоже, нет способа правильно обрабатывать заказ, не используя встроенную функциональность. Из моих проверок библиотек электронной коммерции, похоже, нет способа расширить или изменить эти классы из-за модификаторов internal
и конкретных реализаций.
Как я могу обработать заказ после завершения аутентификации? Кто-нибудь успешно реализовал 3D-безопасность с электронной торговлей? Или знаете, возможно ли это?
Это мой пользовательский поставщик платежей в настоящий момент.
public class CustomSagePayProvider : SagePayProvider
{
// Rest of code...
protected override IPaymentResponse ParseReponse(string uniqueTransactionCode, string responseXml)
{
var paymentResponse = base.ParseReponse(uniqueTransactionCode, responseXml);
if (Requires3DSecure(paymentResponse))
{
var responseFields = GetResponseAsDictionary(responseXml);
Set3DSecureFields(responseFields, paymentResponse);
}
return paymentResponse;
}
private bool Requires3DSecure(IPaymentResponse paymentResponse)
{
return paymentResponse.GatewayCSCResponse == "OK";
}
private void Set3DSecureFields(Dictionary<string, string> responseFields, IPaymentResponse paymentResponse)
{
var postValues = new NameValueCollection();
postValues.Add("MD", responseFields.ContainsKey("MD") ? responseFields["MD"] : string.Empty);
postValues.Add("PAReq", responseFields.ContainsKey("PAReq") ? responseFields["PAReq"] : string.Empty);
paymentResponse.GatewayRedirectUrlPostValues = postValues;
paymentResponse.GatewayRedirectUrl = responseFields.ContainsKey("ACSURL") ? responseFields["ACSURL"] : string.Empty;
}
}
И это безопасный способ оплаты 3D с использованием набора интеграции .NET SagePay
using SagePay.IntegrationKit;
using SagePay.IntegrationKit.Messages;
// Rest of code
var sagePay = new SagePayIntegration();
IThreeDAuthRequest request = new DataObject();
request.Md = Request.Form["MD"];
request.PaRes = Request.Form["PaRes"];
sagePay.RequestQueryString = sagePay.BuildQueryString(request, ProtocolMessage.THREE_D_AUTH_REQUEST, ProtocolVersion.V_223);
sagePay.ResponseQueryString = sagePay.ProcessWebRequestToSagePay("https://test.sagepay.com/gateway/service/direct3dcallback.vsp", sagePay.RequestQueryString);
var result = sagePay.GetDirectPaymentResult(sagePay.ResponseQueryString);
if (result.Status == ResponseStatus.OK)
{
// Process order
}
Привет, Олли, у вас есть полный образец кода для этого? Я ищу сделать то же самое и просто задаюсь вопросом, в каком порядке это сделать. Спасибо, Том – Tom
@Tom Извините, у меня больше нет доступа к проекту. Существует некоторая ограниченная информация о пользовательских провайдерах здесь http://docs.sitefinity.com/for-developers-create-payment-processor-providers, и я попытался включить ключевые части в свой ответ выше. Можете быть в состоянии дать вам несколько указателей, если вы застряли! –