2010-01-25 4 views
0

다른 은행에 여러 전자 메일 사이트를 통합하고 가장 쉬운 방법은 dotnetcharge (www.dotnetcharge.com) 라이브러리에 추가하는 것이 었습니다. 그것은 잘 작동하고 각 은행 유형 및 트랜잭션에 대해 동일한 코드를 유지할 수 있음을 의미합니다. 그러나, 그들의 지원 조금 짜증나 (4 전자 메일, 1 회 답장을 보냈습니다) 그리고 난 완전히 3D 보안 문제에 당황 스럽다.dotnetcharge를 사용한 3D 보안 처리 문제

누구든지 dotnetcharge 및 3D Secure 사용 경험이 있습니까? MerchantURL을 설정하고 실제 3D 보안 화면이 표시됩니다. 그러나 시스템을 올바르게 '플로팅'하도록하는 방법은 확실하지 않습니다. 누구든지 올바른 방향으로 어떤 코드 예제 또는 포인터가 있습니까? 실패하면, 누구든지 지원을 어떻게 응답 할 수 있는지 알고 있습니까?

이 특별한 통합은 SagePay와 관련이 있습니다. 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) 

감사합니다.

+2

IMHO - 나는 dotnetcharge를 추천하지 않습니다. 나는 그들의 제품이 하위 표준이고, 무례하고 문서 가난한 사람이라는 것을 알았다. – Robs

+1

후속 조치로서; 루시퍼 나는 너와 완전히 동의한다. 닷넷 채트 (dotnetcharge)의 지원은 완전한 농담이며, 고객이 '방해가되는'또는 '시간 낭비'라고 느끼게합니다. – dooburt

답변

0

이 질문으로 돌아가서 최종 결과가 어떻게 달성되었는지 설명하기로 결심했습니다. 바라건대 일부 SO 사용자는 유용 할 것입니다.

정확한 '흐름'을 확인하려면 두 페이지가 필요합니다. 한 페이지에서 전체 트랜잭션 처리를 실제로 수행 할 수는 없습니다. 첫 페이지에는 카드 입력 세부 사항이 있습니다. 카드 번호, 만료일, CVN, 청구서 수신 주소 등. 지불/지불시 거래가 '처리되지 않은'것으로 또는 다른 유사한 것으로 데이터 소스에 저장하는 것이 좋습니다. 모든 세부 사항이 저장되면 - 지금까지 카드 처리가 완료되지 않았습니다. - HTTPS를 사용하여 두 번째 페이지로 리디렉션하십시오.

고객이 설정하는 방법에 따라이 페이지가 존재한다는 것을 결코 알지 못할 수도 있습니다. 두 번째 페이지에는 내 질문과 처리를 위해 .netCharge 코드가 있습니다. 3D 보안이 활성화되면 (.Apply3DSecure = 1) 고객이 은행으로 리디렉션되어 세부 정보를 입력하면이 두 번째 페이지로 돌아갑니다. 다시 게시 또는 새로 고침과 같은 동작을하지 않으므로 페이지 처리를 두 번 호출하는 것에 대해 걱정하지 마십시오. 3 가지 가능한 상태 중 하나를 받게됩니다. 승인, 오류 및 거절. 귀하의 페이지는 필요한 추가 페이지로 리디렉션 될 수 있으므로 고객 Nevers는이 중간 페이지가 있음을 알고이 처리 페이지에 직접 결과를 표시합니다.

아주 빨리 볼 수있는 마지막 '잡았다'가 있습니다. 두 번째 페이지 (처리 페이지)는 실제로 처리 할 카드 정보가 필요합니다. 카드 정보를 양식이나 쿼리 문자열에 전달할 수는 없으며 무책임한 행동입니다. .netCharge에는 .Encrypt 및 .Decrypt 기능이 있습니다. 암호화 할 값과 일종의 해시를 전달하고 첫 번째 페이지에 이러한 세부 정보를 임시로 저장하고 두 번째 페이지에서 읽고 해독 한 다음 제거하십시오. 이것은 세부 사항이 안전하다는 것을 의미하며, 대부분의 경우 5 초 미만으로 저장되며 파괴되므로 노출되지 않습니다.

나는 이것이 도움이되기를 바랍니다. 질문이 있으시면 나에게 외쳐주십시오.