Проблема 3D Secure при использовании dotnetcharge - PullRequest
1 голос
/ 25 января 2010

Я интегрирую несколько сайтов электронной связи в разные банки и решил, что самый простой способ - добавить библиотеку dotnetcharge (www.dotnetcharge.com). Это работает хорошо и означает, что я могу сохранить большую часть своего кода одинаковым для каждого типа банка и транзакции. Однако их поддержка немного отстойная (4 отправленных письма, 1 ответ), и я совершенно сбит с толку проблемой 3D Secure.

У кого-нибудь есть опыт работы с dotnetcharge и 3D Secure? Я установил MerchantURL, и появился экран 3D Secure, но я не уверен, как заставить систему работать правильно. У кого-нибудь есть примеры кода или даже указатели в правильном направлении? В противном случае, кто-нибудь знает, как заставить реагировать службу поддержки!

Эта конкретная интеграция с SagePay, которая также имеет ужасную документацию и поддержку.

Код для справки выглядит следующим образом;

        Dim Amount As Decimal = ordertotal
        ' ApplySecure3D options:
        ' 0 = If 3D-Secure checks are possible and rules allow, perform the checks and apply the authorization rules. 
        ' 1 = Force 3D-Secure checks for this transaction only (if your account is 3D-enabled) and apply rules for authorization.
        ' 2 = Do not perform 3D-Secure checks for this transaction only and always authorize.
        ' 3 = Force 3D-Secure checks for this transaction (if your account is 3D-enabled) but ALWAYS obtain an auth code, irrespective of rule base.
        Dim ProtxLogin As String = "xxx"
        Dim ProtxPassword As String = "xxx"
        Dim ProtxApply3DSecure As Integer = 1
        Dim ProtxMerchantURL As String = "https://www.mydomain.com/processing/"

        Dim Number As String = txtCardNo.Text '//luhn/mod10 here.
        Dim AVS As String = txtCVN.Text
        Dim DD As String = "01"
        Dim MM As String = ddlValidTo_month.SelectedValue.ToString()
        Dim YY As String = ddlValidTo_year.SelectedValue.ToString()

        Dim ProcessingResult As Integer = 0
        Dim Protx As New dotnetCHARGE.CC()

        Protx.Login = ProtxLogin
        Protx.Password = ProtxPassword
        Protx.ApplySecure3D = ProtxApply3DSecure
        Protx.MerchantUrl = ProtxMerchantURL

        Dim AVSResponse As String = ""
        Dim CVV2 As String = ""

        Protx.OrderID = GoogleOrderNumber
        Protx.Month = MM
        Protx.Year = YY
        Protx.TransactionType = dotnetCHARGE.TransactionType.Sale
        Protx.Amount = ordertotal
        Protx.Number = Number
        Protx.Currency = "GBP"
        Protx.CustomerID = CustomerId
        '//loads of params removed for brevity
        Protx.ClientIP = Request.UserHostAddress.ToString()
        Protx.CardType = ddlCardType.SelectedValue.ToString()
        Protx.Description = "My Order"
        Protx.Code = AVS
        Protx.TestMode = True
        Protx.TransactionType = dotnetCHARGE.TransactionType.Sale

        ProcessingResult = Protx.Charge(Processor.Protx)

Помощь оценена.

1 Ответ

0 голосов
/ 30 июня 2010

Я решил вернуться к этому вопросу, чтобы объяснить, как был достигнут конечный результат. Надеемся, что некоторые пользователи SO найдут это полезным.

Чтобы получить правильный «поток», вам понадобятся две страницы. Вы не сможете реально выполнить всю транзакцию на одной странице. На первой странице будут указаны данные карты; номер карты, срок действия, CVN, адрес для выставления счета и т. д. При выборе метода оплаты / отправки я бы порекомендовал сохранить транзакцию в источник данных как «необработанный» или что-то подобное. Как только все ваши данные сохранены - пока не выполняется обработка карты - перенаправьте с помощью HTTPS на вторую страницу.

Ваш клиент может никогда не узнать, существует ли эта страница, в зависимости от того, как вы ее настроили. Вторая страница будет содержать код .netCharge в качестве моего вопроса и обрабатывать карту. Когда 3D-защита включена (.Apply3DSecure = 1), клиент будет перенаправлен в свой банк, чтобы ввести дополнительные сведения, и он вернется на эту вторую страницу. Он не ведет себя как обратный вызов или обновление, поэтому не беспокойтесь о повторном вызове обработки страницы дважды. Вы получите 1 из 3 возможных статусов; Авторизован, Ошибка и Отклонен. Ваша страница может перенаправить на другие необходимые страницы (поэтому клиенты никогда не знают, что эта средняя страница существует) или отобразить результаты непосредственно на этой странице обработки.

Есть одна заключительная «ошибка», которую вы увидите очень быстро. Вторая страница (страница обработки) нуждается в деталях карты для фактической обработки. Вы не можете просто передать данные карты в форме или даже строке запроса, это безответственно. .netCharge поставляется с функциями .Encrypt и .Decrypt; просто передайте ему значение для шифрования и какой-то хэш и временно сохраните эти данные на первой странице, прочитайте и расшифруйте на второй странице, а затем удалите их. Это означает, что данные надежны, в большинстве случаев они сохраняются менее 5 секунд, и вы не подвергаетесь воздействию, поскольку они уничтожены.

Надеюсь, это поможет - если у кого-то возникнут вопросы, просто крикните мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...