Anexo Técnico - Ejemplo de invocaciones
Se puede acceder al siguiente link con un swagger de los servicios.
1. Autorización
Envío:
{"Object":{"Fingerprint":"43D6A770DB74F7972051D7FF6EE5339FDA03B70E","Object":{"Client":"ClientName","Request":{"Action":3,"ClientInformation":{"Name":"Francisco Vidal","Address":"Av Italia 2020","Email":"fvidal@plexo.com.uy","Identification":"12345678","IdentificationType":"0"},"DoNotUseCallback":false,"LimitIssuers":["4","4_1","13"],"MetaReference":"19099997","RedirectUri":"http://localhost/miURL","Type":0}},"UTCUnixTimeExpiration":1505156901034},"Signature":"CnK3/Z2...DCTI="}
Responde:
{"ExpirationUTC":1505192898,"Id":"c24cb52e05dd4e6295fbc318e9b52bb2","Uri":" https://web.testing.plexo.com.uy/c24cb52e05dd4e6295fbc318e9b52bb2"},"ResultCode":0
"Type":0 indica AuthorizationType.ClientReference, o sea que se quiere hacer referencia a un Cliente, cuyo identificador se especifica en "MetaReference":"19099997". La acción deseada se especifica en "Action":3 que se especifica en ActionType (SelectInstrument(1) + RegisterInstrument(2) = 3)
2. Mostrar Web
https://web.testing.plexo.com.uy/a3bf483e545e4a628de23bef3a2b37d8
Una vez que el cliente termina de seleccionar el medio de pago, se invoca la URL (InstrumentCallback) al servidor del cliente (debe ser REST), a no ser que se haya especificado “DoNotUseCallback”=true en la Autorización. En esa llamada se devuelve el instrumento de pago que se puede guardar para futuras compras, conteniendo datos como los últimos números de la tarjeta, sello, vencimiento, etc. Como respuesta se debe enviar un ClientSignedResponse como siempre firmado, conteniendo ResultCode y ErrorMessage donde pueden enviar información a mostrar luego.
{"Object":{
"Object":{
"SessionId":"c24cb52e05dd4e6295fbc318e9b52bb2",
"Client":"Nombre-Cliente",
"Action":1,
"PaymentInstrument":{
"InstrumentToken":"72307929f47e4e5e92a128cb87c9c22b",
"Name":"492963XXXXXX1010",
"Issuer":{
"Id":11,
"IssuerId":11,
"VariationId":1,
"Issuer":"Visa",
"VariationId":0,
"ImageUrl":"https://static.plexo.com.uy/issuers/11.svg",
"MayHaveAsyncPayments":false,
"SupportsReserve":true,
"MayHavePaymentsLimits":false,
"Fields":[{"LabelName":"Numero de Comercio","FieldType":2049,"Required":true}]
},
"SupportedCurrencies":
[{"CurrencyId":1,"Name":"Peso","Plural":"Pesos","Symbol":"$"},
{"CurrencyId":2,"Name":"Dólar","Plural":"Dólares","Symbol":"U$S"}],
"Status":0,
"InstrumentExpirationUTC":1590883200,
"AnonInstrumentUsageTimeLimit":86400,
"CreditLimits":[],
"AdditionalRequirements":
[{"SecondsLeft":120,"RequirementAfterTimeLimit":33154}],
"InstrumentInformation":{"CardType":"UruguayCredit","CardIssuer":"Banco Santander"}},
"OptionalMetadata":"Prueba optional","OptionalBIN":"49296351"},
"Fingerprint":"AEA4D5C586983A140F8B566EA81901E8BD8F8C9F",
"UTCUnixTimeExpiration":1504125737
},
"Signature":"ljmWbxNn1qx2DjEO0t1ALP09….="
}
Entre la cantidad de información recibida en el Callback, se destaca:
InstrumentToken: Es el Identificador del medio de pago, que se debe utilizar luego para realizar las operaciones de pago.
Name: Es el nombre del instrumento que se debe desplegar luego para la selección. Por lo general es el PAN de la tarjeta de crédito o el número de cuenta bancaria enmascarado.
AnonInstrumentUsageTimeLimit: Indica la cantidad de segundos de vida del instrumento de pago registrado en caso de ser un usuario anónimo.
AdditionalRequirements: En este campo se devuelve una lista con tiempos de vencimiento en segundos, de distintos campos de información adicional que se ingresan en el registro del medio de pago. El uso más común es el caso en donde el medio de pago solicita el ingreso del CVV, como en el ejemplo de respuesta utilizado:
"AdditionalRequirements": [{"SecondsLeft":120,"RequirementAfterTimeLimit":33154}]
En este caso, se indica que el FieldType #33154 (https://github.com/plexouy/Plexo.Models/blob/master/FieldType.cs / CVC = 0x8182) que es el CVV que se solicitó en el registro (la lista muestra todos los FieldTypes solicitados) tiene 120 segundos de vida antes de ser eliminado de la sesión en el servidor (por normativa PCI-DSS). En caso de enviar la operación de Purchase dentro de ese tiempo, no va a ser necesario capturar este dato nuevamente del tarjetahabiente, en caso contrario se deberá solicitar nuevamente y enviarlo en el campo correspondiente. Es importante saber que si el pago falla por algun motivo y se vuelve a intentar pagar, hay que solicitar el CVV al usuario, ya que en el intento previo el dato es eliminado en Plexo.
OptionalMetadata: Se ultiza muchas veces como control por parte del ecommerce, enviando un dato en el Authorization que luego se recibe en el Callback. En el caso de haber solicitado recibir informacion extra y opcional del BIN (principalmente por los nuevos de largo 8), se recibirá el dato dentro de OptionalBIN.
InstrumentInformation: Para algunas tarjetas, se especifica el tipo que es. Los diferentes valores disponibles se encuentra en https://github.com/plexouy/Plexo.Models/blob/master/CardTypes.cs
public enum CardTypes
{
[EnumMember]
UruguayDebit=1,
[EnumMember]
UruguayCredit=2,
[EnumMember]
UruguayPrepaid=5,
[EnumMember]
Debit=3,
[EnumMember]
Credit=4,
[EnumMember]
Prepaid=6,
[EnumMember]
Unknown=0
}
3. Purchase
Es el último paso con la invocación final para solicitar el pago (el medio de pago lo define InstrumentToken, y lo pueden guardar para futuros pagos), donde el formato por ejemplo del JSON es el siguiente:
Envío:
{
"Object":{
"Fingerprint":"43D6A770DB74F7972051D7FF6EE5339FDA03B70E",
"Object":{
"Client":"NombreCliente",
"Request":{
"ClientReferenceId":"19099997",
"CurrencyId":1,
"FinancialInclusion":{
"BilledAmount":300.00,
"InvoiceNumber":123456,
"TaxedAmount":300.00,
"Type":1
},
"Installments":2,
"Items":[{"Amount":300.00,"ClientItemReferenceId":"abg156"}],
"PaymentInstrumentInput":{
"InstrumentToken":"72307929f47e4e5e92a128cb87c9c22b",
"NonStorableItems":{"CVC":"123"},
"UseExtendedClientCreditIfAvailable":false
}
}
},
"UTCUnixTimeExpiration":1505155515707
},
"Signature":"1tbpz/YVdToLp….ws="
}
En el Request va ClientReferenceId, donde viaja el Identificador de Cliente que solicite en la Autorización, la moneda, el objeto FinancialInclusion con todos los datos solicitados por la ley, especificando el tipo a aplicar que se especifica en InclusionType (None(0), Law17934(1), Law19210(6)). Luego se especifica en Installments la cantidad de cuotas, va un Array con los Items de la compra y por último el instrumento de pago en el objeto PaymentInstrumentInput, con el InstrumentToken que recibimos en el callback del servidor en el paso anterior. En este caso también el medio de pago solicita el ingreso del CVC2 o CVV2 según corresponda, por ello se envía el valor “CVC” dentro del campo NonStorableItems del objeto PaymentInstrumentInput.
Respuesta:
{
"Object":{
"Fingerprint":"AEA4D5C586983A140F8B566EA81901E8BD8F8C9F",
"Object":{
"Response":{
"Commerce":{
"CommerceId":9,
"Name":"CommerceName"
},
"Currency":{
"CurrencyId":1,
"Name":"Peso",
"Plural":"Pesos",
"Symbol":"$"
},
"CurrentState":1,
"FieldInformation":{
"Address":"Av Italia 2020",
"Email":"fvidal@plexo.com.uy",
"Expiration":"06/20",
"Identification":"12345678",
"IdentificationType":"0",
"Name":"Francisco Vidal",
"Provider":"MasterCard"
},
"FinancialInclusion":{
"IsApplied":true,
"LawNumber":1,
"ReturnAmount":0.00
},
"Installments":2,
"InstrumentName":"539909XXXXXX1010",
"InstrumentToken":"72307929f47e4e5e92a128cb87c9c22b",
"InvoiceNumber":"123456",
"IsAnonymous":false,
"Issuer":{
"Bank":null,
"Fields":[{"FieldType":2049,"LabelName":"Numero de Comercio","Required":true}],
"Id":"4",
"ImageUrl":"https://testing.plexo.com.uy:4043/images/instruments/4.png",
"Issuer":"MasterCard",
"IssuerId":4,
"MayHaveAsyncPayments":false,
"MayHavePaymentsLimits":false,
"SupportsReserve":false,
"Variation":null,
"VariationId":0
},
"TransactionId":"b696d0e857ce41b181c71f607bbbbba6",
"Transactions":{
"Purchase":{
"Authorization":"104",
"ClientMetadata":null,
"ClientReferenceId":"19099997",
"ExecutionDateUTC":1505155513,
"ExpirationUTC":null,
"Status":0,
"Ticket":null,
"TransactionCode":0,
"TransactionResultText":null
}
}
},
"ResultCode":0
},
"UTCUnixTimeExpiration":1505156113
},
"Signature":"RkPXm2nPY….Of4="}
}
En la respuesta de Purchase se recibe una cantidad de información, donde se destaca:
Commerce: Contiene los datos del comercio al que se hizo la compra.
CurrentState: Es el estado actual de la transacción. Se obtiene del enumerado TransactionType: Reserve (0) / Purchase (1) / Cancel (2)
FieldInformation: Información variada del Cliente e instrumento de pago utilizado.
FinancialInclusion: Informa si se aplicó la Ley de Inclusión Financiera, cuál, y el monto de descuento.
Issuer: Contiene toda la información relevante el emisor del medio de pago.
TransactionId: Contiene el identificador de la transacción en Plexo. Es conveniente guardar este valor para futura consolidación de datos.
Transactions: Contiene un Array con los distintos tipos de transacciones que estén involucradas. Esto es porque podríamos tener tres posibles estados: Reserva, Compra y Cancelación para una misma transacción, y en este campo se puede obtener la información relevante para cada uno de ellos. Por ejemplo:
"Purchase":{
"Authorization":"104",
"ClientMetadata":null,
"ClientReferenceId":"19099997",
"ExecutionDateUTC":1505155513,
"ExpirationUTC":null,
"Status":0,
"Ticket":null,
"TransactionCode":0,
"TransactionResultText":null
}
En este caso hay solamente una transacción de compra, con Status = 0 que hace referencia al enumerado TransactionResult.Ok(0) y el código de autorización 104 y un TransactionCode = 0 que es el código de resultado del medio de pago.
En caso de que se solicite la cancelación de esta compra, el valor de CurrentState debería ser 2 (Cancel) y en el campo de Transactions podríamos tener este contenido:
"Transactions":{
"Purchase":{
"ClientReferenceId":"19099997",
"ClientMetadata":null,
"Status":0,
"TransactionCode":0,
"TransactionResultText":null,sson
"ExecutionDateUTC":1504648725,
"Authorization":"104",
"Ticket":null,
"ExpirationUTC":null
},
"Cancel":{
"ClientReferenceId":"19099997",
"ClientMetadata":null,
"Status":0,
"TransactionCode":0,
"TransactionResultText":"Empty Response",
"ExecutionDateUTC":1504648798,
"Authorization":null,
"Ticket":null,
"ExpirationUTC":null
}
}
4. Cancel
Si se desea cancelar una compra, se debe invocar a este método pasando como principal referencia el identificador de la transacción que se quiere cancelar:
Envío:
{
"Object":{
"Fingerprint":"43D6A770DB74F7972051D7FF6EE5339FDA03B70E",
"Object":{
"Client":"NombreCliente",
"Request":{
"ClientReferenceId":"19099998",
"MetaReference":"b696d0e857ce41b181c71f607bbbbba6",
"Type":0
}
},
"UTCUnixTimeExpiration":1505159246145
},
"Signature":"rJViby...Srw="
}
En el campo Type va el valor del enumerado ReferenceType PlexoTransactionId(0), ClientPurchaseReferenceId(1), ClientCancelReferenceId(2) y ClientReserveReferenceId(3), y en el MetaReference el identificador asociado. En este caso se indica que se desea cancelar el ID b696d0e857ce41b181c71f607bbbbba6 asociado a un ID de la transacción de Plexo, el que retorno el método Purchase.
Podría darse el caso, en que en vez de enviar el ID de la transacción de Plexo, envíe el ID de mi transacción, en ese caso se envía un Type = 1 y el ClientReferenceId = 19099997 qué es el que se envio en el Purchase como ID del cliente.
Respuesta:
{
"Object":{
"Fingerprint":"AEA4D5C586983A140F8B566EA81901E8BD8F8C9F",
"Object":{
"Response":{
"Commerce":{
"CommerceId":9,
"Name":"CommerceName"
},
"Currency":{
"CurrencyId":1,
"Name":"Peso",
"Plural":"Pesos",
"Symbol":"$"
},
"CurrentState":2,
"FieldInformation":{
"Address":"Av Italia 2020",
"Email":"fvidal@plexo.com.uy",
"Expiration":"06/20",
"Identification":"12345678",
"IdentificationType":"0",
"Name":"Francisco Vidal",
"Provider":"MasterCard"
},
"FinancialInclusion":{
"IsApplied":true,
"LawNumber":1,
"ReturnAmount":0.0
},
"Installments":2,
"InstrumentName":"539909XXXXXX1010",
"InstrumentToken":"72307929f47e4e5e92a128cb87c9c22b",
"InvoiceNumber":"123456",
"IsAnonymous":false,
"Issuer":{
"Bank":null,
"Fields":[{"FieldType":2049,"LabelName":"Numero de Comercio","Required":true}],
"Id":"4",
"ImageUrl":"https://testing.plexo.com.uy:4043/images/instruments/4.png",
"Issuer":"MasterCard",
"IssuerId":4,
"MayHaveAsyncPayments":false,
"MayHavePaymentsLimits":false,
"SupportsReserve":false,
"Variation":null,
"VariationId":0
},
"TransactionId":"b696d0e857ce41b181c71f607bbbbba6",
"Transactions":{
"Cancel":{
"Authorization":null,
"ClientMetadata":null,
"ClientReferenceId":"19099998",
"ExecutionDateUTC":1505159243,
"ExpirationUTC":null,
"Status":0,
"Ticket":null,
"TransactionCode":0,
"TransactionResultText":"Empty Response"
},
"Purchase":{
"Authorization":"104",
"ClientMetadata":null,
"ClientReferenceId":"19099997",
"ExecutionDateUTC":1505166313,
"ExpirationUTC":null,
"Status":0,
"Ticket":null,
"TransactionCode":0,
"TransactionResultText":null
}
}
},
"ResultCode":0
},
"UTCUnixTimeExpiration":1505159843
},
"Signature":"eHXn/6L...mOkU="
}
5. ExpressCheckout
Envío:
{
"Object":{
"Fingerprint":"06356B6157EF3AB24D20EBCC5158C75E371D3734",
"Object":{
"Client":"ClientName",
"Request":{
"AuthorizationData":{
"Action":64,
"ClientInformation":{
"Name":"Francisco Vidal",
"Address":"Av Italia 2020",
"Email":"fvidal@plexo.com.uy",
"Identification":"123456758",
"IdentificationType":"0"
},
"DoNotUseCallback":false,
"LimitBanks":[
"113,137"
],
"LimitIssuers":[
"4",
"11",
"13",
"15",
"30",
"32"
],
"MetaReference":"fvidal@plexo.com.uy",
"OptionalCommerceId":84,
"RedirectUri":"http://www.sitiocliente.com/plexo/XXX/YYY",
"Type":0
},
"PaymentData":{
"ClientReferenceId":"1617812571899",
"CurrencyId":1,
"FinancialInclusion":{
"BilledAmount":100.0,
"InvoiceNumber":-1390098693,
"TaxedAmount":81.97,
"Type":1
},
"Installments":1"Items":[
{
"Amount":61.0,
"ClientItemReferenceId":"Item-1",
"Description":"2mts x 2mts",
"Name":"Sommier King",
"Quantity":1
},
{
"Amount":61.0,
"ClientItemReferenceId":"Item-1",
"Description":"Premium Collection",
"Name":"Sabanas King",
"Quantity":1
}
],
"OptionalCommerceId":84,
"PaymentInstrumentInput":{
"NonStorableItems":{
"Cvc":"123"
},
"OptionalInstrumentFields":{
"CommerceReserveExpirationInSeconds":"600",
"ShippingAddress":"Av Peru 2355",
"ShippingZipCode":"15800",
"ShippingCity":"Canelones",
"ShippingCountry":"UY",
"ShippingFirstName":"Juana",
"ShippingLastName":"Perez",
"ShippingPhoneNumber":"099554554"
},
"UseExtendedClientCreditIfAvailable":false
}
}
}
},
"UTCUnixTimeExpiration":1626350400
},
"Signature":"…="
}
Respuesta:
{
"Fingerprint":"3EA35666901BEA8047EC9DC1F0D72961CC820974",
"Object":{
"Response":{
"ExpirationUTC":1727080411,
"Id":"272d253e24d74b7da04b9910f1ef95d5",
"Uri":"https://web.testing.plexo.com.uy/272d253e24d74b7da04b9910f1ef95d5"
},
"ResultCode":0
},
"UTCUnixTimeExpiration":1723481011
}
Al igual que en el Authorize, nos devuelve una URL para mostrar la Web de Plexo.
Luego de ejecutarse la transacción, se envía el PaymentCallback a la URL especificada por el cliente con el resultado de la misma:
{
"Object":{
"Object":{
"Client":"ClientName",
"TransactionId":"c4736021143c4d8084f86b5cd46b7aa5",
"Commerce":{
"CommerceId":84,
"Name":"Mi Comercio"
},
"InstrumentToken":"078e8686b9e448ddba3ce1bf1abdae55",
"InstrumentName":"520394XXXXXX3450",
"Issuer":{
"Id":"4",
"IssuerId":4,
"VariationId":0,
"Issuer":"MasterCard",
"ImageUrl":"https://testing.plexo.com.uy/images/instruments/4.png",
"MayHaveAsyncPayments":false,
"SupportsReserveJSON":true,
"MayHavePaymentsLimits":false,
"Fields":[
{
"LabelName":"Numero de Comercio",
"FieldType":2049,
"Required":true
}
]
},
"Amount":100.00,
"Installments":1,
"Currency":{
"CurrencyId":1,
"Name":"Peso",
"Plural":"Pesos",
"Symbol":"$"
},
"IsAnonymous":true,
"CurrentState":1,
"InvoiceNumber":"0-1389204724",
"FinancialInclusion":{
"IsApplied":false,
"ReturnAmount":0.0,
"LawNumber":0
},
"Transactions":{
"Purchase":{
"ClientReferenceId":"1617813465868",
"Status":2,
"TransactionCode":0,
"TransactionResultText":"Pending",
"ExecutionDateUTC":1617813471
}
},
"FieldInformation":{
"Provider":"Sistarbanc",
"ProviderCommerceNumber":"HANDY",
"TerminalNumber":"VTOL",
"AvailableBanks":"009,008",
"CommerceRUT":"215465874411",
"CardType":"Bank",
"Expiration":"12/99",
"InstrumentName":"Sistarbanc",
"IntegerId":"17077"
},
"IsAsyncPayment":false,
"UTCUnixTimeExpiration":1617815271
},
"Fingerprint":"88C92452350AE72C2202A63B5CA86E55A2A51289",
"UTCUnixTimeExpiration":1617814512
},
"Signature":"g556W..piJk="
}
En este caso, la transacción está en estado pendiente hasta que el usuario realice el pago en redes de cobranza o su homebanking, etc. Luego de confirmado el pago, o si vence el tiempo máximo de espera, se recibirá otro PaymentCallback con el resultado final de la transacción.
Validación de firmas
Para brindar apoyo en el problema de canonización y firmado de los paquetes, que son los problemas más comunes, se agrega en la respuesta de error el mensaje que estaba esperando Plexo para que sea valido.
Ejemplo de una invocación errónea de Authorize:
{"Object":{"Fingerprint":"06356B6157EF3AB24D20EBCC5158C75E371D3734","Object":{"Client":"Fvidal","Request":{"ClientInformation":{"Address":"Echevarriarza 3340","ZipCode":"15800","Email":"fvidal@plexo.com.uy","Identification":"42320818","IdentificationType":"1","FirstName":"Leonardo","LastName":"González Mazzei","City":"Montevideo"},"DoNotUseCallback":false,"ExtendedBINInformation":true,"MetaReference":"fvidal@plexo.com.uy","OptionalCommerceId":84,"RedirectUri":"https://google.com.uy/","Type":0}},"UTCUnixTimeExpiration":1703296821},"Signature":"QVwy+V5JD+i01eRzODxlVXSTxHelSn/1gUQ3KVI4fI9Nw7TQ1lcBY4HGORTO0lst2TcK9vSS4FyYlT1KYLEY5uL+8NMVEIgaJeeEGZnKJktqEW0UFvnwEKinIbExnrxh47jrA7M0Daf+gETNAQjdd1Cx0kF+8E3/yjRbnGfldDWMyConJ2vfC+edmncMqmbOVllOa0cMjTrEHaJDwRCYrmAHo+jQa8+Z8MkxajV93YT4CXbhxKoFubkDyNQ36QKwdJGgl8gSfUYPhkWm6UUCcH+lJdfZcOnbfwk75nnkUPTRwTw05c8yfjVTH0DVH2iDRHzoX/spSFyXwD42b3Dr1FHx9+5d3nqhHKzkFLQFxw4qhMOWQho65MkS4ZdEBX9xecsvxPQ67ZqDtTwQ9DFqq5SK6Z5IgHTgFlT0NEbaJYKVLC0GMzRLEcH+JklNxIfgct18HIamf9+Fl0n3UpAj5/+kT2TSAYxf1EloJU83g0Qe0j2K7C6QkGLFj9bZs8+U1QiPR6wWPHjWC3l9GKXlgWHoMvzTgkUP5dI+HshokgKlS5IfUWnJebT/tnSGb9OuLjF+Ixqxsrm3vOwGJnhvnAvuWMz5giH/94DISircd4xhunlIVQTXDeQ//5hTSaWhFcPwHnb5v2xJwqLRPcOu9WwRiIOEfAr+49I189/FHCo="}
Como respuesta se recibe:
{
"Object": {
"Fingerprint": "3EA35666901BEA8047EC9DC1F0D72961CC820974",
"Object": {
"ErrorMessage": "Signature do not match: Message expected: {"Fingerprint":"06356B6157EF3AB24D20EBCC5158C75E371D3734","Object":{"Client":"Fvidal","Request":{"Action":0,"ClientInformation":{"Address":"Echevarriarza 3340","City":"Montevideo","Email":"fvidal@plexo.com.uy","FirstName":"Leonardo","Identification":"42320818","IdentificationType":"1","LastName":"González Mazzei","ZipCode":"15800"},"DoNotUseCallback":false,"ExtendedBINInformation":true,"MetaReference":"fvidal@plexo.com.uy","OptionalCommerceId":84,"RedirectUri":"https://google.com.uy/","Type":0}},"UTCUnixTimeExpiration":1703296821}",
"I18NErrorMessages": {
"en": "Signature do not match: Message expected: {"Fingerprint":"06356B6157EF3AB24D20EBCC5158C75E371D3734","Object":{"Client":"Fvidal","Request":{"Action":0,"ClientInformation":{"Address":"Echevarriarza 3340","City":"Montevideo","Email":"fvidal@plexo.com.uy","FirstName":"Leonardo","Identification":"42320818","IdentificationType":"1","LastName":"González Mazzei","ZipCode":"15800"},"DoNotUseCallback":false,"ExtendedBINInformation":true,"MetaReference":"fvidal@plexo.com.uy","OptionalCommerceId":84,"RedirectUri":"https://google.com.uy/","Type":0}},"UTCUnixTimeExpiration":1703296821}",
"es": "La firma no concuerda: Mensaje esperado: {"Fingerprint":"06356B6157EF3AB24D20EBCC5158C75E371D3734","Object":{"Client":"Fvidal","Request":{"Action":0,"ClientInformation":{"Address":"Echevarriarza 3340","City":"Montevideo","Email":"fvidal@plexo.com.uy","FirstName":"Leonardo","Identification":"42320818","IdentificationType":"1","LastName":"González Mazzei","ZipCode":"15800"},"DoNotUseCallback":false,"ExtendedBINInformation":true,"MetaReference":"fvidal@plexo.com.uy","OptionalCommerceId":84,"RedirectUri":"https://google.com.uy/","Type":0}},"UTCUnixTimeExpiration":1703296821}"
},
"ResultCode": 13
},
"UTCUnixTimeExpiration": 1703287739
},
"Signature": "HVOtwWPI8lxvGI/lhbYNFIEe85UQtvftgtzuWwux67MLJW1g4Mlz4NfoYfcr9G2HEtgCrwXNQn1CXwuZh6FgW8O6WwzevdstJU72FZ4rICMUJBLfODzPsY5UkNqLy6fcuqU7a3TMwUZnbQhP0G1ScrS1oFJaS4BinqMbnySCsFWCRa9Hvxgewbg/9kZwTsgF81rdOGeazgr5FYp/lFzX/Zqr/4QyjmpMMtrB2xtIqUu6ZsdKXteHH+G72Ka6L2LiWBjhZ6MUaqkKNJY+OZT0/egXksVDNuUOgd2Eu4FhQughSJXTYORZwNjaaHU2yO0iyiccY30poVg6jFrZl3K2gc6ibKWt2KqWmPZEnVGQ8hwoJ1MkPMyY/9xFzY1H7pzDeQdNpXBh6QAXd/tkT9JQQj8itJLQ3CrMMPIlMeFtX9mY5j/9RC+jUuVbhB/k9Fr39OCcsDdsZ4z9RuA0PO5cbZ+af6Xbw0FIUW0mxrQ4/089DbzEefFyijHVhysNDwvc/wlvpILL/jz9NUQf7nIv+6Db8jKe1Wm1j58MJWmyZiSaauggfq/GWvHlVV9O++lxvo/GmtMeK1JTSRxmAIwgkXjx+XHOd5/m6TvkBX1u/gOgQz5DafuG8BLCNFuZ/mJxrlmS5fH5M9Yy2dqGhsKoLBZeK8hY3dhddqo2KZ8QzSA="
}
En este caso el problema fue no agregar dentro del Request el campo Action que es requerido, y se especifica en la respuesta, dentro de ErrorMessage, agregando el valor de "Action":0 al mensaje esperado. Comparando lo enviado y la respuesta que da el sistema, se puede llegar a determinar donde esta el problema en la generación y firma del mensaje.
Entonces el mensaje correcto en este caso sería agregar el Action deseado (con valor 3 = Select + Register):
{"Object":{"Fingerprint":"06356B6157EF3AB24D20EBCC5158C75E371D3734","Object":{"Client":"Fvidal","Request":{"Action":3,"ClientInformation":{"Address":"Echevarriarza 3340","ZipCode":"15800","Email":"fvidal@plexo.com.uy","Identification":"42320818","IdentificationType":"1","FirstName":"Leonardo","LastName":"González Mazzei","City":"Montevideo"},"DoNotUseCallback":false,"ExtendedBINInformation":true,"MetaReference":"fvidal@plexo.com.uy","OptionalCommerceId":84,"RedirectUri":"https://google.com.uy/","Type":0}},"UTCUnixTimeExpiration":1703296821},"Signature":"QVwy+V5JD+i01eRzODxlVXSTxHelSn/1gUQ3KVI4fI9Nw7TQ1lcBY4HGORTO0lst2TcK9vSS4FyYlT1KYLEY5uL+8NMVEIgaJeeEGZnKJktqEW0UFvnwEKinIbExnrxh47jrA7M0Daf+gETNAQjdd1Cx0kF+8E3/yjRbnGfldDWMyConJ2vfC+edmncMqmbOVllOa0cMjTrEHaJDwRCYrmAHo+jQa8+Z8MkxajV93YT4CXbhxKoFubkDyNQ36QKwdJGgl8gSfUYPhkWm6UUCcH+lJdfZcOnbfwk75nnkUPTRwTw05c8yfjVTH0DVH2iDRHzoX/spSFyXwD42b3Dr1FHx9+5d3nqhHKzkFLQFxw4qhMOWQho65MkS4ZdEBX9xecsvxPQ67ZqDtTwQ9DFqq5SK6Z5IgHTgFlT0NEbaJYKVLC0GMzRLEcH+JklNxIfgct18HIamf9+Fl0n3UpAj5/+kT2TSAYxf1EloJU83g0Qe0j2K7C6QkGLFj9bZs8+U1QiPR6wWPHjWC3l9GKXlgWHoMvzTgkUP5dI+HshokgKlS5IfUWnJebT/tnSGb9OuLjF+Ixqxsrm3vOwGJnhvnAvuWMz5giH/94DISircd4xhunlIVQTXDeQ//5hTSaWhFcPwHnb5v2xJwqLRPcOu9WwRiIOEfAr+49I189/FHCo="}
Last updated