# Bluepay
[![CircleCI](https://circleci.com/gh/SoundPays/bluepay-elixir.svg?style=svg&circle-token=9afd5b380fa39950af0aa271180b4458ad545e68)](https://circleci.com/gh/SoundPays/bluepay-elixir) [![codecov](https://codecov.io/gh/SoundPays/bluepay-elixir/branch/master/graph/badge.svg?token=kGHRtUSVoq)](https://codecov.io/gh/SoundPays/bluepay-elixir)
## Installation
If [available in Hex](https://hex.pm/docs/publish), the package can be installed as:
1. Add `bluepay` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[{:bluepay, "~> 0.1.0"}]
end
```
2. Ensure `bluepay` is started before your application:
```elixir
def application do
[applications: [:bluepay]]
end
```
## Usage
### Tokenize a Card
```
card = %Bluepay.Card{
name: "Bob Roberts",
number: "5191111111111111",
expiry_month: "12"
expiry_year: "17"
cvd: "400",
postal_code: "12345"
}
results = Bluepay.Token.create(terminal_id, card)
# {:ok, "fake-token-lol", "TOKEN ADDED"}
```
### Pay with a Token
```
amount = 5000 #$50.00
token = "MY-TOKEN"
results = Bluepay.Token.purchase(terminal_id, token, amount)
# {:ok, "T00000 $50.00"}
```
## The Bluepay Gateway
Requests to the Bluepay Gateway are all GET requests. Paremeters are URL encoded in both the request and also in
the response body.
### Add Token
Field Name | Value | Description
------------ | ------------------- | ----------------------------------------------------------
TERMID | EXAMPLE1 | *your* terminal id
TYPE | G | the type of transaction
TOKEN_ACTION | ADD | action: ADD UPDATE DEACTIVATE REACTIVATE
TOKEN | ? | You can pick a token or part of a token. ? is the rest.
CARD | 5191111111111111 | The card number to be tokenized
EXP | 1214 | The expiry date
CVV2 | 123 | The CVV
AVS | 90210 | Address and/or zipcode for verification
TOKEN_REF | xxx-xxx-xxxxxxx | *your* reference for the card. use it for searching
EXT_RESP | Y | ??????
Request:
https://lt3a.caledoncard.com/TERMID=EXAMPLE1&TYPE=G&TOKEN_ACTION=ADD&TOKEN=45125206MCRD0003&CARD=5550000000000003&EXP=1214&CVV2=400&AVS=12345&TOKEN_REF=JSMITH-MCRD&EXT_RESP=Y
Response:
TEXT=TOKEN ADDED &AVS=Y&CODE=0000&CTYPE=MCRD&CPROD=MC&CCO=124&CVV2=M
### Pay with Token
Field Name | Value | Description
------------ | ------------------- | ----------------------------------------------------------
TERMID | EXAMPLE1 | *your* terminal id
TYPE | S | the type of transaction
TOKEN | 45125206MCRD5111 | the card token
AMT | 14259 | the amount in cents as an integer
REF | TOKENTRANSEXAMPLE | *your* reference
Request:
https://lt3a.caledoncard.com/TERMID=EXAMPLE1&TYPE=S&TOKEN=45125206MCRD5111&AMT=14259&REF=TOKENTRANSEXAMPLE
Response:
TEXT=T35698 $142.59&AUTH=T35698CODE=0000
----
### Sample Transaction
The sample below shows a transaction request and response for a real-time credit card Sale transaction.
#### Transaction Request:
```
https://lt3a.caledoncard.com/TERMID=TESTMERC&CARD=5123456789012345&EXP=0407&AMT=4350&REF=43&TYPE=S
```
#### Transaction Response:
```
HTTP/1.0 200 OK Content-type: text/plain Content-length: 47 TEXT=045560 $43.50&AUTH=045560&CODE=0000
````
### GOTCHAS
Ampersand `&` is encoded as `&&` instead of `%26` from the gateway.