2011-11-22 8 views
6

Ho un progetto in cui ho bisogno di interagire con POS - Dispositivi terminali e schede magnetiche/chip. Diciamo che ogni volta che i clienti acquistano beni dal mio grande magazzino, il personale di questo negozio spoglierà le carte finanziarie del cliente ed effettuerà la transazione di pagamento.Interagire con POS - Dispositivi terminali e sistemi di commutazione bancaria

Per coloro sistema simile, la maggior parte dei forum dicono che dovrebbe essere considerato di utilizzare terze parti, ad esempio API:

  • PayPal
  • Braintree
  • Authorize.NET.
  • API Google Check-Out.

Ma penso che quelle API debbano essere utilizzate per quel tipo di sistema che andrà all'elaborazione dei pagamenti internazionali. Per quanto mi riguarda, presumo che il mio sistema non sia grande quanto l'elaborazione dei pagamenti internazionali e inizi a lavorare come un piccolo sistema domestico.

Quindi quello che mi piacerebbe sapere è quale sarà la soluzione migliore e come sarà l'architettura del sistema?

Quando ho letto una pagina Authorize.Net, ho trovato la routine di elaborazione carta di credito.

  • ho bisogno di seguire l'intera procedura non importa se il mio progetto è grande o piccolo, corsa internazionale o in esecuzione domestica?

  • Ho davvero bisogno di seguire questa procedura per effettuare il processo di pagamento con POS - Terminali?

Una cosa che so è che ISO 8583 è il protocollo di messaggistica finanziaria essenziale perché la maggior parte del sistema software di commutazione bancario, per la mia regione, utilizzare solo questi formato di messaggistica. Ciò significa che non posso usare altri formati di messaggistica come NDC o D912.

risposta

5

Authorize.net è molto facile da usare. Tutto quello che devi fare per elaborare le carte è inviare un post https in formato XML. Ci sono diversi esempi sul sito degli sviluppatori di Authorize.net. Per quanto riguarda lo scorrimento delle schede, la maggior parte dei lettori di schede emula le pressioni della tastiera. Una carta ti collegavi è simile a questo:

'%B5500692805076849^SMITH/STEPHEN A^12041010000000  00969000000?;5500692805076849=12041010000000969?` 

quindi analizzare il numero di carta "5500692805076849", Name "SMITH/STEPHEN A" e la data di scadenza "1204" e passare quelle sul Authorize.net

Private Sub cmdCharge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCharge.Click 
    ' By default, this sample code is designed to post to our test server for 
    ' developer accounts: https://test.authorize.net/gateway/transact.dll 
    ' for real accounts (even in test mode), please make sure that you are 
    ' posting to: https://secure.authorize.net/gateway/transact.dll 
    cmdCharge.Enabled = False 
    lblResponse.Text = "Processing....." 
    Application.DoEvents() 
    Dim post_url 
    post_url = "https://test.authorize.net/gateway/transact.dll" 

    Dim post_values As New Dictionary(Of String, String) 

    'the API Login ID and Transaction Key must be replaced with valid values 
    post_values.Add("x_login", "XXXXXXX") 
    post_values.Add("x_tran_key", "XXXXXXXXX") 
    'post_values.Add("x_test_request", "TRUE") 
    post_values.Add("x_delim_data", "TRUE") 
    post_values.Add("x_delim_char", "|") 
    post_values.Add("x_relay_response", "FALSE") 

    post_values.Add("x_type", "AUTH_CAPTURE") 
    post_values.Add("x_method", "CC") 
    post_values.Add("x_card_num", txtCard.Text) 
    post_values.Add("x_exp_date", txtExp.Text) 

    post_values.Add("x_amount", txtAmount.Text) 
    'post_values.Add("x_description", "Sample Transaction") 

    post_values.Add("x_first_name", txtFirst.Text) 
    post_values.Add("x_last_name", txtLast.Text) 
    'post_values.Add("x_address", "1234 Street") 
    'post_values.Add("x_state", "WA") 
    post_values.Add("x_zip", txtZip.Text) 
    post_values.Add("x_card_code", txt3CV.Text) 

    ' Additional fields can be added here as outlined in the AIM integration 
    ' guide at: http://developer.authorize.net 

    ' This section takes the input fields and converts them to the proper format 
    ' for an http post. For example: "x_login=username&x_tran_key=a1B2c3D4" 
    Dim post_string As String = "" 
    For Each field As KeyValuePair(Of String, String) In post_values 
     post_string &= field.Key & "=" & field.Value & "&" 
    Next 
    ' post_string = Left(post_string, Len(post_string) - 1) 
    post_string = post_string.Substring(0, Len(post_string) - 1) 

    ' create an HttpWebRequest object to communicate with Authorize.net 
    Dim objRequest As HttpWebRequest = CType(WebRequest.Create(post_url), HttpWebRequest) 
    objRequest.Method = "POST" 
    objRequest.ContentLength = post_string.Length 
    objRequest.ContentType = "application/x-www-form-urlencoded" 

    ' post data is sent as a stream 
    Dim myWriter As StreamWriter = Nothing 
    myWriter = New StreamWriter(objRequest.GetRequestStream()) 
    myWriter.Write(post_string) 
    myWriter.Close() 

    ' returned values are returned as a stream, then read into a string 
    Dim objResponse As HttpWebResponse = CType(objRequest.GetResponse(), HttpWebResponse) 
    Dim responseStream As New StreamReader(objResponse.GetResponseStream()) 
    Dim post_response As String = responseStream.ReadToEnd() 
    responseStream.Close() 

    ' the response string is broken into an array 
    Dim response_array As Array = Split(post_response, post_values("x_delim_char"), -1) 

    ' the results are output to the screen in the form of an html numbered list. 
    Select Case response_array(0) 

     Case "1" 'Approved 
      lblResponse.Text = "Transaction Approved. " & vbCrLf & response_array(4) 

     Case "2" 'Declined 
      lblResponse.Text = "Transaction Declined. " & vbCrLf & response_array(3) 

     Case "3" 'Error 
      lblResponse.Text = "Transaction Error. " & vbCrLf & response_array(3) 

     Case "4" 'Held for Review 
      lblResponse.Text = "Transaction Held. " & vbCrLf & response_array(3) 

    End Select 

    ' individual elements of the array could be accessed to read certain response 
    ' fields. For example, response_array(0) would return the Response Code, 
    ' response_array(2) would return the Response Reason Code. 
    ' for a list of response fields, please review the AIM Implementation Guide 

    cmdCharge.Enabled = True 
End Sub