2011-11-22 18 views
6

Tengo un proyecto en el que necesito interactuar con dispositivos POS - Terminal y tarjetas magnéticas/con chip. Digamos, cada vez que el cliente compra productos de mi tienda departamental, el personal de esta tienda raya las tarjetas financieras del cliente y realiza una transacción de pago.Interactuar con POS - Dispositivos terminales y sistemas de conmutación bancaria

Para aquellos sistema similar, la mayoría de los foros dicen que se debe considerar al utilizar la API de terceros, tales como:

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

Pero creo que esas API deberían usarse para ese tipo de sistema que irá al procesamiento de pagos internacionales. En cuanto a mí, supongo que mi sistema no es tan grande como el procesamiento de pagos internacionales y comenzará a funcionar como un pequeño sistema doméstico.

Entonces, ¿qué me gustaría saber es cuál será la mejor solución y cómo será la arquitectura del sistema?

Cuando leí una página de Authorize.Net, encontré la rutina de Procesamiento de tarjeta de crédito.

  • ¿Debo seguir todo este procedimiento sin importar si mi proyecto es grande o pequeño, internacional o nacional?

  • ¿Realmente necesito seguir este procedimiento para realizar el proceso de pago con dispositivos POS - Terminal?

Una cosa que sé es que ISO 8583 es el protocolo de mensajería financiera esencial, porque la mayor parte del sistema de software de conmutación de la banca, para mi región, usar sólo estos formato de mensajería. Esto significa que no puedo usar otro formato de mensajería, como NDC o D912.

Respuesta

5

Authorize.net es muy fácil de usar. Todo lo que necesita hacer para procesar tarjetas es enviar una publicación https en formato XML. Hay varios ejemplos en el sitio para desarrolladores de Authorize.net. En cuanto a deslizar tarjetas, la mayoría de los lectores de tarjetas emulan las pulsaciones del teclado. Una tarjeta birlado es similar a esto:

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

continuación, analizar el número de tarjeta "5500692805076849", Nombre "SMITH/STEPHEN A" y la fecha de caducidad "1204" y pasan los de la 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 
Cuestiones relacionadas