Giter Club home page Giter Club logo

webpos-sdk-java7's Introduction

chainside

developed with ❤️ by chainside

Introduction

This project is the official SDK library for the integration with the Chainside Pay Platform. This repository contains the source code compatible with jdk1.7. The main repository of the library can be found at https://github.com/chainside/webpos-sdk-java

Installation

Follow these steps to install the SDK library into your system:

Follow these steps to install the SDK library into your system. You can install it either using the maven-dependency-plugin, configuring the pom.xml or configuring the gradle.build (for gradle users)

With Maven plugin:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get 
-Dartifact=net.chainside.webpossdk:webpos-sdk-java:1.4.0  
-DrepoUrl=http://central.maven.org/maven2/

In pom.xml:

<dependency>
            <groupId>net.chainside.webpossdk</groupId>
            <artifactId>webpos-sdk-java</artifactId>
            <version>1.4.0</version>
</dependency>

In gradle.build:

compile 'net.chainside.webpossdk:webpos-sdk-java:1.4.0'

TLS version

If you are experiencing protocol errors during the download, you might need to upgrade the TLS version used from the dependency manager. Depending on the jdk1.7 version used, you might need to enable TLSv1.2 protocol to download dependencies. This can be achieved by passing -Dhttps.protocols=TLSv1.2 to the chosen package manager command

Structure

The following sections will describe the high level structure of the SDK library.

Configuration

In order to be able to configure your SDK client you have to set some configuration parameters. Here is the list of the configuration parameters used by the library:

Parameter Type Required Default Description
mode string Yes live The SDK mode, can be sandbox or live
clientId string Yes null Your WebPos client id
secret string Yes null Your WebPos secret
proxy HashMap No null Proxy Configuration

Proxy settings

If a proxy configuration is given, the requests are sent using the configured proxy. A proxy configuration must be specified as:

Parameter Type Required Default Description
hostname string Yes null Hostname of the proxy server
port int Yes null Port of the proxy server
protocol string Yes null Proxy server protocol (http , https)
credentials HashMap No null Credentials to authenticate on the proxy server

If the proxy server requires authentication, credentials must be specified in the proxy configuration parameters as:

Parameter Type Required Default Description
user string Yes live Username to perform authentication
password string Yes null Proxy server password

Example:

import net.webpossdk.api.ChainsideClient;
import net.webpossdk.object.CallbackList;

HashMap<String, Object> config = new HashMap();
config.put("mode", "live");
config.put("clientId", WEBPOS_CLIENT_ID);
config.put("secret", WEBPOS_SECRET);
HashMap<String,String> credentials = new HashMap();
credentials.put("user", PROXY_USERNAME);    
credentials.put("password", PROXY_PWD);
HashMap<String,Object> proxyConfig =  new HashMap();
    proxyConfig.put("hostname", PROXY_HOSTNAME);
    proxyConfig.put("port", 8000);
    proxyConfig.put("protocol", "http");
    proxyConfig.put("credentials", credentials);

ChainsideClient client = new ChainsideClient(config); 

Client

The Library exposes a client object which is instantiated with the system configuration and provides an high-level interface to send requests. Client's instances take care of compiling and sending http request and parse responses into SdkObject instances.

Objects

The library defines an SdkObject class which is extended by actual objects which represent Chainside-Pay API requests and response bodies. Every json object defined in the API has a corresponding SdkObject class which is either the input of a client instance method (for creation) or returned (for reading)

Callbacks

Callbacks are requests sent by the server to your application in order to notify about some events. Every callback is sent only to HTTPS webhooks and will be securely signed by the server in order to be verified.

Usage

The following sections will describe how to use the SDK library and all the detail needed to integrate your business with Chainside Pay.

Instantiate and use the client

In order to communicate with our backend first you need to instantiate the client:

import net.webpossdk.api.ChainsideClient;
import net.webpossdk.object.CallbackList;

HashMap<String, Object> config = new HashMap<>();
config.put("mode", "live");
config.put("clientId", "{webpos_client_id}");
config.put("secret", "{webpos_secret}");

PaymentOrderCreation paymentOrder = new PaymentOrderCreation();
paymentOrder.setAmount("10.00");
paymentOrder.setReference("#1");
paymentOrder.setDetails("#1 details");
paymentOrder.setRequiredConfirmations(3);
PaymentOrderCreationResponse resp = client.createPaymentOrder(paymentOrder);

String btcAddress = resp.address // will output the payment order address
                        

Once the client is instantiated and configured, you can use the following methods to send requests:

Method
clientCredentialsLogin(clientcredentials:ClientCredentials) : ClientCredentialsLoginResponse
deletePaymentOrder(paymentOrderUuid:uuid) : PaymentOrderDeletionResponse
getPaymentOrder(paymentOrderUuid:uuid) : PaymentOrderRetrieval
getPaymentOrders(page:String,pageSize:String,sortBy:String,sortOrder:String,status:String) : PaymentOrderList
createPaymentOrder(paymentordercreation:PaymentOrderCreation) : PaymentOrderCreationResponse
getCallbacks(paymentOrderUuid:uuid) : CallbackList
paymentReset(paymentOrderUuid:uuid) : PaymentOrderRetrieval
paymentUpdate(paymentOrderUuid:uuid,paymentupdateobject:PaymentUpdateObject) : None

Objects

ClientCredentials

Data required to perform a confidential client login

Attributes

Attribute Type Required Description
grant_type string Yes Oauth2 Authorization's grant type
scope string Yes Oauth2 scope of the client's authorization

ClientCredentialsLoginResponse

Response data for a login performed by a confidential client.

Attributes

Attribute Type Required Description
id_token string Yes Jwt Token containing identity's informations
token_type string Yes Token's type
expires_in integer Yes Token's expiration time
scope string No Authorization's scope
access_token string Yes User's access token

PaymentOrderDeletionResponse

Payment order deletion response

Attributes

Attribute Type Required Description
cancel_url string Yes The URL where the user is redirected upon payment order expiration/cancellation

PaymentOrderRetrieval

Payment order retrieval data

Attributes

Attribute Type Required Description
transactions [Transaction] Yes Transactions paying the payment order
resolved_at string Yes Time at which either the payment order has been fully paid or is expired
created_by PaymentOrderCreator Yes Data of the pos which created the payment order
reference string Yes Business' reference for the payment order
address string Yes Bitcoin address of the payment order
expiration_time string Yes Expiration date of the payment order
rate RateRetrieval Yes Crypto/Fiat rate of the payment order
btc_amount integer Yes Bitcoin amount of the payment order
callback_url string Yes The URL contacted to send callbacks related to payment status changes
redirect_url string Yes URL where to redirect the user to perform the payment
created_at string Yes Creation date of the payment order
state PaymentOrderState Yes Current payment state of the payment order
chargeback_date string Yes Time at which either the payment order has been fully paid or is expired
currency CurrencyRetrieval Yes Fiat currency of the payment order
uuid string Yes UUID of the payment order
expires_in integer Yes Expiration time of the payment order
dispute_start_date string Yes Time at which either the payment order has been fully paid or is expired
details string Yes Payment order's details
amount string Yes Fiat's amount of the payment order
required_confirmations integer Yes Required confirmations for transactions paying the payment order
uri string Yes Bitcoin uri

Transaction

Bitcoin transaction paying a payment order

Attributes

Attribute Type Required Description
outs_sum integer Yes Paying amount of the transaction
blockchain_status string Yes Transaction's internal status
txid string Yes Transaction's id
outs [Out] Yes Transaction's outputs
created_at string Yes
status string Yes Transaction's status
normalized_txid string Yes Transaction's normalized id

Out

Transaction's output

Attributes

Attribute Type Required Description
amount integer Yes Output's amount
n integer Yes Transaction output's index

PaymentOrderCreator

Data of payment order's creator

Attributes

Attribute Type Required Description
uuid string Yes Payment order creator's uuid
deposit_account DepositAccountLite Yes Deposit account associated to the payment order's creator
type string Yes Payment order creator's type
name string Yes Payment order creator's name
active bool No Wheter the creator is ctive

DepositAccountLite

Deposit account lite object when sent nested in other api objects

Attributes

Attribute Type Required Description
uuid string Yes Deposit account's uuid
name string Yes Deposit account's name
type string Yes Deposit account's type

RateRetrieval

Rate Data

Attributes

Attribute Type Required Description
value string Yes Value of the rate
from string No Starting currency for rate calculation
created_at string Yes Creation's date of the rate
to string No Target currency for rate calculation
source string Yes Exchange providing the rate

PaymentOrderState

Data describing the current state of a payment order

Attributes

Attribute Type Required Description
status string Yes Payment order's status
blockchain_status string Yes Payment order's internal status
paid PaidStatus Yes Payment order's paid amount
in_confirmation PaidStatus Yes Payment order's paid but unconfirmed amount
unpaid PaidStatus Yes Payment order's unpaid amount

PaidStatus

Cryto and fiat paid amounts

Attributes

Attribute Type Required Description
crypto integer Yes Cryto Amount
fiat string Yes Fiat Amount

CurrencyRetrieval

Currency Data

Attributes

Attribute Type Required Description
uuid string Yes UUID of the currency
name string Yes Name of the currency
type string Yes Currency's type (fiat/crypto)

PaymentOrderList

List of Business' payment orders

Attributes

Attribute Type Required Description
total_items integer Yes Total number of items
total_pages integer Yes Total number of pages given the requested page size
paymentorders [PaymentOrderRetrieval] Yes Business' payment orders

PaymentOrderCreation

Data required to create a new payment order

Attributes

Attribute Type Required Description
cancel_url string No The URL where the user is redirected upon successful payment order expiration/cancellation
details string Yes Payment order's details
amount string Yes Payment order's fiat amount
callback_url string No The URL contacted to send callbacks related to payment status changes
required_confirmations integer No Required confirmations for transactions paying the payment order
continue_url string No The URL where the user is redirected upon successful payment
reference string No Business' reference of the payment order

PaymentOrderCreationResponse

Response data for a payment order creation request

Attributes

Attribute Type Required Description
address string Yes Bitcoin address of the payment order
uuid string Yes UUID of the payment order
expires_in integer Yes Expiration's time of the payment order
expiration_time string Yes Expiration's date of the payment order
rate RateRetrieval Yes Crypto/Fiat rate of the payment order
redirect_url string Yes URL where to redirect the user to perform the payment
uri string Yes Bitcoin uri according to BIP 21 (https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki)
amount integer Yes Crypto amount of the payment order

CallbackList

Callback list object

Attributes

Attribute Type Required Description
callbacks [Callback] Yes Valid payment transitions callbacks

Callback

Callback Retrieval object

Attributes

Attribute Type Required Description
name string Yes Namespace of a callback sent after the related payment status' transition

PaymentUpdateObject

Callback's trigger request body

Attributes

Attribute Type Required Description
callback string Yes Name of the callback to be sent

CallbackPaymentOrder

Payment order retrieval data

Attributes

Attribute Type Required Description
transactions [Transaction] Yes Transactions paying the payment order
resolved_at string Yes Time at which either the payment order has been fully paid or is expired
created_by PaymentOrderCreator Yes Data of the pos which created the payment order
reference string Yes Business' reference for the payment order
required_confirmations integer Yes Required confirmations for transactions paying the payment order
currency CurrencyRetrieval Yes Fiat currency of the payment order
rate RateRetrieval Yes Crypto/Fiat rate of the payment order
redirect_url string Yes URL where to redirect the user to perform the payment
callback_url string Yes The URL contacted to send callbacks related to payment status changes
btc_amount integer Yes Bitcoin amount of the payment order
created_at string Yes Creation date of the payment order
state PaymentOrderState Yes Current payment state of the payment order
chargeback_date string Yes Time at which either the payment order has been fully paid or is expired
expiration_time string Yes Expiration date of the payment order
uuid string Yes UUID of the payment order
continue_url string Yes The URL where the user is redirected upon successful payment
expires_in integer Yes Expiration time of the payment order
dispute_start_date string Yes Time at which either the payment order has been fully paid or is expired
details string Yes Payment order's details
address string Yes Bitcoin address of the payment order
amount string Yes Fiat's amount of the payment order
cancel_url string Yes The URL where the user is redirected upon payment order expiration/cancellation
uri string Yes Bitcoin uri

Exceptions

Every exception raised due to Chainside error responses contains debug informations.

try{
    client.createPaymentOrder(paymentOrder)
}catch (ChainsideHttpExceptio e){
    System.out.println(e.getDebugInfo())
    System.out.println(e.getRequestId())
}

Debug Info contains general information about request and response headers, body and status code. Request Id is an internal id which can be communicated to chainside in order to help debugging the problem in case this cannot be identified.

Callbacks

Chainside will send callbacks if some event is triggered regarding one of your assets registered on the Business Panel. Our server will send a request to your webhooks that you need to parse and verify. You can do this using this SDK library in the following way:

HashMap<String, Object> config = new HashMap<>();
config.put("mode", "live");
config.put("clientId", "{webpos_client_id}");
config.put("secret", "{webpos_secret}");

ChainsideApiContext ctx = new ChainsideApiContext(config);
ChainsideCallbackHandler handler = new ChainsideCallbackHandler(ctx);

/* Retrieve http request and raw body in as an array of bytes
HashMap<String, String> headers = request.getHeaders(); 
byte[] rawBody = request.getRawBody(); 
*/

SdkObject parsedObject = handler.parse(headers, rawBody);

Callback structure

Parameter Type Required Description
object CallbackPaymentOrder Yes
created_at string Yes Date in which the callback was sent
object_type string Yes Type of the object sent in the callback
event string Yes Event which triggered the callback

Triggered events

Event Object Class
payment.completed CallbackPaymentOrder
payment.dispute.start CallbackPaymentOrder
payment.overpaid CallbackPaymentOrder
payment.cancelled CallbackPaymentOrder
payment.dispute.end CallbackPaymentOrder
payment.expired CallbackPaymentOrder
payment.chargeback CallbackPaymentOrder

Contributing

In order to maintain consistency between our backend and our SDKs, contributing through pull requests is highly discouraged. Consider posting an issue if you need to signal any problem with this library.

Security Issues

In case of a discovery of an actual or potential security issue please contact us at [email protected]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.