Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Atualiza projeto, adiciona 3DS 2 com MPI Rede e Cliente e adiciona te… #21

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 56 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@

SDK de integração eRede

# Funcionalidades
Este SDK possui as seguintes funcionalidades:

* Autorização
* Captura
* Consultas
* Cancelamento
* 3DS2
* Zero dollar
* iata
* MCC dinâmico

# Utilizando

## Autorizando uma transação
Expand Down Expand Up @@ -98,29 +110,62 @@ mais através [da documentação](https://www.userede.com.br/desenvolvedores/pt/
var store = new Store(pv, token, environment);
var transaction = new Transaction
{
amount = 20,
reference = "pedido" + new Random().Next(200, 10000)
}.DebitCard(
"2223000148400010",
"123",
Amount = 20,
Reference = "pedido" + new Random().Next(200, 10000),
ThreeDSecure = new ThreeDSecure
{
Embedded = true,
UserAgent =
"Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405",
OnFailure = ThreeDSecure.ContinueOnFailure,
Device = new Device
{
ColorDepth = 1,
DeviceType3ds = "BROWSER",
JavaEnabled = false,
ScreenHeight = 1080,
ScreenWidth = 1920,
TimeZoneOffset = 3
}
},
Urls = new List<Url>
{
new()
{
Kind = Url.ThreeDSecureSuccess, url = "https://scommerce.userede.com.br/LojaTeste/Venda/sucesso"
},
new()
{
Kind = Url.ThreeDSecureFailure, url = "https://scommerce.userede.com.br/LojaTeste/Venda/opz"
}
}
}.CreditCard(
"5448280000000007",
"235",
"12",
"2020",
"Fulano de tal"
);

transaction.AddUrl("http://example.org/success", Url.THREE_D_SECURE_SUCCESS);
transaction.AddUrl("http://example.org/failure", Url.THREE_D_SECURE_FAILURE);

var response = new eRede.eRede(store).create(transaction);
var response = new eRede.eRede(store).Create(transaction);
```

Assim que a transação for criada, o cliente precisará ir até a página do banco para autenticar. O código de status `220`
indica que o cliente precisará ser redirecionado:

```csharp
if (response.returnCode == "220")
switch (response.ReturnCode)
{
Console.Write(response.threeDSecure.url);
case "201":
Console.WriteLine("A autenticação não é necessária");
break;
case "220":
Console.WriteLine($"URL de redirecionamento enviada: {response.ThreeDSecure.Url}");
break;
default:
Console.WriteLine(
$"Foi retornado o código {response.ReturnCode} com a seguinte mensagem: '{response.ReturnMessage}");
break;
}
```

Expand Down
12 changes: 12 additions & 0 deletions eRede/eRede/Device.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace eRede;

public class Device
{
public int ColorDepth { get; set; }
public string DeviceType3ds { get; set; }
public bool JavaEnabled { get; set; }
public string Language { get; set; } = "BR";
public int ScreenHeight { get; set; }
public int ScreenWidth { get; set; }
public int TimeZoneOffset { get; set; } = 3;
}
1 change: 1 addition & 0 deletions eRede/eRede/Service/AbstractTransactionService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ protected TransactionResponse SendRequest(RestRequest request)
var response = client.Execute(request);

if (response is null) throw new NullReferenceException("Response is null");
if (response.Content is null) throw new NullReferenceException("Response content is null");

var status = (int)response.StatusCode;

Expand Down
20 changes: 19 additions & 1 deletion eRede/eRede/ThreeDSecure.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,32 @@ namespace eRede;

public class ThreeDSecure
{
public const string MpiRede = "MPI Rede";
public const string MpiCliente = "MPI Cliente";

public const string ContinueOnFailure = "continue";
public const string DeclineOnFailure = "decline";

public ThreeDSecure()
{
Embedded = true;
}

public ThreeDSecure(string mpi)
{
Embedded = mpi == MpiRede;
}

public string Cavv { get; set; }
public string Eci { get; set; }
public bool Embedded { get; set; }
public string OnFailure { get; set; }
public string OnFailure { get; set; } = DeclineOnFailure;
public string Url { get; set; }
public string UserAgent { get; set; }
public string Xid { get; set; }
public Device Device { get; set; }
public string ReturnCode { get; set; }
public string ReturnMessage { get; set; }
public string ThreeDIndicator { get; set; }
public string DirectoryServerTransactionId { get; set; }
}
2 changes: 1 addition & 1 deletion eRede/eRede/eRede.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace eRede;

public class eRede
{
public const string Version = "1.0.0";
public const string Version = "2.0.0";
public const string UserAgent = "eRede/" + Version + "(SDK; C#)";

private readonly Store _store;
Expand Down
71 changes: 66 additions & 5 deletions eRede/eRedeTests/eRedeTest.cs
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
using System;
using System.Collections.Generic;
using eRede;
using eRede.Service.Error;
using NUnit.Framework;
using Environment = eRede.Environment;
using Transaction = eRede.Transaction;

namespace eRedeTests;

public class eRedeTest
{
private string? _cardCvv;
private string? _cardHolder;
private string? _cardNumber;
private string? _ec;
private string? _token;
private Environment? _environment;
private DateTime _expiration;
private string? _cardNumber;
private string? _cardHolder;
private string? _cardCvv;
private string? _token;

[SetUp]
public void Setup()
Expand All @@ -33,6 +33,67 @@ public void Setup()
_cardHolder = "Fulano de tal";
}

[Test]
public void Test3DS2()
{
var store = new Store("", "", _environment);
var transaction = new Transaction
{
Amount = 20,
Reference = "pedido" + new Random().Next(200, 10000),
ThreeDSecure = new ThreeDSecure
{
Embedded = true,
UserAgent =
"Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405",
OnFailure = ThreeDSecure.ContinueOnFailure,
Device = new Device
{
ColorDepth = 1,
DeviceType3ds = "BROWSER",
JavaEnabled = false,
Language = "BR",
ScreenHeight = 1080,
ScreenWidth = 1920,
TimeZoneOffset = 3
}
},
Urls = new List<Url>
{
new()
{
Kind = Url.ThreeDSecureSuccess, url = "https://scommerce.userede.com.br/LojaTeste/Venda/sucesso"
},
new()
{
Kind = Url.ThreeDSecureFailure, url = "https://scommerce.userede.com.br/LojaTeste/Venda/opz"
}
}
}.CreditCard(
_cardNumber,
_cardCvv,
_expiration.Month.ToString(),
_expiration.Year.ToString(),
_cardHolder
);

var response = new eRede.eRede(store).Create(transaction);

switch (response.ReturnCode)
{
case "201":
Console.WriteLine("A autenticação não é necessária");
break;
case "220":
Console.WriteLine($"URL de redirecionamento enviada: {response.ThreeDSecure.Url}");
break;
default:
Console.WriteLine(
$"Foi retornado o código {response.ReturnCode} com a seguinte mensagem: '{response.ReturnMessage}");
break;
}
}

[Test]
public void TestEcTokenAreRequired()
{
Expand Down