TodoPagoConectorSS 1.8.0 → 1.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.github/issue_template.md +34 -0
  3. data/.gitignore +37 -0
  4. data/README.md +1553 -0
  5. data/TodoPago/DataProvider.rb +273 -0
  6. data/TodoPago/DiscoverPaymentMethodsTest.rb +71 -0
  7. data/TodoPago/GetAuthorizeAnswerTest.rb +61 -0
  8. data/TodoPago/GetCredentialsTest.rb +70 -0
  9. data/TodoPago/GetOperationsTest.rb +72 -0
  10. data/TodoPago/MockClient.rb +195 -0
  11. data/TodoPago/ReturnRequestTest.rb +64 -0
  12. data/TodoPago/SendAuthorizeRequestTest.rb +63 -0
  13. data/TodoPago/coverage/.last_run.json +5 -0
  14. data/TodoPago/coverage/.resultset.json +892 -0
  15. data/TodoPago/coverage/.resultset.json.lock +0 -0
  16. data/TodoPago/coverage/assets/0.10.0/application.css +799 -0
  17. data/TodoPago/coverage/assets/0.10.0/application.js +1707 -0
  18. data/TodoPago/coverage/assets/0.10.0/colorbox/border.png +0 -0
  19. data/TodoPago/coverage/assets/0.10.0/colorbox/controls.png +0 -0
  20. data/TodoPago/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
  21. data/TodoPago/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
  22. data/TodoPago/coverage/assets/0.10.0/favicon_green.png +0 -0
  23. data/TodoPago/coverage/assets/0.10.0/favicon_red.png +0 -0
  24. data/TodoPago/coverage/assets/0.10.0/favicon_yellow.png +0 -0
  25. data/TodoPago/coverage/assets/0.10.0/loading.gif +0 -0
  26. data/TodoPago/coverage/assets/0.10.0/magnify.png +0 -0
  27. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  28. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  29. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  30. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  31. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  32. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  33. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  34. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  35. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  36. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  37. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  38. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  39. data/TodoPago/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  40. data/TodoPago/coverage/index.html +5510 -0
  41. data/TodoPago/test.rb +203 -0
  42. data/TodoPago/test_validations.rb +108 -0
  43. data/TodoPago/tests_coverage.rb +11 -0
  44. data/TodoPagoConector.gemspec +14 -0
  45. data/lib/Authorize.wsdl +320 -0
  46. data/lib/Classes/user.rb +30 -0
  47. data/lib/Connectors/RestConnector.rb +65 -0
  48. data/lib/Connectors/ServiceConnector.rb +32 -0
  49. data/lib/Connectors/SoapConnector.rb +139 -0
  50. data/lib/Exceptions/connection_exception.rb +6 -0
  51. data/lib/Exceptions/empty_field_exception.rb +6 -0
  52. data/lib/Exceptions/empty_field_password_exception.rb +8 -0
  53. data/lib/Exceptions/empty_field_user_exception.rb +8 -0
  54. data/lib/Exceptions/prueba.rb +5 -0
  55. data/lib/Exceptions/response_exception.rb +6 -0
  56. data/lib/FraudControlValidation.rb +406 -0
  57. data/lib/Operations.wsdl +319 -0
  58. data/lib/ServiceReferences/Authorize.wsdl +320 -0
  59. data/lib/ServiceReferences/EchoService.wsdl +125 -0
  60. data/lib/ServiceReferences/Operations.wsdl +319 -0
  61. data/lib/Validation/FraudControlValidation.rb +406 -0
  62. data/lib/config/postalCodes.json +26 -0
  63. data/lib/config/validations.json +623 -0
  64. data/lib/prueba.rb +4 -0
  65. data/lib/user.rb +41 -0
  66. metadata +65 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1dbaab93eb6bf235c9dc24066f0837a72c2f9348
4
- data.tar.gz: f3847f5bef8a10efd5eeeafa9ad8bbc745a22cbb
3
+ metadata.gz: e6e54ac798947eadf3df672eda3398dc5a01b26a
4
+ data.tar.gz: 557bf8c1f5d98bc7ccbad117c2c254b22fcb4905
5
5
  SHA512:
6
- metadata.gz: 19d2a5a52a2e7aa75534ce919ada17e96316db2eab40e35c79519be2a5775230f5eeb7b2701e92b0d83a7c7160305f717687f3f25c75f94bd719cbb53742d3e3
7
- data.tar.gz: fb8110b52e44b93e9d1f5c375b1bd6194faa00f01af30d32b277361c8c810b20a971cbfed6b31e58f0ce1de11b409cf928ae2f0704c9c4509efbd177f3f0545b
6
+ metadata.gz: 5c594488b485d4e257b9d9a0694e763d2026dac7b3af1a69b3122138db6bc88453e63ea0e31b0e51a346063a5391fec94a68ccc05eb80281f66cb35020715d24
7
+ data.tar.gz: 02031422d2b98b19063e565610f27a89946070e1ac9b51abb888722e665f47cd05ba3b29fcbdcb08df96b8cda5b247ce8646057be3f31c706262b03066821b57
@@ -0,0 +1,34 @@
1
+ # SDK-Ruby | Issue Técnico
2
+ > Poner un problema en su respectivo contexto acelera su resolución. </br>
3
+ Esta guía tiene como objetivo contextualizar el inconveniente desde un primer momento.
4
+
5
+ > __Para consultas acerca de nuevas funcionalidades o información comercial utiliza el formulario de contacto de www.todopago.com.ar__
6
+
7
+ ## Requisitos
8
+
9
+ * [ ] ¿Instalaste la gema json? (gem install json)
10
+ * [ ] ¿Instalaste la gema rest? (gem install rest)
11
+ * [ ] ¿Instalaste la gema savon? (gem install savon)
12
+ * [ ] ¿Seguiste los pasos de instalación descritos en [README.md](https://github.com/TodoPago/SDK-Ruby/blob/master/README.md)?
13
+ * [x] Completar con una X dentro de los corchetes para los requisitos cumplidos.
14
+
15
+ ## Comportamiento esperado
16
+ > Describinos qué respuesta se espera.
17
+
18
+ ## Comportamiento actual
19
+ > Describinos qué está sucediendo actualmente.
20
+
21
+ ## Pasos a reproducir
22
+ > Contanos, con el mayor detalle posible, qué pasos realizar para replicar el error.
23
+
24
+ ## Entorno
25
+ > Completar con las versiones de las distintas herramientas aplicadas.
26
+ + Entorno
27
+ * __SO:__
28
+ * __Servidor Web y versión:__
29
+ * __Versión de Ruby:__
30
+ * __Versión de TodoPago:__
31
+ * __Ambiente de Todopago:__
32
+
33
+ ## Comentario
34
+ > Cualquier cosa que quieras comentas que consideres pueda aportar a la detección y resolución del problema.
data/.gitignore ADDED
@@ -0,0 +1,37 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /test/tmp/
9
+ /test/version_tmp/
10
+ /tmp/
11
+ /.idea
12
+ ## Specific to RubyMotion:
13
+ .dat*
14
+ .repl_history
15
+ build/
16
+
17
+ ## Documentation cache and generated files:
18
+ /.yardoc/
19
+ /_yardoc/
20
+ /doc/
21
+ /rdoc/
22
+
23
+ ## Environment normalisation:
24
+ /.bundle/
25
+ /lib/bundler/man/
26
+
27
+ # for a library or gem, you might want to ignore these files since the code is
28
+ # intended to run in multiple environments; otherwise, check them in:
29
+ # Gemfile.lock
30
+ # .ruby-version
31
+ # .ruby-gemset
32
+
33
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
+ .rvmrc
35
+ *.project
36
+ .pydevproject
37
+ *.pyc
data/README.md ADDED
@@ -0,0 +1,1553 @@
1
+ <a name="inicio"></a>
2
+ Todo Pago - módulo SDK-Ruby para conexión con gateway de pago
3
+ =======
4
+
5
+ + [Instalación](#instalacion)
6
+ + [Creación de la gema TodoPagoConector](#creategem)
7
+ + [Instalación de la gema TodoPagoConector](#installgem)
8
+ + [Versiones de Ruby soportadas](#versionesderubysoportadas)
9
+ + [Generalidades](#general)
10
+ + [Ambientes](#test)
11
+ + [Uso](#uso)
12
+ + [Inicializar la clase correspondiente al conector (TodoPagoConector)](#initconector)
13
+ + [Operatoria Agrupador](#agrupador)
14
+ + [Diagrama de secuencia](#secuencia)
15
+ + [Solicitud de autorización](#solicitudautorizacion)
16
+ + [Datos adicionales para prevención de fraude](#datosadicionales)
17
+ + [Opciones adicionales](#opcionesadicionales)
18
+ + [Rango de cuotas](#coutas)
19
+ + [Filtrado de Medios de pago](#filtromp)
20
+ + [Tiempo de vida de la transacción](#timeout)
21
+ + [Confirmación de transacción](#confirmatransaccion)
22
+ + [Ejemplo](#ejemplo)
23
+ + [Características](#caracteristicas)
24
+ + [Status de la operación](#status)
25
+ + [Consulta de operaciones por rango de tiempo](#statusdate)
26
+ + [Descubrimiento de Medios de Pago](#discover)
27
+ + [Devolución](#devolucion)
28
+ + [Devolución parcial](#devolucionparcial)
29
+ + [Formulario híbrido](#formhidrido)
30
+ + [Obtener Credenciales](#credenciales)
31
+ + [Tablas de referencia](#tablareferencia)
32
+ + [Tabla de errores operativos](#codigoerrores)
33
+ + [Tabla de errores de integración](#interrores)
34
+
35
+ <a name="instalacion"></a>
36
+ ## Instalación
37
+ Se debe descargar la última versión del SDK desde el botón Download ZIP del branch master.
38
+ Se debe crear un archivo .gem que debe ser instalado para poder utilizarlo.
39
+ Se deben tener instaladas las gemas xml-simple , savon, rest-client y json
40
+
41
+ <a name="creategem"></a>
42
+ ### 1. Creación de la gema TodoPagoConector
43
+ Abrir la consola tipear:
44
+ ```
45
+ cd "ruta-del-sdk"
46
+ ```
47
+ Donde ruta-del-sdk es la ruta donde se descomprimió el zip
48
+
49
+ Para crear el archivo .gem se debe ejecutar el comando gem build
50
+ ```
51
+ gem build TodoPagoConector.gemspec
52
+ ```
53
+
54
+ Se debe obtener el archivo TodoPagoConector.gem
55
+ [<sub>Volver a inicio</sub>](#inicio)
56
+
57
+ <a name="installgem"></a>
58
+ #### 2. Instalación de la gema TodoPagoConector
59
+ ```
60
+ gem install ./TodoPagoConector.gem
61
+ gem install json
62
+ ```
63
+ [<sub>Volver a inicio</sub>](#inicio)
64
+
65
+ <a name="versionesderubysoportadas"></a>
66
+
67
+ #### 3. Versiones de Ruby soportadas
68
+ La versión implementada de la SDK, esta testeada para versiones de Ruby desde 1.9.3 en adelante.
69
+ [<sub>Volver a inicio</sub>](#inicio)
70
+
71
+ <a name="general"></a>
72
+ #### 4. Generalidades
73
+ Esta versión soporta únicamente pago en moneda nacional argentina (CURRENCYCODE = 32).
74
+
75
+ [<sub>Volver a inicio</sub>](#inicio)
76
+ <br>
77
+ <a name="uso"></a>
78
+ ## Uso
79
+
80
+ <a name="initconector"></a>
81
+ ### Inicializar la clase correspondiente al conector (TodoPagoConector).
82
+
83
+ - Crear una estrucura como la del ejemplo con las wsdl suministradas por Todo Pago
84
+
85
+ ```ruby
86
+ j_wsdls = {
87
+ #Remoto
88
+ 'Authorize'=> 'https://developers.todopago.com.ar/services/t/1.1/Authorize?wsdl'
89
+ #Local
90
+ #'Authorize'=> '../lib/Authorize.wsdl'
91
+ }
92
+ ```
93
+ - Crear una estructura como la del ejemplo con los http header suministrados por todo pago
94
+ ```ruby
95
+ j_header_http = {
96
+ "Authorization"=>"PRISMA f3d8b72c94ab4a06be2ef7c95490f7d3"
97
+ }
98
+ ```
99
+ - Crear una instancia de la clase TodoPago
100
+
101
+ ```ruby
102
+ end_point = 'https://developers.todopago.com.ar/'
103
+
104
+ conector = TodoPagoConector.new(j_header_http,
105
+ j_wsdls,
106
+ end_point) # End Point, wsdl y http_header provisto por TODO PAGO
107
+ ```
108
+
109
+ <a name="agrupador"></a>
110
+ ### Operatoria Agrupador
111
+
112
+ Mediante una única y simple adhesión, los vendedores acceden a todos los medios de pago que el Botón de pago ofrezca sin necesidad de contar con ningún tipo de contrato adicional con cada medio de pago. La funcionalidad “agrupador” de TodoPago, se ocupa de gestionar los acuerdos necesarios con todos los medios de pago a efectos de disponibilizarlos en el Botón.
113
+
114
+ Para acceder al servicio, los vendedores podrán adherirse en el sitio exclusivo de TodoPago o a través de su ejecutivo comercial. En estos procesos se generará el usuario y clave para este servicio.
115
+
116
+ Una vez adheridos se creará automáticamente una cuenta virtual, en la cual se acreditarán los fondos provenientes de los cobros realizados con la presente modalidad de pago.
117
+
118
+ <a name="secuencia"></a>
119
+ ## Diagrama de secuencia
120
+ ![imagen de configuracion](https://raw.githubusercontent.com/TodoPago/imagenes/master/README.img/secuencia-003.jpg)
121
+
122
+ <a name="solicitudautorizacion"></a>
123
+ #### Solicitud de autorización
124
+ En este caso hay que llamar a sendAuthorizeRequest().
125
+ ```ruby
126
+ response = conector.sendAuthorizeRequest(optionsSAR_comercio,optionsSAR_operacion)
127
+ ```
128
+ <ins><strong>Datos propios del comercio</strong></ins>
129
+ optionsSAR_comercio debe ser un Hash con la siguiente estructura:
130
+
131
+ <table>
132
+ <tr>
133
+ <th>Campo</th>
134
+ <th>Requerido</th>
135
+ <th>Descripción</th>
136
+ <th>Tipo de Dato</th>
137
+ <th>Valores posibles / Ejemplo</th>
138
+ </tr>
139
+ <tr>
140
+ <td><b>Security</b></td>
141
+ <td>Sí</td>
142
+ <td>API Keys sin PRISMA o TODOPAGO y sin espacio.</td>
143
+ <td>Alfanumérico hasta 32 caracteres</td>
144
+ <td>912EC803B2CE49E4A541068D495AB570</td>
145
+ </tr>
146
+ <tr>
147
+ <td><b>Merchant</b></td>
148
+ <td>Sí</td>
149
+ <td>Nro. de Comercio (Merchant ID) provisto por TodoPago</td>
150
+ <td>Numérico</td>
151
+ <td>12345678</td>
152
+ </tr>
153
+ <tr>
154
+ <td><b>URL_OK</b></td>
155
+ <td>No</td>
156
+ <td>URL a la que el comprador será dirigido cuando la compra resulte exitosa</td>
157
+ <td>Alfanumérico hasta 256 caracteres</td>
158
+ <td>http://susitio.com/payment/Ok</td>
159
+ </tr>
160
+ <tr>
161
+ <td><b>URL_Error</b></td>
162
+ <td>No</td>
163
+ <td>URL a la que el comprador será dirigido cuando la compra no resulte exitosa</td>
164
+ <td>Alfanumérico hasta 256 caracteres</td>
165
+ <td>http://susitio.com/payment/Error</td>
166
+ </tr>
167
+ </table>
168
+
169
+ <a name="url_ok"></a>
170
+ <a name="url_error"></a>
171
+ ```ruby
172
+ optionsSAR_comercio = Hash.new
173
+ optionsSAR_comercio[:Security]="f3d8b72c94ab4a06be2ef7c95490f7d3"
174
+ optionsSAR_comercio[:Merchant]= "2153"
175
+ optionsSAR_comercio[:EncodingMethod]="XML"
176
+ optionsSAR_comercio[:URL_OK]="http://someurl.com/ok/"
177
+ optionsSAR_comercio[:URL_ERROR]="http://someurl.com/error/"
178
+ optionsSAR_comercio[:Session]= "ABCDEF-1234-12221-FDE1-00000200"
179
+ ```
180
+
181
+ <ins><strong>Datos propios de la operación</strong></ins>
182
+ optionsSAR_operacion debe ser un Hash con la siguiente estructura:
183
+
184
+ <table>
185
+ <tr>
186
+ <th><b>Campo</b></th>
187
+ <th>Requerido</th>
188
+ <th>Descripción</th>
189
+ <th>Tipo de Dato</th>
190
+ <th>Valores Posibles / Ejemplos</th>
191
+ </tr>
192
+ <tr>
193
+ <td><b>MERCHANT</b></td>
194
+ <td>Sí</td>
195
+ <td>Nro. de Comercio (Merchant ID) provisto por TodoPago</td>
196
+ <td>Numérico</td>
197
+ <td>12345</td>
198
+ </tr>
199
+ <tr>
200
+ <td><b>OPERATIONID</b></td>
201
+ <td>Sí</td>
202
+ <td>Identificación de la transacción para el Comercio. Debe ser distinto para cada operación.</td>
203
+ <td>Alfanumérico de 1 a 40 caracteres</td>
204
+ <td>10000012</td>
205
+ </tr>
206
+ <tr>
207
+ <td><b>CURRENCYCODE</b></td>
208
+ <td>Sí</td>
209
+ <td>Tipo de moneda de la operación. Sólo válido pesos argentinos (32)</td>
210
+ <td>Numérico de dos posiciones</td>
211
+ <td>32</td>
212
+ </tr>
213
+ <tr>
214
+ <td><b>AMOUNT</b></td>
215
+ <td>Sí</td>
216
+ <td>Importe en Pesos de la transacción.</td>
217
+ <td>Numérico con 9 dígitos con hasta 2 decimales 999999[.CC]
218
+ Usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales.</td>
219
+ <td>$125,38 -> 125.38</td>
220
+ </tr>
221
+ <tr>
222
+ <td><b>EMAILCLIENTE</b></td>
223
+ <td>Si</td>
224
+ <td>El comercio deberá enviar a TodoPago el email del cliente. Esta dirección se utilizará para enviar el mail de confirmación de la compra al cliente</td>
225
+ <td>Alfanumérico de hasta 80 caracteres.</td>
226
+ <td>cliente@mail.com</td>
227
+ </tr>
228
+ </table>
229
+
230
+ **Respuesta**
231
+
232
+ <table><tr>
233
+ <td>Campo</td><td>Requerido</td><td>Descripción</td><td>Tipo de Dato</td><td>Valores posibles / Ejemplo</td></tr>
234
+ <tr><td>**StatusCode**</td><td>Sí</td><td>Código de estado o valor de retorno del Servicio</td><td>Numérico de 5 posiciones</td><td> <ul><li>-1 -> OK</li><li>otro ->Error</li></ul></td></tr>
235
+ <tr><td>**StatusMessage**</td><td>Sí</td><td>Descripción del códgo de retorno o estado del servicio</td><td>Alfanumérico hasta 256</td><td>-</td></tr>
236
+ <tr><td>**URL_Request**</td><td>Sí</td><td>Url del formulario de pago</td><td>URL</td><td>https://forms.todopago.com.ar/formulario/commands?command=formulario&m=t7d3938c9-f7b1-4ee9-e76b-9cc84f73fe81</td></tr>
237
+ <tr><td>**RequestKey**</td><td>No</td><td>Identificador Privado del Requerimiento obtenido en la respuesta de la operación SendAuthorizeRequest. Nunca debe ser expuesto hacia el Web Browser. Solo será utilizado entre el ecommerce y TodoPago</td><td>Alfanumérico hasta 48 caracteres</td><td>8496472a-8c87-e35b-dcf2-94d5e31eb12f</td></tr>
238
+ <tr><td>**PublicRequestKey**</td><td>No</td><td>Identificador Público del Requerimiento obenido en la respuesta de la operación SendAuthorizeRequest</td><td>Alfanumérico de hasta 48 caracteres</td><td>7d3938c9-f7b1-4ee9-e76b-9cc84f73fe81</td></tr>
239
+ </table>
240
+
241
+ **Ejemplo de respuesta**
242
+
243
+ ```ruby
244
+ Hash (size=5)
245
+ 'StatusCode' => int -1
246
+ 'StatusMessage' => string 'Solicitud de Autorizacion Registrada' (length=36)
247
+ 'URL_Request' => string 'https://developers.todopago.com.ar/formulario/commands?command=formulario&m=6d2589f2-37e6-1334-7565-3dc19404480c' (length=102)
248
+ 'RequestKey' => string '6d2589f2-37e6-1334-7565-3dc19404480c' (length=36)
249
+ 'PublicRequestKey' => string '6d2589f2-37e6-1334-7565-3dc19404480c' (length=36)
250
+ ```
251
+
252
+ //////////////////////////////////////////////////////////////
253
+
254
+
255
+ ```ruby
256
+ optionsSAR_operacion = Hash.new
257
+ optionsSAR_operacion[:MERCHANT] = "2153"
258
+ optionsSAR_operacion[:OPERATIONID] = "8000"
259
+ optionsSAR_operacion[:CURRENCYCODE] = "032"
260
+ optionsSAR_operacion[:AMOUNT] = "1.00"
261
+ ```
262
+
263
+ Tambien hay dos datos opcional para informar la cantidad minima y máxima de cuotas que ofrecerá el formulario de pago (generalmente de 1 a 12). Ejemplo :
264
+ ```ruby
265
+ optionsSAR_operacion[:MININSTALLMENTS] = "1"
266
+ optionsSAR_operacion[:MAXINSTALLMENTS] = "6"
267
+ ```
268
+
269
+ Se agregó un nuevo dato opcional Timeout, mediante esta funcionalidad se permite setear el tiempo máximo en el que se puede realizar el pago en el formulario.
270
+ Los valores posibles van de 300000 (5 minutos) a 21600000 (6hs) en milisegundos. En caso de que no se envíe el parámetro el valor por defecto es 1800000 (30 minutos).
271
+ ```ruby
272
+ optionsSAR_operacion[:TIMEOUT] = "300000"
273
+ ```
274
+
275
+ La variable response contendrá una estuctura en la cual **url_request** es donde está hosteado el formulario de pago y donde hay que redireccionar al usuario, una vez realizado el pago según el éxito o fracaso del mismo, el formulario redireccionará a una de las 2 URLs seteadas en **optionsSAR_comercio** ([URL_OK](#url_ok), en caso de éxito o [URL_ERROR](#url_error), en caso de que por algún motivo el formulario rechace el pago)
276
+
277
+ <a name="confirmatransaccion"></a>
278
+ #### Confirmación de transacción.
279
+ En este caso hay que llamar a **getAuthorizeAnswer()**, enviando como parámetro un Hash como se describe a continuación.
280
+
281
+ <table>
282
+ <tr>
283
+ <th>Campo</th>
284
+ <th>Requerido</th>
285
+ <th>Descripción</th>
286
+ <th>Tipo de Dato</th>
287
+ <th>Valores posibles / Ejemplo</th>
288
+ </tr>
289
+ <tr>
290
+ <td><b>Security</b></td>
291
+ <td>No</td>
292
+ <td>Token de Seguridad Generado en el Portal de TodoPago</td>
293
+ <td>Alfanumérico hasta 32 caracteres</td>
294
+ <td>1234567890ABCDEF1234567890ABCDEF</td>
295
+ </tr>
296
+ <tr>
297
+ <td><b>Merchant</b></td>
298
+ <td>Si</td>
299
+ <td>Nro. de Comercio (Merchant ID) provisto por TodoPago</td>
300
+ <td>Alfanumérico de 8 caracteres</td>
301
+ <td>12345678</td>
302
+ </tr>
303
+ <tr>
304
+ <td><b>RequestKey</b></td>
305
+ <td>Si</td>
306
+ <td>Identificador Privado del Requerimiento obtenido en la respuesta de la operación SendAuthorizeRequest. Nunca debe ser expuesto hacia el Web Browser. Solo será utilizado entre el ecommerce y TodoPago</td>
307
+ <td>Alfanumérico hasta 48 caracteres</td>
308
+ <td>8496472a-8c87-e35b-dcf2-94d5e31eb12f</td>
309
+ </tr>
310
+ <tr>
311
+ <td><b>AnswerKey</b></td>
312
+ <td>Sí</td>
313
+ <td>Identificador Público de la Respuesta. Recibido según el formulario utilizado, en la url de redirección hacia el ecommerce, o como propiedad retornada en el callback del formulario híbrido.</td>
314
+ <td>Alfanumérico hasta 48 caracteres</td>
315
+ <td>8496472a-8c87-e35b-dcf2-94d5e31eb12f</td>
316
+ </tr>
317
+ </table>
318
+
319
+ ```ruby
320
+ optionsAnwser=Hash.new
321
+ optionsAnwser[:Security]= "f3d8b72c94ab4a06be2ef7c95490f7d3" #Token de seguridad, provisto por TODO PAGO. MANDATORIO.
322
+ optionsAnwser[:MERCHANT]= "2153"
323
+ optionsAnwser[:RequestKey]= "710268a7-7688-c8bf-68c9-430107e6b9da" #Valor retornado en el SendAuthorizeRequest
324
+ optionsAnwser[:AnswerKey]= "693ca9cc-c940-06a4-8d96-1ab0d66f3ee6" #Valor que figura en la URL del redirect luego de realizar el pago
325
+
326
+ response = conector.getAuthorizeAnswer(optionsAnwser)
327
+
328
+ RESPONSE :
329
+ { StatusCode = -1,
330
+ StatusMessage = APROBADA,
331
+ AuthorizationKey = 1294-329E-F2FD-1AD8-3614-1218-2693-1378,
332
+ EncodingMethod = XML,
333
+ Payload = { Answer = { DATETIME = 2014/08/11 15:24:38,
334
+ RESULTCODE = -1,
335
+ RESULTMESSAGE = APROBADA,
336
+ CURRENCYNAME = Pesos,
337
+ PAYMENTMETHODNAME = VISA,
338
+ TICKETNUMBER = 12,
339
+ CARDNUMBERVISIBLE = 450799******4905,
340
+ AUTHORIZATIONCODE = TEST38,
341
+ INSTALLMENTPAYMENTS = 6 },
342
+ { Request = { MERCHANT = 12345678,
343
+ OPERATIONID = ABCDEF-1234-12221-FDE1-00000012,
344
+ AMOUNT = 1.00,
345
+ CURRENCYCODE = 032,
346
+ AMOUNTBUYER = 1.20}
347
+ }
348
+ }
349
+
350
+
351
+ ```
352
+
353
+ Se deben guardar y recuperar los valores de los campos <strong>RequestKey</strong> y <strong>AnswerKey</strong>.
354
+
355
+ El parámetro <strong>RequestKey</strong> es siempre distinto y debe ser persistido de alguna forma cuando el comprador es redirigido al formulario de pagos.
356
+
357
+ <ins><strong>Importante</strong></ins> El campo **AnswerKey** se adiciona en la redirección que se realiza a alguna de las direcciones ( URL ) especificadas en el servicio **SendAurhorizationRequest**, esto sucede cuando la transacción ya fue resuelta y es necesario regresar al site para finalizar la transacción de pago, también se adiciona el campo Order, el cual tendrá el contenido enviado en el campo **OPERATIONID**. Para nuestro ejemplo: <strong>http://susitio.com/paydtodopago/ok?Order=27398173292187&Answer=1111-2222-3333-4444-5555-6666-7777</strong>
358
+
359
+ <table>
360
+ <tr><td>Campo</td><td>Requerido</td><td>Descripción</td><td>Tipo de Dato</td><td>Valores posibles / Ejemplo</td></tr>
361
+ <tr><td>**StatusCode** </td><td>Si</td><td>Código de estado o valor de retorno del Servicio</td><td>Numèrico de 5 posiciones</td><td> <b>-1 -> OK<br> 0 a 99999 o vacío -> error</b></td></tr>
362
+ <tr><td>**StatusMessage**</td><td>Si</td><td>Descripción del código de retorno o estado del servicio</td><td>Alfanumérico hasta 256</td><td>-</td></tr>
363
+ <tr><td>**AuthorizationKey**</td><td>No</td><td>Identificador Privado de la Respuesta</td><td>Alfanumérico hasta 256 caracteres</td><td>-</td></tr>
364
+ <tr><td>**EncodingMethod**</td><td>No</td><td>Especifica el tipo codificación que se usa para los datos de la transacciones de pagos</td><td>Alfanumérico hasta 16 caracteres</td><td>XML</td></tr>
365
+ <tr><td>**Payload**</td><td>No</td><td>Documento codificado en el formato especificado en el campo EncodingMethod el cual contiene los datos de la transacción ejecutada</td><td>Alfanumérico hasta 2048 caracteres</td><td>-</td></tr></table>
366
+ .
367
+
368
+ El campo o elemento Payload es utilizado para retornar los datos de la respuesta de la transacción. En la siguiente Tabla se muestran los valores enviados en el campo _Answer_ de dicho elemento. (El otro campo presente, de nombre _Request_ contiene información enviada en el requerimiento del _GetAuthorizeAnswer_)
369
+
370
+ <table>
371
+ <tr><td>Campo</td><td>Requerido</td><td>Descripción</td><td>Tipo de Dato</td><td>Valores posibles / Ejemplo</td></tr>
372
+ <tr><td>**DATETIME**</td><td>Si</td><td>Fecha y Hora de la Transacción</td><td>Fecha y Hora. aaaammddTHHMMSSZ La hora se expresa en formato 24 hs.</td><td></td></tr>
373
+ <tr><td>**RESULTCODE**</td><td>Si</td><td>Código de estado o valor de retorno del Servicio</td><td>Numérico de 5 posiciones</td><td> <b>-1 -> OK<br> 0 a 99999 o vacío -> error</b></td></tr>
374
+ <tr><td>**RESULTMESSAGE**</td><td>Si</td><td>Descripción del código de retorno o estado del servicio</td><td>Alfanumérico hasta 256</td><td>-</td></tr>
375
+ <tr><td>**CURRENCYNAME**</td><td>No</td><td>Nombre de la Moneda</td><td> 'Pesos'</td><td> </td></tr>
376
+ <tr><td>**PAYMENTMETHODNAME**</td><td>Sí </td><td>Medio de pago usado para la operación</td><td>'VISA'</td><td></td></tr>
377
+ <tr><td>**TICKETNUMBER** </td><td>No</td><td>Número de Ticket o Voucher</td><td>Numérico de Hasta 4 dígitos</td><td></td></tr>
378
+ <tr><td>**CARDNUMBERVISIBLE**</td><td>No</td><td>Número de Tarjeta, enmascarado según normativas nacionales, regionales o globales</td><td></td><td></td></tr>
379
+ <tr><td>**AUTHORIZATIONCODE**</td><td>No</td><td>Código de Autorización</td><td>Alfanumérico de hasta 8 caracteres</td><td></td></tr>
380
+ <tr><td>**INSTALLMENTPAYMENTS**</td><td>No</td><td>Cantidad de cuotas elegidas para la operación</td><td>Numérico</td><td> Ejemplo: 03</td></tr>
381
+ <tr><td>**AMOUNTBUYER**</td><td>Si</td><td>Monto final (incluyendo Costo Financiero) pagado por el comprador</td><td>Decimal</td><td> Ejemplo: 129.68</td></tr>
382
+ </table>
383
+
384
+ <a name="ejemplo"></a>
385
+ #### Ejemplo
386
+ Existe un ejemplo en la carpeta https://github.com/TodoPago/sdk-ruby/blob/master/TodoPago/test.rb el cual tiene configurados estos valores, y muestra los resultados de los métodos principales del SDK.
387
+ [<sub>Volver a inicio</sub>](#inicio)
388
+
389
+ <a name="datosadicionales"></a>
390
+ ## Datos adicionales para control de fraude
391
+ Los datos adicionales para control de fraude son **obligatorios**, de lo contrario baja el score de la transacción.
392
+
393
+ Los campos marcados como **condicionales** afectan al score negativamente si no son enviados, pero no son mandatorios o bloqueantes.
394
+
395
+ ```ruby
396
+ optionsSAR_operacion=Hash.new
397
+ ...........................................................................
398
+ optionsSAR_operacion[:CSBTCITY] = "Villa General Belgrano" #Ciudad de facturación, MANDATORIO.
399
+ optionsSAR_operacion[:CSBTCOUNTR]="AR" #País de facturación. MANDATORIO. Código ISO. (http://apps.cybersource.com/library/documentation/sbc/quickref/countries_alpha_list.pdf)
400
+ optionsSAR_operacion[:CSBTCUSTOMERID]="453458" #Identificador del usuario al que se le emite la factura. MANDATORIO. No puede contener un correo electrónico.
401
+ optionsSAR_operacion[:CSBTIPADDRESS]="192.0.0.4" #IP de la PC del comprador. MANDATORIO.
402
+ optionsSAR_operacion[:CSBTEMAIL]="some@someurl.com" #Mail del usuario al que se le emite la factura. MANDATORIO.
403
+ optionsSAR_operacion[:CSBTFIRSTNAME]="Juan" #Nombre del usuario al que se le emite la factura. MANDATORIO.
404
+ optionsSAR_operacion[:CSBTLASTNAME]="Perez" #Apellido del usuario al que se le emite la factura. MANDATORIO.
405
+ optionsSAR_operacion[:CSBTPHONENUMBER]="541160913988" #Teléfono del usuario al que se le emite la factura. No utilizar guiones, puntos o espacios. Incluir código de país. MANDATORIO.
406
+ optionsSAR_operacion[:CSBTPOSTALCODE]="1010" #Código Postal de la dirección de facturación. MANDATORIO.
407
+ optionsSAR_operacion[:CSBTSTATE]="B" #Provincia de la dirección de facturación. MANDATORIO. Ver tabla anexa de provincias.
408
+ optionsSAR_operacion[:CSBTSTREET1]="Some Street 2153" #Domicilio de facturación (calle y nro). MANDATORIO.
409
+ optionsSAR_operacion[:CSBTSTREET2]="" #Complemento del domicilio. (piso, departamento). NO MANDATORIO.
410
+ optionsSAR_operacion[:CSPTCURRENCY]="ARS" #Moneda. MANDATORIO.
411
+ optionsSAR_operacion[:CSPTGRANDTOTALAMOUNT]="10.01" #Con decimales opcional usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. MANDATORIO. (Ejemplos:$125,38-> 125.38 $12-> 12 o 12.00)
412
+ optionsSAR_operacion[:CSMDD7]="" # Fecha registro comprador(num Dias). NO MANDATORIO.
413
+ optionsSAR_operacion[:CSMDD8]="" #Usuario Guest? (Y/N). En caso de ser Y, el campo CSMDD9 no deberá enviarse. NO MANDATORIO.
414
+ optionsSAR_operacion[:CSMDD9]="" #Customer password Hash: criptograma asociado al password del comprador final. NO MANDATORIO.
415
+ optionsSAR_operacion[:CSMDD10]="" #Histórica de compras del comprador (Num transacciones). NO MANDATORIO.
416
+ optionsSAR_operacion[:CSMDD11]="" #Customer Cell Phone. NO MANDATORIO.
417
+
418
+ #Retail
419
+ optionsSAR_operacion[:CSSTCITY]="Villa General Belgrano" #Ciudad de enví­o de la orden. MANDATORIO.
420
+ optionsSAR_operacion[:CSSTCOUNTRY]="" #País de envío de la orden. MANDATORIO.
421
+ optionsSAR_operacion[:CSSTEMAIL]="some@someurl.com" #Mail del destinatario, MANDATORIO.
422
+ optionsSAR_operacion[:CSSTFIRSTNAME]="Jose" #Nombre del destinatario. MANDATORIO.
423
+ optionsSAR_operacion[:CSSTLASTNAME]="Perez" #Apellido del destinatario. MANDATORIO.
424
+ optionsSAR_operacion[:CSSTPHONENUMBER]="541160913988" #Número de teléfono del destinatario. MANDATORIO.
425
+ optionsSAR_operacion[:CSSTPOSTALCODE]="1010" #Código postal del domicilio de envío. MANDATORIO.
426
+ optionsSAR_operacion[:CSSTSTATE]="D" #Provincia de envío. MANDATORIO. Son de 1 caracter
427
+ optionsSAR_operacion[:CSSTSTREET1]="Some Street 2153" #Domicilio de envío. MANDATORIO.
428
+ optionsSAR_operacion[:CSMDD12]="" #Shipping DeadLine (Num Dias). NO MADATORIO.
429
+ optionsSAR_operacion[:CSMDD13]="" #Método de Despacho. NO MANDATORIO.
430
+ optionsSAR_operacion[:CSMDD14]="" #Customer requires Tax Bill ? (Y/N). NO MANDATORIO.
431
+ optionsSAR_operacion[:CSMDD15]="" #Customer Loyality Number. NO MANDATORIO.
432
+ optionsSAR_operacion[:CSMDD16]="" #Promotional / Coupon Code. NO MANDATORIO.
433
+
434
+ #Datos a enviar por cada producto, los valores deben estar separado con #.
435
+ optionsSAR_operacion[:CSITPRODUCTCODE]="electronic_good" #Código de producto. CONDICIONAL. Valores posibles(adult_content;coupon;default;electronic_good;electronic_software;gift_certificate;handling_only;service;shipping_and_handling;shipping_only;subscription)
436
+ optionsSAR_operacion[:CSITPRODUCTDESCRIPTION]="Test Prd Description" #Descripción del producto. CONDICIONAL.
437
+ optionsSAR_operacion[:CSITPRODUCTNAME]="TestPrd" #Nombre del producto. CONDICIONAL.
438
+ optionsSAR_operacion[:CSITPRODUCTSKU]="SKU1234" #Código identificador del producto. CONDICIONAL.
439
+ optionsSAR_operacion[:CSITTOTALAMOUNT]="10.01" #CSITTOTALAMOUNT=CSITUNITPRICE*CSITQUANTITY "999999[.CC]" Con decimales opcional usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. CONDICIONAL.
440
+ optionsSAR_operacion[:CSITQUANTITY]="1" #Cantidad del producto. CONDICIONAL.
441
+ optionsSAR_operacion[:CSITUNITPRICE]="10.01" #Formato Idem CSITTOTALAMOUNT. CONDICIONAL.
442
+ ...........................................................
443
+ ```
444
+ **Parámetros Generales:**
445
+ <table>
446
+ <tr>
447
+ <th>Parámetro</th>
448
+ <th>Requerido</th>
449
+ <th>Descripción</th>
450
+ <th>Descripción</th>
451
+ <th>Valores posibles</th>
452
+ </tr>
453
+ <tr>
454
+ <td><b>CSBTCITY</b></td>
455
+ <td>Sí</td>
456
+ <td>Ciudad de facturación</td>
457
+ <td>Alfanumérico de 50 caracteres.</td>
458
+ <td>Ejemplo: Villa General Belgrano</td>
459
+ </tr>
460
+ <tr>
461
+ <td><b>CSBTCOUNTRY</b></td>
462
+ <td>Sí</td>
463
+ <td>País de facturación</td>
464
+ <td>Alfanumérico de 2 caracteres.</td>
465
+ <td>Código ISO</td>
466
+ </tr>
467
+ <tr>
468
+ <td><b>CSBTCUSTOMERID</b></td>
469
+ <td>Si</td>
470
+ <td>Identificador del usuario al que se le emite la factura. No puede contener un correo electrónico</td>
471
+ <td>Alfanumérico de 50 caracteres.</td>
472
+ <td>Ejemplos:
473
+ A.Carlos
474
+ 453458</td>
475
+ </tr>
476
+ <tr>
477
+ <td><b>CSBTIPADDRESS</b></td>
478
+ <td>Sí</td>
479
+ <td>IP de la PC del comprador </td>
480
+ <td>Alfanumérico de 15 caracteres.</td>
481
+ <td>Ejemplo: 10.1.27.63</td>
482
+ </tr>
483
+ <tr>
484
+ <td><b>CSBTEMAIL</b></td>
485
+ <td>Si</td>
486
+ <td>Mail del usuario al que se le emite la factura</td>
487
+ <td>Alfanumérico de 100 caracteres.</td>
488
+ <td>Ejemplo: todopago@hotmail.com</td>
489
+ </tr>
490
+ <tr>
491
+ <td><b>CSBTFIRSTNAME</b></td>
492
+ <td>Si</td>
493
+ <td>Nombre del usuario al que se le emite la factura</td>
494
+ <td>Alfanumérico de 60 caracteres.</td>
495
+ <td>Ejemplo: Juan</td>
496
+ </tr>
497
+ <tr>
498
+ <td><b>CSBTLASTNAME</b></td>
499
+ <td>Si</td>
500
+ <td>Apellido del usuario al que se le emite la factura</td>
501
+ <td>Alfanumérico de 60 caracteres.</td>
502
+ <td>Ejemplo: Perez</td>
503
+ </tr>
504
+ <tr>
505
+ <td><b>CSBTPHONENUMBER</b></td>
506
+ <td>Si</td>
507
+ <td>Teléfono del usuario al que se le emite la factura. No utilizar guiones, puntos o espacios. Incluir código de país</td>
508
+ <td>Alfanumérico de 15 caracteres.</td>
509
+ <td>Ejemplo: 541160913988</td>
510
+ </tr>
511
+ <tr>
512
+ <td><b>CSBTPOSTALCODE</b></td>
513
+ <td>Si</td>
514
+ <td>Código Postal de la dirección de facturación</td>
515
+ <td>Alfanumérico de 10 caracteres.</td>
516
+ <td>Ejemplo: C1010AAP ó 1010</td>
517
+ </tr>
518
+ <tr>
519
+ <td><b>CSBTSTATE</b></td>
520
+ <td>Si</td>
521
+ <td>Provincia de la dirección de facturación</td>
522
+ <td>Alfanumérico de 2 caracteres.</td>
523
+ <td><a href="#tablareferencia">Ver Provincias</a>
524
+ Ejemplo: Enviar C si corresponde a CABA</td>
525
+ </tr>
526
+ <tr>
527
+ <td><b>CSBTSTREET1</b></td>
528
+ <td>Si</td>
529
+ <td>Domicilio de facturación (Calle Numero interior Numero Exterior)</td>
530
+ <td>Alfanumérico de 60 caracteres.</td>
531
+ <td>Ejemplo: Cerrito 740 piso 8</td>
532
+ </tr>
533
+ <tr>
534
+ <td><b>CSBTSTREET2</b></td>
535
+ <td>No</td>
536
+ <td>Localidad</td>
537
+ <td>Alfanumérico de 60 caracteres.</td>
538
+ <td>Ejemplo: CABA</td>
539
+ </tr>
540
+ <tr>
541
+ <td><b>CSPTCURRENCY</b></td>
542
+ <td>Si</td>
543
+ <td>Moneda</td>
544
+ <td>Alfanumérico de 5 caracteres.</td>
545
+ <td>Ejemplo: ARS</td>
546
+ </tr>
547
+ <tr>
548
+ <td><b>CSPTGRANDTOTALAMOUNT</b></td>
549
+ <td>Si</td>
550
+ <td>"999999.CC"
551
+ Con decimales obligatorios, usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales.</td>
552
+ <td>Numérico de 15 posiciones</td>
553
+ <td>Ejemplos:
554
+ $125,38 -> 125.38
555
+ $12 -> 12.00</td>
556
+ </tr>
557
+ <tr>
558
+ <td><b>CSMDD6</b></td>
559
+ <td>No</td>
560
+ <td>Canal de venta</td>
561
+ <td>Alfanumérico de 255 caracteres.</td>
562
+ <td>Valores posibles: Web, Mobile, Telefonica</td>
563
+ </tr>
564
+ <tr>
565
+ <td><b>CSMDD7</b></td>
566
+ <td>No</td>
567
+ <td>Cantidad de dias que está registrado el cliente en el sitio del comercio. (num Dias)</td>
568
+ <td>Alfanumérico de 255 caracteres.</td>
569
+ <td></td>
570
+ </tr>
571
+ <tr>
572
+ <td><b>CSMDD8</b></td>
573
+ <td>No</td>
574
+ <td>Para indicar si el usuario está comprando como invitado en la página del comercio. En caso de ser "S", el campo CSMDD9 no deberá enviarse.</td>
575
+ <td>Valor Booleano</td>
576
+ <td>Valores posibles (S/N)</td>
577
+ </tr>
578
+ <tr>
579
+ <td><b>CSMDD9</b></td>
580
+ <td>No</td>
581
+ <td>Valor del password del usuario registrado en el portal del comercio. Incluir el valor en hash</td>
582
+ <td>Alfanumérico de 255 caracteres.</td>
583
+ <td></td>
584
+ </tr>
585
+ <tr>
586
+ <td><b>CSMDD10</b></td>
587
+ <td>No</td>
588
+ <td>Cantidad de transacciones realizadas por el mismo usuario registrado en el portal del comercio (Num transacciones)</td>
589
+ <td>Alfanumérico de 255 caracteres.</td>
590
+ <td></td>
591
+ </tr>
592
+ <tr>
593
+ <td><b>CSMDD11</b></td>
594
+ <td>No</td>
595
+ <td>Celular del cliente</td>
596
+ <td>Alfanumérico de 255 caracteres.</td>
597
+ <td></td>
598
+ </tr>
599
+ </table>
600
+
601
+ **Parámetros del vertical "Retail":**
602
+ <table>
603
+ <tr>
604
+ <th>Parámetro</th>
605
+ <th>Requerido</th>
606
+ <th>Descripción</th>
607
+ <th>Descripción</th>
608
+ <th>Valores posibles</th>
609
+ </tr>
610
+ <tr>
611
+ <td><b>CSSTCITY</b></td>
612
+ <td>Si</td>
613
+ <td>Ciudad de envío de la orden</td>
614
+ <td>Alfanumérico de 50 caracteres</td>
615
+ <td></td>
616
+ </tr>
617
+ <tr>
618
+ <td><b>CSSTCOUNTRY</b></td>
619
+ <td>Si</td>
620
+ <td>País de envío de la orden</td>
621
+ <td>Alfanumérico de 2 caracteres</td>
622
+ <td>Código ISO</td>
623
+ </tr>
624
+ <tr>
625
+ <td><b>CSSTEMAIL</b></td>
626
+ <td>Si</td>
627
+ <td>Correo electrónico del comprador</td>
628
+ <td>Alfanumérico de 100 caracteres</td>
629
+ <td></td>
630
+ </tr>
631
+ <tr>
632
+ <td><b>CSSTFIRSTNAME</b></td>
633
+ <td>Si</td>
634
+ <td>Nombre de la persona que recibe el producto</td>
635
+ <td>Alfanumérico de 60 caracteres</td>
636
+ <td></td>
637
+ </tr>
638
+ <tr>
639
+ <td><b>CSSTLASTNAME</b></td>
640
+ <td>Si</td>
641
+ <td>Apellido de la persona que recibe el producto</td>
642
+ <td>Alfanumérico de 60 caracteres</td>
643
+ <td></td>
644
+ </tr>
645
+ <tr>
646
+ <td><b>CSSTPHONENUMBER</b></td>
647
+ <td>Si</td>
648
+ <td>Número de teléfono del destinatario</td>
649
+ <td>Alfanumérico de 15 caracteres</td>
650
+ <td></td>
651
+ </tr>
652
+ <tr>
653
+ <td><b>CSSTPOSTALCODE</b></td>
654
+ <td>Si</td>
655
+ <td>Código postal del domicilio de envío</td>
656
+ <td>Alfanumérico de 10 caracteres</td>
657
+ <td></td>
658
+ </tr>
659
+ <tr>
660
+ <td><b>CSSTSTATE</b></td>
661
+ <td>Si</td>
662
+ <td>Provincia de envío</td>
663
+ <td>Alfanumérico de 2 caracteres</td>
664
+ <td>Es un carácter. <a href="#tablareferencia">Ver Provincias</a></td>
665
+ </tr>
666
+ <tr>
667
+ <td><b>CSSTSTREET1</b></td>
668
+ <td>Si</td>
669
+ <td>Domicilio de envío</td>
670
+ <td>Alfanumérico de 60 caracteres</td>
671
+ <td></td>
672
+ </tr>
673
+ <tr>
674
+ <td><b>CSSTSTREET2</b></td>
675
+ <td>No</td>
676
+ <td>Localidad de envío</td>
677
+ <td>Alfanumérico de 60 caracteres</td>
678
+ <td></td>
679
+ </tr>
680
+ <tr>
681
+ <td><b>CSMDD12</b></td>
682
+ <td>No</td>
683
+ <td>Cantidad de días que tiene el comercio para hacer la entrega</td>
684
+ <td>Alfanumérico de 255 caracteres</td>
685
+ <td></td>
686
+ </tr>
687
+ <tr>
688
+ <td><b>CSMDD13</b></td>
689
+ <td>No</td>
690
+ <td>Método de Despacho</td>
691
+ <td>Alfanumérico de 255 caracteres</td>
692
+ <td>Valores posibles: storepickup, deliverypropio, deliverycarrier <br>
693
+ Notas: deliverypropio: envío realizado con operador logístico propio.
694
+ deliverycarrier: envío realizado con operador logístico tercerizado (ej. Andreani).
695
+ </td>
696
+ </tr>
697
+ <tr>
698
+ <td><b>CSMDD14</b></td>
699
+ <td>No</td>
700
+ <td>Valor booleano para identificar si el cliente requiere un comprobante fiscal o no S / N</td>
701
+ <td>Valor Booleano</td>
702
+ <td>S/N</td>
703
+ </tr>
704
+ <tr>
705
+ <td><b>CSMDD15</b></td>
706
+ <td>No</td>
707
+ <td>CustomerLoyalityNumber - número de cliente frecuente</td>
708
+ <td>Alfanumérico de 255 caracteres</td>
709
+ <td></td>
710
+ </tr>
711
+ <tr>
712
+ <td><b>CSMDD16</b></td>
713
+ <td>No</td>
714
+ <td>Promotional / CouponCode - número de cupón de descuento</td>
715
+ <td>Alfanumérico de 255 caracteres</td>
716
+ <td></td>
717
+ </tr>
718
+ </table>
719
+
720
+ **Datos a enviar por cada producto, los valores deben estar separados con "#":**
721
+
722
+ <table>
723
+ <tr>
724
+ <th><b>Parámetro</b></th>
725
+ <th>Requerido</th>
726
+ <th>Descripción</th>
727
+ <th>Descripción</th>
728
+ <th>Valores posibles</th>
729
+ </tr>
730
+ <tr>
731
+ <td><b>CSITPRODUCTCODE</b></td>
732
+ <td>Condicional</td>
733
+ <td>Categoría del producto</td>
734
+ <td>Alfanumérico de 255 caracteres</td>
735
+ <td>Valor por defecto: default</td>
736
+ </tr>
737
+ <tr>
738
+ <td><b>CSITPRODUCTDESCRIPTION</b></td>
739
+ <td>Condicional</td>
740
+ <td>Descripción del producto </td>
741
+ <td>Alfanumérico de 255 caracteres</td>
742
+ <td>NOTEBOOK L845 SP4304LA DF TOSHIBA 4GB RAM 233 MHZ</td>
743
+ </tr>
744
+ <tr>
745
+ <td><b>CSITPRODUCTNAME</b></td>
746
+ <td>Condicional</td>
747
+ <td>Nombre del producto</td>
748
+ <td>Alfanumérico de 255 caracteres</td>
749
+ <td>NOTEBOOK L845 SP4304LA DF TOSHIBA</td>
750
+ </tr>
751
+ <tr>
752
+ <td><b>CSITPRODUCTSKU</b></td>
753
+ <td>Condicional</td>
754
+ <td>Código identificador del producto</td>
755
+ <td>Alfanumérico de 255 caracteres</td>
756
+ <td>Ejemplo: LEVJNSL36GN</td>
757
+ </tr>
758
+ <tr>
759
+ <td><b>CSITTOTALAMOUNT</b></td>
760
+ <td>Condicional</td>
761
+ <td>CSITTOTALAMOUNT = CSITUNITPRICE * CSITQUANTITY
762
+ "999999.CC"
763
+ Es mandatorio informar los decimales, usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales.</td>
764
+ <td>Numérico</td>
765
+ <td>Ejemplos:
766
+ $125,38 -> 125.38
767
+ $12 -> 12.00</td>
768
+ </tr>
769
+ <tr>
770
+ <td><b>CSITQUANTITY</b></td>
771
+ <td>Condicional</td>
772
+ <td>Cantidad del producto</td>
773
+ <td>Numérico</td>
774
+ <td>Ejemplo: 1</td>
775
+ </tr>
776
+ <tr>
777
+ <td><b>CSITUNITPRICE</b></td>
778
+ <td>Condicional</td>
779
+ <td>"999999.CC"
780
+ Es mandatorio informar los decimales, usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales.</td>
781
+ <td>Numérico</td>
782
+ <td>Ejemplos:
783
+ $125,38 -> 125.38
784
+ $12 -> 12.00</td>
785
+ </tr>
786
+ </table>
787
+
788
+ [<sub>Volver a inicio</sub>](#inicio)
789
+ <br>
790
+
791
+ <a name="opcionesadicionales"></a>
792
+ #### Opciones adicionales
793
+ Dentro del parámetro *optionsSAR_operacion* pueden enviarse opciones adicionales que habilitan características para esa transacción en particular. A continuación se describen las mismas
794
+
795
+ <a name="coutas"></a>
796
+ ##### Rango de Cuotas
797
+ Es posible setear el rango de cuotas a mostrar en el formulario entre un mínimo y un máximo, enviando los siguientes parametros adicionales
798
+
799
+ <table>
800
+ <tr>
801
+ <th>Campo</th>
802
+ <th>Requerido</th>
803
+ <th>Descripción</th>
804
+ <th>Tipo de Dato</th>
805
+ <th>Valores posibles / Ejemplo</th>
806
+ </tr>
807
+ <tr>
808
+ <td><b>MININSTALLMENTS</b></td>
809
+ <td>No</td>
810
+ <td>Mínimo de cuotas a mostrar en el formulario</td>
811
+ <td>Numérico</td>
812
+ <td>3</td>
813
+ </tr>
814
+ <tr>
815
+ <td><b>MAXINSTALLMENTS</b></td>
816
+ <td>No</td>
817
+ <td>Máximo de cuotas a mostrar en el formulario</td>
818
+ <td>Numérico</td>
819
+ <td>9</td>
820
+ </tr>
821
+ </table>
822
+
823
+ ##### Ejemplo
824
+
825
+ ```ruby
826
+ .............................................
827
+ optionsSAR_operacion[:MAXINSTALLMENTS] = "6"
828
+ optionsSAR_operacion[:MININSTALLMENTS] = "3"
829
+ .............................................
830
+ ```
831
+
832
+ <a name="filtromp"></a>
833
+ ##### Filtrado de Medios de Pago
834
+ Mediante esta funcionalidad es posible filtrar los medios de pago habilitados en el formulario de pago. Se debe pasar en la llamada al servicio SendAuthorizeRequest un parámetro adicional con los ids de los medio de pago que se desean habilitar, los cuales pueden consultarse mediante el método de [Descubrimiento de Medios de Pago](#discover)
835
+
836
+ <table>
837
+ <tr>
838
+ <th>Campo</th>
839
+ <th>Requerido</th>
840
+ <th>Descripción</th>
841
+ <th>Tipo de Dato</th>
842
+ <th>Valores posibles / Ejemplo</th>
843
+ </tr>
844
+ <tr>
845
+ <td><b>AVAILABLEPAYMENTMETHODSIDS</b></td>
846
+ <td>No</td>
847
+ <td>Lista de los ids de medios de pago habilitados separados por #</td>
848
+ <td>Alfanumérico</td>
849
+ <td>1#42#500</td>
850
+ </tr>
851
+ </table>
852
+
853
+ ##### Ejemplo
854
+
855
+ ```ruby
856
+ .............................................
857
+ optionsSAR_operacion[:AVAILABLEPAYMENTMETHODSIDS] = "1#42#500"
858
+ .............................................
859
+ ```
860
+
861
+ [<sub>Volver a inicio</sub>](#inicio)
862
+ <br>
863
+
864
+ <a name="timeout"></a>
865
+ ##### Tiempo de vida de la transacción
866
+ Es posible setear el tiempo máximo disponible para que el cliente complete el pago en el formulario, el valor por defecto es de 30 minutos. El rango posible es de 5 minutos a 6 horas. Los valores deben ser expresados en milisegundos
867
+
868
+ <table>
869
+ <tr>
870
+ <th>Campo</th>
871
+ <th>Requerido</th>
872
+ <th>Descripción</th>
873
+ <th>Tipo de Dato</th>
874
+ <th>Valores posibles / Ejemplo</th>
875
+ </tr>
876
+ <tr>
877
+ <td><b>TIMEOUT</b></td>
878
+ <td>No</td>
879
+ <td>Tiempo de vida de la transacción en milisegundos</td>
880
+ <td>Numérico</td>
881
+ <td>1800000</td>
882
+ </tr>
883
+ </table>
884
+
885
+
886
+ ##### Ejemplo
887
+
888
+ ```ruby
889
+ .............................................
890
+ optionsSAR_operacion[:TIMEOUT] = 10*60*1000
891
+ .............................................
892
+ ```
893
+
894
+ [<sub>Volver a inicio</sub>](#inicio)
895
+ <br>
896
+
897
+
898
+
899
+ <a name="test"></a>
900
+ #### Modo Test
901
+
902
+ El SDK-RUBY permite trabajar con los ambiente de desarrollo y de produccion de Todo Pago.<br>
903
+
904
+ Para utlilizar el modo test se debe pasar un end point de prueba (provisto por TODO PAGO).
905
+ ```ruby
906
+ conector_test = TodoPagoConector.new(j_header_http_test, j_wsdls_test, end_point_test)
907
+ ```
908
+
909
+ [<sub>Volver a inicio</sub>](#inicio)
910
+ <br>
911
+
912
+
913
+ <a name="caracteristicas"></a>
914
+ ## Características
915
+
916
+ <a name="status"></a>
917
+ #### Status de la Operación
918
+ ![estado](https://raw.githubusercontent.com/TodoPago/imagenes/master/README.img/secuencia-status.jpg)
919
+
920
+
921
+ La SDK cuenta con un método para consultar el status de la transacción desde la misma SDK. El método se utiliza de la siguiente manera:
922
+
923
+ <table>
924
+ <tr>
925
+ <th>Campo</th>
926
+ <th>Requerido</th>
927
+ <th>Descripción</th>
928
+ <th>Tipo de Dato</th>
929
+ <th>Valores posibles / Ejemplo</th>
930
+ </tr>
931
+ <tr>
932
+ <td><b>MERCHANT</b></td>
933
+ <td>Sí</td>
934
+ <td>Código de comercio o cuenta provisto por TodoPago</td>
935
+ <td>Alfanumérico de 8 caracteres</td>
936
+ <td>12345678</td>
937
+ </tr>
938
+ <tr>
939
+ <td><b>OPERATIONID</b></td>
940
+ <td>Sí</td>
941
+ <td>Identificación de la transacción para el Comercio. Debe ser distinto para cada operación.</td>
942
+ <td>Alfanumérico de 1 a 40 caracteres.</td>
943
+ <td>141120084707</td>
944
+ </tr>
945
+ </table>
946
+
947
+ ```ruby
948
+ optionsOperations=Hash.new
949
+ optionsOperations[:MERCHANT]= merchant #merchant es una variable
950
+ optionsOperations[:OPERATIONID]= operationid #operationid es una variable (id de la opereacion)
951
+ conector.getOperations(optionsOperations)
952
+ ```
953
+
954
+ El siguiente método retornará el status actual de la transacción en Todopago.
955
+
956
+ <table>
957
+ <tr>
958
+ <th>Campo</th>
959
+ <th>Requerido</th>
960
+ <th>Descripción</th>
961
+ <th>Tipo de Dato</th>
962
+ <th>Valores posibles / Ejemplo</th>
963
+ </tr>
964
+ <tr>
965
+ <td><b>RESULTCODE</b></td>
966
+ <td>Sí</td>
967
+ <td>Número identificador del estado en el que se encuentra la transacción</td>
968
+ <td>Numérico</td>
969
+ <td></td>
970
+ </tr>
971
+ <tr>
972
+ <td><b>RESULTMESSAGE</b></td>
973
+ <td>Sí</td>
974
+ <td>Describe el estado en el que se encuentra la transacción</td>
975
+ <td>Alfanumérico</td>
976
+ <td></td>
977
+ </tr>
978
+ <tr>
979
+ <td><b>DATETIME</b></td>
980
+ <td>No</td>
981
+ <td></td>
982
+ <td></td>
983
+ <td>2015-05-13T14:11:38.287+00:00</td>
984
+ </tr>
985
+ <tr>
986
+ <td><b>OPERATIONID</b></td>
987
+ <td>Sí</td>
988
+ <td>Identificación de la transacción para el Comercio. Debe ser distinto para cada operación.</td>
989
+ <td>Alfanumérico de 1 a 40 caracteres.</td>
990
+ <td>141120084707</td>
991
+ </tr>
992
+ <tr>
993
+ <td><b>CURRENCYCODE</b></td>
994
+ <td>Sí</td>
995
+ <td>Código de moneda utilizado en la transacción. Por el momento solo 32 (Pesos</td>
996
+ <td>Numérico/td>
997
+ <td>32</td>
998
+ </tr>
999
+ <tr>
1000
+ <td><b>AMOUNT</b></td>
1001
+ <td>Sí</td>
1002
+ <td>Importe original en Pesos de la transacción.</td>
1003
+ <td>Numérico con 9 dígitos con hasta 2 decimales 999999[.CC]
1004
+ Usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales.</td>
1005
+ <td>$125,38 -> 125.38 <br />$12 -> 12.00</td>
1006
+ </tr>
1007
+ <tr>
1008
+ <td><b>AMOUNTBUYER</b></td>
1009
+ <td>Sí</td>
1010
+ <td>Importe final en Pesos de la transacción.</td>
1011
+ <td>Numérico con 9 dígitos con hasta 2 decimales 999999[.CC]
1012
+ Usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales.</td>
1013
+ <td>$125,38 -> 125.38 <br />$12 -> 12.00</td>
1014
+ </tr>
1015
+ <tr>
1016
+ <td><b>TYPE</b></td>
1017
+ <td>Sí</td>
1018
+ <td>Tipo de Operación, en el caso del GetStatus siempre será *compra_online*</td>
1019
+ <td>Alfanumérico</td>
1020
+ <td>compra_online</td>
1021
+ </tr>
1022
+ <tr>
1023
+ <td><b>INSTALLMENTPAYMENTS</b></td>
1024
+ <td>No</td>
1025
+ <td>Código de autorización generado por el medio de pago</td>
1026
+ <td>Decimal de hasta dos dígitos.</td>
1027
+ <td>01, 02, 06, 12, etc.</td>
1028
+ </tr>
1029
+ <tr>
1030
+ <td><b>CUSTOMEREMAIL</b></td>
1031
+ <td>Sí</td>
1032
+ <td>Mail del usuario al que se le emite la factura</td>
1033
+ <td>Alfanumérico de 100 caracteres.</td>
1034
+ <td>Ejemplo: cosme@fulanito.com</td>
1035
+ </tr>
1036
+ <tr>
1037
+ <td><b>IDENTIFICATIONTYPE</b></td>
1038
+ <td>No</td>
1039
+ <td>Tipo de documento</td>
1040
+ <td></td>
1041
+ <td>DNI<br />CI<br />LE<br />LC</td>
1042
+ </tr>
1043
+ <tr>
1044
+ <td><b>IDENTIFICATION</b></td>
1045
+ <td>No</td>
1046
+ <td>Número de documento</td>
1047
+ <td>Numérico</td>
1048
+ <td></td>
1049
+ </tr>
1050
+ <tr>
1051
+ <td><b>CARDNUMBER</b></td>
1052
+ <td>No</td>
1053
+ <td>Número de Tarjeta, enmascarado según normativas nacionales</td>
1054
+ <td>alfanumérico de 20 caracteres</td>
1055
+ <td></td>
1056
+ </tr>
1057
+ <tr>
1058
+ <td><b>TITULAR</b></td>
1059
+ <td>No</td>
1060
+ <td>Nombre del titular de la tarjeta.</td>
1061
+ <td>Alfanumérico</td>
1062
+ <td></td>
1063
+ </tr>
1064
+ <tr>
1065
+ <td><b>NROTICKET</b></td>
1066
+ <td>No</td>
1067
+ <td>Numero de Ticket o Voucher</td>
1068
+ <td>Numérico de Hasta 4 dígitos</td>
1069
+ <td></td>
1070
+ </tr>
1071
+ </table>
1072
+
1073
+ Además, se puede conocer el estado de las transacciones a través del portal [www.todopago.com.ar](http://www.todopago.com.ar/). Desde el portal se verán los estados "Aprobada" y "Rechazada". Si el método de pago elegido por el comprador fue Pago Fácil o RapiPago, se podrán ver en estado "Pendiente" hasta que el mismo sea pagado.
1074
+
1075
+ <ins><strong>Ejemplo de Respuesta</strong></ins>
1076
+ ```php
1077
+ {
1078
+ 'Operations' =
1079
+ {
1080
+ 'RESULTCODE' = string '999' (length=3)
1081
+ 'RESULTMESSAGE' = string 'RECHAZADA' (length=9)
1082
+ 'DATETIME' = string '2015-05-13T14:11:38.287+00:00' (length=29)
1083
+ 'OPERATIONID' = string '01' (length=2)
1084
+ 'CURRENCYCODE' = string '32' (length=2)
1085
+ 'AMOUNT' = int 54
1086
+ 'TYPE' = string 'compra_online' (length=13)
1087
+ 'INSTALLMENTPAYMENTS' = string '4' (length=1)
1088
+ 'CUSTOMEREMAIL' = string 'cosme@fulanito.com' (length=18)
1089
+ 'IDENTIFICATIONTYPE' = string 'DNI' (length=3)
1090
+ 'IDENTIFICATION' = string '1212121212' (length=10)
1091
+ 'CARDNUMBER' = string '12121212XXXXXX1212' (length=18)
1092
+ 'CARDHOLDERNAME' = string 'Cosme Fulanito' (length=14)
1093
+ 'TICKETNUMBER' = int 0
1094
+ 'AUTHORIZATIONCODE' = null
1095
+ 'BARCODE' = null
1096
+ 'COUPONEXPDATE' = null
1097
+ 'COUPONSECEXPDATE' = null
1098
+ 'COUPONSUBSCRIBER' = null
1099
+ }
1100
+ }
1101
+ ```
1102
+
1103
+ <a name="discover"></a>
1104
+ #### Descubrimiento de Medios de Pago
1105
+
1106
+ La SDK cuenta con un método para obtener todos los medios de pago habilitados en TodoPago.
1107
+
1108
+ ```ruby
1109
+ response = tpc.discoverPaymentMethods()
1110
+ ```
1111
+
1112
+ <a name="statusdate"></a>
1113
+ #### Consulta de operaciones por rango de tiempo
1114
+ En este caso hay que llamar a **getByRangeDateTime()** y devolverá todas las operaciones realizadas en el rango de fechas dado
1115
+
1116
+ Campo | Requerido | Descripción | Tipo de Dato | Valores posibles / Ejemplo
1117
+ -----------|------------|---------------------------------------------|--------------|----------------------------------
1118
+ MERCHANT | Sí | Nro identificador del comercio | numérico | 12305
1119
+ STARTDATE | Sí | Fecha y hora desde | date | date("Y-m-d", time()-60*60*24*30)
1120
+ ENDDATE | Sí | Fecha y hora hasta | date | date("Y-m-d", time())
1121
+ PAGENUMBER | Sí | Número de página a la que se desea acceder* | entero | 2
1122
+
1123
+ _* Este método devuelve páginas de 5 transacciones, por medio del campo **PAGENUMBER** se puede indicar a que página se desea acceder._
1124
+
1125
+
1126
+ ```ruby
1127
+ optionsGBRDT=Hash.new
1128
+ optionsGBRDT[:Merchant]= "2866"
1129
+ optionsGBRDT[:STARTDATE]= "2016-01-01"
1130
+ optionsGBRDT[:ENDDATE]= "2016-02-19"
1131
+ optionsGBRDT[:PAGENUMBER] = "1"
1132
+
1133
+ response = tpc.getByRangeDateTime(optionsGBRDT)
1134
+ ```
1135
+
1136
+ <a name="devolucion"></a>
1137
+ #### Devolución
1138
+ ![devolucion parcial](https://raw.githubusercontent.com/TodoPago/imagenes/master/README.img/secuencia-devolucion-total.jpg)
1139
+
1140
+ El SDK dispone de métodos para realizar la devolución, de una transacción realizada a traves de TodoPago.
1141
+
1142
+ Se debe llamar al método ```voidRequest``` de la siguiente manera:
1143
+
1144
+ Campo | Requerido | Descripción | Tipo de Dato | Valores posibles / Ejemplo
1145
+ -----------------|------------|--------------------------------------------------------------------- |--------------|---------------------------
1146
+ Security | Sí | API Key del comercio asignada por TodoPago | alfanumérico | 837BE68A892F06C17B944F344AEE8F5F
1147
+ Merchant | Sí | Nro de comercio asignado por TodoPago | numérico | 12345
1148
+ RequestKey | No* | RequestKey devuelto como respuesta del servicio SendAutorizeRequest | alfanumérico | 6d2589f2-37e6-1334-7565-3dc19404480c
1149
+ AuthorizationKey | No* | AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer | alfanumérico | 4a2569a2-38e6-4589-1564-4480c3dc1940
1150
+
1151
+ ```ruby
1152
+
1153
+ options = Hash.new
1154
+
1155
+ options[:Security] = "837BE68A892F06C17B944F344AEE8F5F", #API Key del comercio asignada por TodoPago
1156
+ options[:Merchant] = "35", #Merchant o Nro de comercio asignado por TodoPago
1157
+ options[:RequestKey] = "6d2589f2-37e6-1334-7565-3dc19404480c" #RequestKey devuelto como respuesta del servicio SendAutorizeRequest
1158
+
1159
+ resp = tpc.voidRequest(options)
1160
+ ```
1161
+
1162
+ También se puede llamar al método ```voidRequest``` de la esta otra manera:
1163
+ ```ruby
1164
+
1165
+ options[:Security] = "837BE68A892F06C17B944F344AEE8F5F", #API Key del comercio asignada por TodoPago
1166
+ options[:Merchant] = "35", #Merchant o Nro de comercio asignado por TodoPago
1167
+ options[:AuthorizationKey] = "6d2589f2-37e6-1334-7565-3dc19404480c" #AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer
1168
+
1169
+ resp = tpc.voidRequest(options)
1170
+ ```
1171
+
1172
+ **Respuesta del servicio:**
1173
+ Si la operación fue realizada correctamente se informará con un código 2011 y un mensaje indicando el éxito de la operación.
1174
+
1175
+ Campo | Requerido | Descripción |Tipo de Dato | Valores posibles / Ejemplo
1176
+ --------------|-------------|--------------------------------------------------|--------------|----------------------------------
1177
+ StatusCode | Sí |Número de identificación del motivo del resultado | Numérico | 2011
1178
+ StatusMessage | Sí |Resultado de la devolución | Alfanumérico | Operación realizada correctamente
1179
+
1180
+ Si la operación fue realizada correctamente se informará con un código 2011 y un mensaje indicando el éxito de la operación.
1181
+
1182
+ ``` ruby
1183
+ {:envelope=>{:body=>{:return_response=>{:status_code=>"2011", :status_message=>"TX OK", :authorization_key=>"318974f2-4866-d8e7-9622-9ac21aec0df2", :authorizationcode=>"2011", :"@xmlns:api"=>"http://api.todopago.com.ar"}}, :"@xmlns:soapenv"=>"http://schemas.xmlsoap.org/soap/envelope/"}}
1184
+ ```
1185
+ <br>
1186
+
1187
+ <a name="devolucionparcial"></a>
1188
+ #### Devolución parcial
1189
+ ![devolucion parcial](https://raw.githubusercontent.com/TodoPago/imagenes/master/README.img/secuencia-devolucion-parcial.jpg)
1190
+
1191
+ La SDK dispone de métodos para realizar la devolución parcial, de una transacción realizada a traves de TodoPago.
1192
+
1193
+ _Nota: Para el caso de promociones con costo financiero, se deberá enviar el monto a devolver en base al valor original de la transacción y no del monto finalmente cobrado. TodoPago se encargará de devolver el porcentaje del costo financiero correspondiente a la devolución parcial._
1194
+
1195
+ Se debe llamar al método ```returnRequest``` de la siguiente manera:
1196
+
1197
+ Campo | Requerido | Descripción | Tipo de Dato | Valores posibles / Ejemplo
1198
+ ----------- |------------|--------------------------------------------------------------------------|-------------------------------------------------------------------------------|---------------------------
1199
+ Security | Sí | API Key del comercio asignada por TodoPago | alfanumérico | 837BE68A892F06C17B944F344AEE8F5F
1200
+ Merchant | Sí | Nro de comercio asignado por TodoPago | numérico | 12345
1201
+ RequestKey | No* | RequestKey devuelto como respuesta del servicio SendAutorizeRequest | alfanumérico | 6d2589f2-37e6-1334-7565-3dc19404480c
1202
+ AuthorizationKey | No* | AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer | alfanumérico | 4a2569a2-38e6-4589-1564-4480c3dc1940
1203
+ AMOUNT | No | Monto a devolver, si no se envía, se trata de una devolución total | string usando . como separador decimal, incluyendo SIEMPRE 2 cifras decimales | 23.50
1204
+
1205
+ _*Es requerida la presencia de sólo uno de estos 2 campos_
1206
+
1207
+ ```ruby
1208
+
1209
+ options = Hash.new
1210
+
1211
+ options[:Security]= "837BE68A892F06C17B944F344AEE8F5F", #API Key del comercio asignada por TodoPago
1212
+ options[:Merchant] ="35", #Merchant o Nro de comercio asignado por TodoPago
1213
+ options[:RequestKey] = "6d2589f2-37e6-1334-7565-3dc19404480c" #RequestKey devuelto como respuesta del servicio SendAutorizeRequest
1214
+ options[:AMOUNT] = "23.50" #Opcional. Monto a devolver, si no se envía, se trata de una devolución total
1215
+
1216
+ resp = tpc.returnRequest(options)
1217
+ ```
1218
+
1219
+ También se puede llamar al método ```returnRequest``` de la esta otra manera:
1220
+ ```ruby
1221
+ options = Hash.new
1222
+
1223
+ options[:Security] = "837BE68A892F06C17B944F344AEE8F5F", #API Key del comercio asignada por TodoPago
1224
+ options[:Merchant] = "35", #Merchant o Nro de comercio asignado por TodoPago
1225
+ options[:AuthorizationKey] = "6d2589f2-37e6-1334-7565-3dc19404480c" #AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer
1226
+ options[:AMOUNT] = "1.00" #Opcional. Monto a devolver, si no se envía, se trata de una devolución total
1227
+
1228
+ resp = tpc.returnRequest(options)
1229
+ ```
1230
+
1231
+ **Respuesta de servicio:**
1232
+
1233
+ Campo | Requerido | Descripción |Tipo de Dato | Valores posibles / Ejemplo
1234
+ --------------|-------------|--------------------------------------------------|--------------|----------------------------------
1235
+ StatusCode | Sí |Número de identificación del motivo del resultado | Numérico | 2011
1236
+ StatusMessage | Sí |Resultado de la devolución | Alfanumérico | Operación realizada correctamente
1237
+
1238
+ Si la operación fue realizada correctamente se informará con un código 2011 y un mensaje indicando el éxito de la operación.
1239
+
1240
+ ``` ruby
1241
+ {:envelope=>{:body=>{:return_response=>{:status_code=>"2011", :status_message=>"TX OK", :authorization_key=>"318974f2-4866-d8e7-9622-9ac21aec0df2", :authorizationcode=>"2011", :"@xmlns:api"=>"http://api.todopago.com.ar"}}, :"@xmlns:soapenv"=>"http://schemas.xmlsoap.org/soap/envelope/"}}
1242
+ ```
1243
+ <a name="formhidrido"></a>
1244
+ #### Formulario híbrido
1245
+
1246
+ **Conceptos básicos**<br>
1247
+ El formulario híbrido, es una alternativa al medio de pago actual por redirección al formulario externo de TodoPago.<br>
1248
+ Con el mismo, se busca que el comercio pueda adecuar el look and feel del formulario a su propio diseño.
1249
+
1250
+ **Librería**
1251
+ El formulario requiere incluir en la página una librería Javascript de TodoPago.<br>
1252
+ El endpoint depende del entorno:
1253
+ + Desarrollo: https://developers.todopago.com.ar/resources/v2/TPBSAForm.min.js
1254
+ + Producción: https://forms.todopago.com.ar/resources/v2/TPBSAForm.min.js
1255
+
1256
+ **Restricciones y libertades en la implementación**
1257
+
1258
+ + Por ningún motivo podrá bajarse el javascript provisto ni realizar cambios en el mismo. Siempre deberá ser tomado de los servidores de TodoPago.
1259
+ + Ninguno de los campos del formulario podrá contar con el atributo name.
1260
+ + Se deberá proveer de manera obligatoria un botón para gestionar el pago con Billetera Todo Pago.
1261
+ + Todos los elementos de tipo <option> son completados por la API de Todo Pago.
1262
+ + Los campos tienen un id por defecto. Si se prefiere utilizar otros ids se deberán especificar los
1263
+ mismos cuando se inicialice el script de Todo Pago.
1264
+ + Pueden aplicarse todos los detalles visuales que se crean necesarios, la API de Todo Pago no
1265
+ altera los atributos class y style.
1266
+ + Puede utilizarse la API para setear los atributos placeholder del formulario, para ello deberá
1267
+ especificar dichos placeholders en la inicialización del formulario "window.TPFORMAPI.hybridForm.setItem". En caso de que no se especifiquen los placeholders se usarán los valores por defecto de la API.
1268
+
1269
+ **HTML del formulario**
1270
+
1271
+ El formulario implementado debe contar al menos con los siguientes campos.
1272
+
1273
+ ```html
1274
+ <body>
1275
+ <select id="formaDePagoCbx"></select>
1276
+ <select id="bancoCbx"></select>
1277
+ <select id="promosCbx"></select>
1278
+ <label id="labelPromotionTextId"></label>
1279
+ <input id="numeroTarjetaTxt"/>
1280
+ <input id="mesTxt"/>
1281
+ <input id="anioTxt"/>
1282
+ <input id="codigoSeguridadTxt"/>
1283
+ <label id="labelCodSegTextId"></label>
1284
+ <input id="apynTxt"/>
1285
+ <select id="tipoDocCbx"></select>
1286
+ <input id="nroDocTxt"/>
1287
+ <input id="emailTxt"/><br/>
1288
+ <button id="MY_btnPagarConBilletera"/>
1289
+ <button id="MY_btnConfirmarPago"/>
1290
+ </body>
1291
+ ```
1292
+
1293
+ **Inizialización y parámetros requeridos**<br>
1294
+ Para inicializar el formulario se usa window.TPFORMAPI.hybridForm.initForm. El cual permite setear los elementos y ids requeridos.
1295
+
1296
+ Para inicializar un ítem de pago, es necesario llamar a window.TPFORMAPI.hybridForm.setItem. Este requiere obligatoriamente el parámetro publicKey que corresponde al PublicRequestKey (entregado por el SAR).
1297
+ Se sugiere agregar los parámetros usuario, e-mail, tipo de documento y numero.
1298
+
1299
+ **Javascript**
1300
+ ```js
1301
+ window.TPFORMAPI.hybridForm.initForm({
1302
+ callbackValidationErrorFunction: 'validationCollector',
1303
+ callbackCustomSuccessFunction: 'customPaymentSuccessResponse',
1304
+ callbackCustomErrorFunction: 'customPaymentErrorResponse',
1305
+ callbackBilleteraFunction: 'billeteraPaymentResponse',
1306
+ botonPagarId: 'MY_btnConfirmarPago',
1307
+ botonPagarConBilleteraId: 'MY_btnPagarConBilletera',
1308
+ modalCssClass: 'modal-class',
1309
+ modalContentCssClass: 'modal-content',
1310
+ beforeRequest: 'initLoading',
1311
+ afterRequest: 'stopLoading'
1312
+ });
1313
+
1314
+ window.TPFORMAPI.hybridForm.setItem({
1315
+ publicKey: 'taf08222e-7b32-63d4-d0a6-5cabedrb5782', //obligatorio
1316
+ defaultNombreApellido: 'Usuario',
1317
+ defaultNumeroDoc: 20234211,
1318
+ defaultMail: 'todopago@mail.com',
1319
+ defaultTipoDoc: 'DNI'
1320
+ });
1321
+
1322
+ //callbacks de respuesta del pago
1323
+ function validationCollector(parametros) {
1324
+ }
1325
+ function billeteraPaymentResponse(response) {
1326
+ }
1327
+ function customPaymentSuccessResponse(response) {
1328
+ }
1329
+ function customPaymentErrorResponse(response) {
1330
+ }
1331
+ function initLoading() {
1332
+ }
1333
+ function stopLoading() {
1334
+ }
1335
+ ```
1336
+
1337
+ **Callbacks**<br>
1338
+ El formulario define callbacks javascript, que son llamados según el estado y la información del pago realizado:
1339
+ + billeteraPaymentResponse: Devuelve response si el pago con billetera se realizó correctamente.
1340
+ + customPaymentSuccessResponse: Devuelve response si el pago se realizo correctamente.
1341
+ + customPaymentErrorResponse: Si hubo algún error durante el proceso de pago, este devuelve el response con el código y mensaje correspondiente.
1342
+
1343
+ [<sub>Volver a inicio</sub>](#inicio)
1344
+
1345
+ <a name="credenciales"></a>
1346
+ #### Obtener credenciales
1347
+ ![credenciales](https://raw.githubusercontent.com/TodoPago/imagenes/master/README.img/secuencia-credenciales.jpg)
1348
+
1349
+ El SDK permite obtener las credenciales "Authentification", "MerchandId" y "Security" de la cuenta de Todo Pago, ingresando el usuario y contraseña.<br>
1350
+ Esta funcionalidad es útil para obtener los parámetros de configuración dentro de la implementación.
1351
+
1352
+ - Crear una instancia de la clase User:
1353
+ ```ruby
1354
+ u = User.new("email@ejemplo.com", "password1")
1355
+ response = conector.getCredentials(u)
1356
+ ```
1357
+
1358
+ **Observación**: El Security se obtiene a partir de apiKey, eliminando TODOPAGO de este último.
1359
+
1360
+ [<sub>Volver a inicio</sub>](#inicio)
1361
+ <br>
1362
+
1363
+ <a name="tablareferencia"></a>
1364
+ ## Tablas de Referencia
1365
+ ###### [Provincias](#p)
1366
+
1367
+ <p>Los siguientes códigos son utilizados para control de fraude y para el cálculo de retenciones del Impuesto sobre los Ingresos Brutos.</p>
1368
+ <table>
1369
+ <tr><th>Provincia</th><th>Código</th></tr>
1370
+ <tr><td>CABA</td><td>C</td></tr>
1371
+ <tr><td>Buenos Aires</td><td>B</td></tr>
1372
+ <tr><td>Catamarca</td><td>K</td></tr>
1373
+ <tr><td>Chaco</td><td>H</td></tr>
1374
+ <tr><td>Chubut</td><td>U</td></tr>
1375
+ <tr><td>Córdoba</td><td>X</td></tr>
1376
+ <tr><td>Corrientes</td><td>W</td></tr>
1377
+ <tr><td>Entre Ríos</td><td>E</td></tr>
1378
+ <tr><td>Formosa</td><td>P</td></tr>
1379
+ <tr><td>Jujuy</td><td>Y</td></tr>
1380
+ <tr><td>La Pampa</td><td>L</td></tr>
1381
+ <tr><td>La Rioja</td><td>F</td></tr>
1382
+ <tr><td>Mendoza</td><td>M</td></tr>
1383
+ <tr><td>Misiones</td><td>N</td></tr>
1384
+ <tr><td>Neuquén</td><td>Q</td></tr>
1385
+ <tr><td>Río Negro</td><td>R</td></tr>
1386
+ <tr><td>Salta</td><td>A</td></tr>
1387
+ <tr><td>San Juan</td><td>J</td></tr>
1388
+ <tr><td>San Luis</td><td>D</td></tr>
1389
+ <tr><td>Santa Cruz</td><td>Z</td></tr>
1390
+ <tr><td>Santa Fe</td><td>S</td></tr>
1391
+ <tr><td>Santiago del Estero</td><td>G</td></tr>
1392
+ <tr><td>Tierra del Fuego</td><td>V</td></tr>
1393
+ <tr><td>Tucumán</td><td>T</td></tr>
1394
+ </table>
1395
+
1396
+ [<sub>Volver a inicio</sub>](#inicio)
1397
+
1398
+ <a name="codigoerrores"></a>
1399
+ ## Tabla de errores operativos
1400
+
1401
+ <table>
1402
+ <tr><th>Id mensaje</th><th>Mensaje</th></tr>
1403
+ <tr><td>-1</td><td>Tu compra fue exitosa.</td></tr>
1404
+ <tr><td>1081</td><td>Tu saldo es insuficiente para realizar la transacción.</td></tr>
1405
+ <tr><td>1100</td><td>El monto ingresado es menor al mínimo permitido</td></tr>
1406
+ <tr><td>1101</td><td>El monto ingresado supera el máximo permitido.</td></tr>
1407
+ <tr><td>1102</td><td>La tarjeta ingresada no corresponde al Banco indicado. Revisalo.</td></tr>
1408
+ <tr><td>1104</td><td>El precio ingresado supera al máximo permitido.</td></tr>
1409
+ <tr><td>1105</td><td>El precio ingresado es menor al mínimo permitido.</td></tr>
1410
+ <tr><td>2010</td><td>En este momento la operación no pudo ser realizada. Por favor intentá más tarde. Volver a Resumen.</td></tr>
1411
+ <tr><td>2031</td><td>En este momento la validación no pudo ser realizada, por favor intentá más tarde.</td></tr>
1412
+ <tr><td>2050</td><td>Lo sentimos, el botón de pago ya no está disponible. Comunicate con tu vendedor.</td></tr>
1413
+ <tr><td>2051</td><td>La operación no pudo ser procesada. Por favor, comunicate con tu vendedor.</td></tr>
1414
+ <tr><td>2052</td><td>La operación no pudo ser procesada. Por favor, comunicate con tu vendedor.</td></tr>
1415
+ <tr><td>2053</td><td>La operación no pudo ser procesada. Por favor, intentá más tarde. Si el problema persiste comunicate con tu vendedor</td></tr>
1416
+ <tr><td>2054</td><td>Lo sentimos, el producto que querés comprar se encuentra agotado por el momento. Por favor contactate con tu vendedor.</td></tr>
1417
+ <tr><td>2056</td><td>La operación no pudo ser procesada. Por favor intentá más tarde.</td></tr>
1418
+ <tr><td>2057</td><td>La operación no pudo ser procesada. Por favor intentá más tarde.</td></tr>
1419
+ <tr><td>2059</td><td>La operación no pudo ser procesada. Por favor intentá más tarde.</td></tr>
1420
+ <tr><td>90000</td><td>La cuenta destino de los fondos es inválida. Verificá la información ingresada en Mi Perfil.</td></tr>
1421
+ <tr><td>90001</td><td>La cuenta ingresada no pertenece al CUIT/ CUIL registrado.</td></tr>
1422
+ <tr><td>90002</td><td>No pudimos validar tu CUIT/CUIL. Comunicate con nosotros <a href="#contacto" target="_blank">acá</a> para más información.</td></tr>
1423
+ <tr><td>99005</td><td>Tu compra no pudo realizarse. Iniciala nuevamente.</td></tr>
1424
+ <tr><td>99900</td><td>El pago fue realizado exitosamente</td></tr>
1425
+ <tr><td>99901</td><td>No hemos encontrado tarjetas vinculadas a tu Billetera. Podés adherir medios de pago desde www.todopago.com.ar</td></tr>
1426
+ <tr><td>99902</td><td>No se encontro el medio de pago seleccionado</td></tr>
1427
+ <tr><td>99903</td><td>Lo sentimos, hubo un error al procesar la operación. Por favor reintentá más tarde.</td></tr>
1428
+ <tr><td>99904</td><td>Tu compra no puede ser realizada. Comunicate con tu vendedor.</td></tr>
1429
+ <tr><td>99953</td><td>Tu compra no pudo realizarse. Iniciala nuevamente o utilizá otro medio de pago.</td></tr>
1430
+ <tr><td>99960</td><td>Esta compra requiere autorización de VISA. Comunicate al número que se encuentra al dorso de tu tarjeta.</td></tr>
1431
+ <tr><td>99961</td><td>Esta compra requiere autorización de AMEX. Comunicate al número que se encuentra al dorso de tu tarjeta.</td></tr>
1432
+ <tr><td>99970</td><td>Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde.</td></tr>
1433
+ <tr><td>99971</td><td>Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde.</td></tr>
1434
+ <tr><td>99978</td><td>Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde.</td></tr>
1435
+ <tr><td>99979</td><td>Lo sentimos, el pago no pudo ser procesado.</td></tr>
1436
+ <tr><td>99980</td><td>Ya realizaste un pago en este sitio por el mismo importe. Si querés realizarlo nuevamente esperá 5 minutos.</td></tr>
1437
+ <tr><td>99982</td><td>Tu compra no pudo ser procesada. Iniciala nuevamente utilizando otro medio de pago.</td></tr>
1438
+ <tr><td>99983</td><td>Lo sentimos, el medio de pago no permite la cantidad de cuotas ingresadas. Por favor intentá más tarde.</td></tr>
1439
+ <tr><td>99984</td><td>Lo sentimos, el medio de pago seleccionado no opera en cuotas.</td></tr>
1440
+ <tr><td>99985</td><td>Lo sentimos, el pago no pudo ser procesado.</td></tr>
1441
+ <tr><td>99986</td><td>Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde.</td></tr>
1442
+ <tr><td>99987</td><td>Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde.</td></tr>
1443
+ <tr><td>99988</td><td>Lo sentimos, momentaneamente el medio de pago no se encuentra disponible. Por favor intentá más tarde.</td></tr>
1444
+ <tr><td>99989</td><td>La tarjeta ingresada no está habilitada. Comunicate con la entidad emisora de la tarjeta para verificar el incoveniente.</td></tr>
1445
+ <tr><td>99990</td><td>La tarjeta ingresada está vencida. Por favor seleccioná otra tarjeta o actualizá los datos.</td></tr>
1446
+ <tr><td>99991</td><td>Los datos informados son incorrectos. Por favor ingresalos nuevamente.</td></tr>
1447
+ <tr><td>99992</td><td>La fecha de vencimiento es incorrecta. Por favor seleccioná otro medio de pago o actualizá los datos.</td></tr>
1448
+ <tr><td>99993</td><td>La tarjeta ingresada no está vigente. Por favor seleccioná otra tarjeta o actualizá los datos.</td></tr>
1449
+ <tr><td>99994</td><td>El saldo de tu tarjeta no te permite realizar esta compra. Iniciala nuevamente utilizando otro medio de pago.</td></tr>
1450
+ <tr><td>99995</td><td>La tarjeta ingresada es invalida. Seleccioná otra tarjeta para realizar el pago.</td></tr>
1451
+ <tr><td>99996</td><td>La operación fué rechazada por el medio de pago porque el monto ingresado es inválido.</td></tr>
1452
+ <tr><td>99997</td><td>Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde.</td></tr>
1453
+ <tr><td>99998</td><td>Lo sentimos, la operación fue rechazada. Comunicate con la entidad emisora de la tarjeta para verificar el incoveniente o seleccioná otro medio de pago.</td></tr>
1454
+ <tr><td>99999</td><td>Lo sentimos, la operación no pudo completarse. Comunicate con la entidad emisora de la tarjeta para verificar el incoveniente o seleccioná otro medio de pago.</td></tr>
1455
+ </table>
1456
+
1457
+ [<sub>Volver a inicio</sub>](#inicio)
1458
+
1459
+ <a name="interrores"></a>
1460
+ ## Tabla de errores de integración
1461
+
1462
+ <table>
1463
+ <tr><td>**Id mensaje**</td><td>**Descripción**</td></tr>
1464
+ <tr><td>98001 </td><td>ERROR: El campo CSBTCITY es requerido</td></tr>
1465
+ <tr><td>98002 </td><td>ERROR: El campo CSBTCOUNTRY es requerido</td></tr>
1466
+ <tr><td>98003 </td><td>ERROR: El campo CSBTCUSTOMERID es requerido</td></tr>
1467
+ <tr><td>98004 </td><td>ERROR: El campo CSBTIPADDRESS es requerido</td></tr>
1468
+ <tr><td>98005 </td><td>ERROR: El campo CSBTEMAIL es requerido</td></tr>
1469
+ <tr><td>98006 </td><td>ERROR: El campo CSBTFIRSTNAME es requerido</td></tr>
1470
+ <tr><td>98007 </td><td>ERROR: El campo CSBTLASTNAME es requerido</td></tr>
1471
+ <tr><td>98008 </td><td>ERROR: El campo CSBTPHONENUMBER es requerido</td></tr>
1472
+ <tr><td>98009 </td><td>ERROR: El campo CSBTPOSTALCODE es requerido</td></tr>
1473
+ <tr><td>98010 </td><td>ERROR: El campo CSBTSTATE es requerido</td></tr>
1474
+ <tr><td>98011 </td><td>ERROR: El campo CSBTSTREET1 es requerido</td></tr>
1475
+ <tr><td>98012 </td><td>ERROR: El campo CSBTSTREET2 es requerido</td></tr>
1476
+ <tr><td>98013 </td><td>ERROR: El campo CSPTCURRENCY es requerido</td></tr>
1477
+ <tr><td>98014 </td><td>ERROR: El campo CSPTGRANDTOTALAMOUNT es requerido</td></tr>
1478
+ <tr><td>98015 </td><td>ERROR: El campo CSMDD7 es requerido</td></tr>
1479
+ <tr><td>98016 </td><td>ERROR: El campo CSMDD8 es requerido</td></tr>
1480
+ <tr><td>98017 </td><td>ERROR: El campo CSMDD9 es requerido</td></tr>
1481
+ <tr><td>98018 </td><td>ERROR: El campo CSMDD10 es requerido</td></tr>
1482
+ <tr><td>98019 </td><td>ERROR: El campo CSMDD11 es requerido</td></tr>
1483
+ <tr><td>98020 </td><td>ERROR: El campo CSSTCITY es requerido</td></tr>
1484
+ <tr><td>98021 </td><td>ERROR: El campo CSSTCOUNTRY es requerido</td></tr>
1485
+ <tr><td>98022 </td><td>ERROR: El campo CSSTEMAIL es requerido</td></tr>
1486
+ <tr><td>98023 </td><td>ERROR: El campo CSSTFIRSTNAME es requerido</td></tr>
1487
+ <tr><td>98024 </td><td>ERROR: El campo CSSTLASTNAME es requerido</td></tr>
1488
+ <tr><td>98025 </td><td>ERROR: El campo CSSTPHONENUMBER es requerido</td></tr>
1489
+ <tr><td>98026 </td><td>ERROR: El campo CSSTPOSTALCODE es requerido</td></tr>
1490
+ <tr><td>98027 </td><td>ERROR: El campo CSSTSTATE es requerido</td></tr>
1491
+ <tr><td>98028 </td><td>ERROR: El campo CSSTSTREET1 es requerido</td></tr>
1492
+ <tr><td>98029 </td><td>ERROR: El campo CSMDD12 es requerido</td></tr>
1493
+ <tr><td>98030 </td><td>ERROR: El campo CSMDD13 es requerido</td></tr>
1494
+ <tr><td>98031 </td><td>ERROR: El campo CSMDD14 es requerido</td></tr>
1495
+ <tr><td>98032 </td><td>ERROR: El campo CSMDD15 es requerido</td></tr>
1496
+ <tr><td>98033 </td><td>ERROR: El campo CSMDD16 es requerido</td></tr>
1497
+ <tr><td>98034 </td><td>ERROR: El campo CSITPRODUCTCODE es requerido</td></tr>
1498
+ <tr><td>98035 </td><td>ERROR: El campo CSITPRODUCTDESCRIPTION es requerido</td></tr>
1499
+ <tr><td>98036 </td><td>ERROR: El campo CSITPRODUCTNAME es requerido</td></tr>
1500
+ <tr><td>98037 </td><td>ERROR: El campo CSITPRODUCTSKU es requerido</td></tr>
1501
+ <tr><td>98038 </td><td>ERROR: El campo CSITTOTALAMOUNT es requerido</td></tr>
1502
+ <tr><td>98039 </td><td>ERROR: El campo CSITQUANTITY es requerido</td></tr>
1503
+ <tr><td>98040 </td><td>ERROR: El campo CSITUNITPRICE es requerido</td></tr>
1504
+ <tr><td>98101 </td><td>ERROR: El formato del campo CSBTCITY es incorrecto</td></tr>
1505
+ <tr><td>98102 </td><td>ERROR: El formato del campo CSBTCOUNTRY es incorrecto</td></tr>
1506
+ <tr><td>98103 </td><td>ERROR: El formato del campo CSBTCUSTOMERID es incorrecto</td></tr>
1507
+ <tr><td>98104 </td><td>ERROR: El formato del campo CSBTIPADDRESS es incorrecto</td></tr>
1508
+ <tr><td>98105 </td><td>ERROR: El formato del campo CSBTEMAIL es incorrecto</td></tr>
1509
+ <tr><td>98106 </td><td>ERROR: El formato del campo CSBTFIRSTNAME es incorrecto</td></tr>
1510
+ <tr><td>98107 </td><td>ERROR: El formato del campo CSBTLASTNAME es incorrecto</td></tr>
1511
+ <tr><td>98108 </td><td>ERROR: El formato del campo CSBTPHONENUMBER es incorrecto</td></tr>
1512
+ <tr><td>98109 </td><td>ERROR: El formato del campo CSBTPOSTALCODE es incorrecto</td></tr>
1513
+ <tr><td>98110 </td><td>ERROR: El formato del campo CSBTSTATE es incorrecto</td></tr>
1514
+ <tr><td>98111 </td><td>ERROR: El formato del campo CSBTSTREET1 es incorrecto</td></tr>
1515
+ <tr><td>98112 </td><td>ERROR: El formato del campo CSBTSTREET2 es incorrecto</td></tr>
1516
+ <tr><td>98113 </td><td>ERROR: El formato del campo CSPTCURRENCY es incorrecto</td></tr>
1517
+ <tr><td>98114 </td><td>ERROR: El formato del campo CSPTGRANDTOTALAMOUNT es incorrecto</td></tr>
1518
+ <tr><td>98115 </td><td>ERROR: El formato del campo CSMDD7 es incorrecto</td></tr>
1519
+ <tr><td>98116 </td><td>ERROR: El formato del campo CSMDD8 es incorrecto</td></tr>
1520
+ <tr><td>98117 </td><td>ERROR: El formato del campo CSMDD9 es incorrecto</td></tr>
1521
+ <tr><td>98118 </td><td>ERROR: El formato del campo CSMDD10 es incorrecto</td></tr>
1522
+ <tr><td>98119 </td><td>ERROR: El formato del campo CSMDD11 es incorrecto</td></tr>
1523
+ <tr><td>98120 </td><td>ERROR: El formato del campo CSSTCITY es incorrecto</td></tr>
1524
+ <tr><td>98121 </td><td>ERROR: El formato del campo CSSTCOUNTRY es incorrecto</td></tr>
1525
+ <tr><td>98122 </td><td>ERROR: El formato del campo CSSTEMAIL es incorrecto</td></tr>
1526
+ <tr><td>98123 </td><td>ERROR: El formato del campo CSSTFIRSTNAME es incorrecto</td></tr>
1527
+ <tr><td>98124 </td><td>ERROR: El formato del campo CSSTLASTNAME es incorrecto</td></tr>
1528
+ <tr><td>98125 </td><td>ERROR: El formato del campo CSSTPHONENUMBER es incorrecto</td></tr>
1529
+ <tr><td>98126 </td><td>ERROR: El formato del campo CSSTPOSTALCODE es incorrecto</td></tr>
1530
+ <tr><td>98127 </td><td>ERROR: El formato del campo CSSTSTATE es incorrecto</td></tr>
1531
+ <tr><td>98128 </td><td>ERROR: El formato del campo CSSTSTREET1 es incorrecto</td></tr>
1532
+ <tr><td>98129 </td><td>ERROR: El formato del campo CSMDD12 es incorrecto</td></tr>
1533
+ <tr><td>98130 </td><td>ERROR: El formato del campo CSMDD13 es incorrecto</td></tr>
1534
+ <tr><td>98131 </td><td>ERROR: El formato del campo CSMDD14 es incorrecto</td></tr>
1535
+ <tr><td>98132 </td><td>ERROR: El formato del campo CSMDD15 es incorrecto</td></tr>
1536
+ <tr><td>98133 </td><td>ERROR: El formato del campo CSMDD16 es incorrecto</td></tr>
1537
+ <tr><td>98134 </td><td>ERROR: El formato del campo CSITPRODUCTCODE es incorrecto</td></tr>
1538
+ <tr><td>98135 </td><td>ERROR: El formato del campo CSITPRODUCTDESCRIPTION es incorrecto</td></tr>
1539
+ <tr><td>98136 </td><td>ERROR: El formato del campo CSITPRODUCTNAME es incorrecto</td></tr>
1540
+ <tr><td>98137 </td><td>ERROR: El formato del campo CSITPRODUCTSKU es incorrecto</td></tr>
1541
+ <tr><td>98138 </td><td>ERROR: El formato del campo CSITTOTALAMOUNT es incorrecto</td></tr>
1542
+ <tr><td>98139 </td><td>ERROR: El formato del campo CSITQUANTITY es incorrecto</td></tr>
1543
+ <tr><td>98140 </td><td>ERROR: El formato del campo CSITUNITPRICE es incorrecto</td></tr>
1544
+ <tr><td>98201 </td><td>ERROR: Existen errores en la información de los productos</td></tr>
1545
+ <tr><td>98202 </td><td>ERROR: Existen errores en la información de CSITPRODUCTDESCRIPTION los productos</td></tr>
1546
+ <tr><td>98203 </td><td>ERROR: Existen errores en la información de CSITPRODUCTNAME los productos</td></tr>
1547
+ <tr><td>98204 </td><td>ERROR: Existen errores en la información de CSITPRODUCTSKU los productos</td></tr>
1548
+ <tr><td>98205 </td><td>ERROR: Existen errores en la información de CSITTOTALAMOUNT los productos</td></tr>
1549
+ <tr><td>98206 </td><td>ERROR: Existen errores en la información de CSITQUANTITY los productos</td></tr>
1550
+ <tr><td>98207 </td><td>ERROR: Existen errores en la información de CSITUNITPRICE de los productos</td></tr>
1551
+ </table>
1552
+
1553
+ [<sub>Volver a inicio</sub>](#inicio)