Get started with SolidGate

Introduction

Solid provides a collection of APIs that enable you to easily process and manage payments. You can use the same integration for payments made with cards (including 3D Secure) and mobile wallets such as Apple and Google Pay.

Our APIs accept and return JSON body. You can consume the APIs directly using your favorite HTTP/REST library. 

Integration Options

There are two options of integration with SolidGate:

  • Payment Form – payment web-form on SolidGate end. It's simple but functionality restricted (it sustains only payment operations);
  • Host-to-Host API – full card details REST API. The payment form is hosted on the Merchant's end.

Only PCI DSS certified merchants can fully utilize H2H API considering that merchant accepts and processes card data on its end.

Integration Flow

To start, you will require access to your account in our Merchant Panel where you can find credentials for the API and where all data is shown. You could ask your Account Manager to send you an invite to the Panel or just create an account on your own.

A merchant is initially configured for working via the test environment. The Integration can be checked on this environment with a set of test cards. 

Merchant can go-live when integration is completed.

Endpoints

Please, do not block any IP address from our endpoints as they are not static.

API Endpoint URL - https://pay.solidgate.us/api/v3/

Processing Operations

All payments are depicted as orders which are considered to be the main indicator. Transactions are referred to be as separate operations within an order, i.e, charge, void, settle, refund.

Payment operations are deemed to be asynchronous. When payment is finalized, the current status can be detected as follows:

  • Via the Order Status Callback containing detailed information;
  • Get the current status of an order by requesting Check Order Status operation.

Authentication

To start accepting payments, even in the sandbox environment, you'll require credentials. The credentials are 2 pairs of Public(Merchant ID) and Secret(Private) Keys which should be applied for direct API calls and receiving webhook notifications accordingly.

Webhook keys have the prefix "wh_pk_/ wh_sk_" and API keys have the prefix "api_pk / api_sk"

You can easily find your credentials the in Merchant Panel

Merchant ID and its Private Key shall be applied to calculate the signature. The control signature allows verifying both the source and the integrity of the request details transmitted between the merchant and gateway. 

To authenticate, you should add the headers to each request as stated below:

MerchantUnique merchant identifier. Shall be shared at the moment of registration.
SignatureSignature of request. It allows verifying whether the request from the merchant is genuine on the payment gateway server.

Signature Creation

The value of a signature is a base64-encoded  value of hash function SHA-512. As for the encryption key, the merchant's private key should be applied. As for signature data, the following string shall be used:

merchantId + requestJsonData + merchantId

ParameterDescription
merchantIDPublic Key 
requestJsonDataRequest body in JSON string
privateKeySecret Key for signature generation. It's provided at the moment of merchant registration

Example of signature creation in PHP

/**
 * @param string $data
 *
 * @return string
 */

private function generateSignature($data)
{
    return base64_encode(
        hash_hmac('sha512',
            $this->getMerchantId() . $data . $this->getMerchantId(),
            $this->getPrivateKey())
    );
}

If signature creation is not correct, in response you will see as follows:

Request Authentication | Fail

{
  "error": {
    "code": "1.01",
    "messages": [
      "Authentication failed"
    ]
  }
}

Testing

Our sandbox environment provides an excellent opportunity to make sure everything is working perfectly. Sign up for your test account, then use the information in this section to try out your integration before going live.

Always use your test keys when testing your integration. This is how we know to link all test payments to your sandbox account. You can find your test keys in our Merchant Panel under your account settings.

 

   Cards for test payments

Test cardResult of using
1card_number: “4532456618142692”
card_holder: “Kurt Cruickshank”
card_exp_month: “03”
card_exp_year: “2029”
card_cvv: “967”
card_token: “card4532456618142692”
charge: success,
refund: success
2card_number: “5589800801939886”
card_holder: “TRINITY SIMON”
card_exp_month: “01”
card_exp_year: “2029”
card_cvv: “695”
card_token: “card5589800801939886”
charge: success,
refund: success
3card_number: “6763428189229070”
card_holder: “JOHN SNOW”
card_exp_month: “11”
card_exp_year: “2029”
card_cvv: “111”
card_token: “card6763428189229070"
charge: success,
refund: success
4card_number: “4916400491851”
card_holder: “Elenora Boehm”
card_exp_month: “09”
card_exp_year: “2029”
card_cvv: “492”
card_token: “card4916400491851”
charge: success
charge with token: fail
refund: success
5card_number: "4024007166621440"
card_exp_month: "09"
card_exp_year: "2029"
card_holder: "KAITLYN BECKER"
card_cvv: "137"
card_token: “card4024007166621440”
charge: success
charge with token: Decline - “Insufficient funds
refund: success
6card_number: “4929360879023”
card_holder: “Jeanette Russel”
card_exp_month: “07”
card_exp_year: “2029”
card_cvv: “519”
Decline: {code: 0.01 , message: “General decline”}
7card_number: “5151948477715326”
card_holder: “STEVEN EDWARDS”
card_exp_month: “10”
card_exp_year: “2029”
card_cvv: “100”
Decline: {code: 3.02, message: “Insufficient funds”}
8card_number: “4532003312475364”
card_holder: “BRANDON BROWN”
card_exp_month: “05”
card_exp_year: “2029”
card_cvv: “957”
Decline: {code: 0.02, message: “Order expired”}
9card_number: “4929213352238223”
card_holder: “LANDON GILSON”
card_exp_month: “06”
card_exp_year: “2029”
card_cvv: “204”
Decline: {code: 0.03, message: “Illegal operation”}
10card_number: “5462413335551193”
card_holder: “AMIA HAILEY”
card_exp_month: “07”
card_exp_year: “2029”
card_cvv: “369”
Decline: {code: 3.01, message: “Card is blocked”}
11card_number: “4485664001324176”
card_holder: “JENNA WIFKINSON”
card_exp_month: “08”
card_exp_year: “2029”
card_cvv: “383”
Decline: {code: 3.03, message: “Payment amount limit excess”}
12card_number: “5361250317309261”
card_holder: “JESSICA DICKINSON”
card_exp_month: “09”
card_exp_year: “2029”
card_cvv: “629”
Decline: {code: 3.04, message: “Transaction is declined by issuer”}
13card_number: “4916242642369774”
card_holder: “BLAKE YOUNG”
card_exp_month: “04”
card_exp_year: “2029”
card_cvv: “595”
Decline: {code: 3.05, message: “Call your bank”}
14card_number: “5299389115628964”
card_holder: “GABRIELLE WINTER”
card_exp_month: “03”
card_exp_year: “2029”
card_cvv: “772”
Decline: {code: 2.06, message: “Invalid CVV2 code”}
15card_number: “4539146503757117”
card_holder: “DIANA GIMSON”
card_exp_month: “02”
card_exp_year: “2029”
card_cvv: “661”
Decline: {code: 2.08, message: “Invalid card number”}
16card_number: “5199914302370491”
card_holder: “GABRIEL CARRINGTON”
card_exp_month: “01”
card_exp_year: “2029”
card_cvv: “820”
Decline: {code: 5.08, message: “Invalid transaction”}
17card_number: “4945960509912296”
card_holder: “ERIN BALD”
card_exp_month: “01”
card_exp_year: “2029"
card_cvv: “420”
Decline: {code: 2.09, message: “Invalid expiration date”}
18card_number: “5261820900437819”
card_holder: “SEAN DUNCAN”
card_exp_month: “01”
card_exp_year: “2029"
card_cvv: “272”
Decline: {code: 3.06, message: “Debit card not supported.”}