Sample code for 30+ languages & platforms
Java Requires Chilkat v11.0.0+

ShippingEasy.com Calculate Signature for API Authentication

See more HTTP Misc Examples

Demonstrates how to calculate the shippingeasy.com API signature for authenticating requests.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Crypt2;
import com.chilkatsoft.chilkat2.DateTime;
import com.chilkatsoft.chilkat2.Http;
import com.chilkatsoft.chilkat2.HttpResponse;
import com.chilkatsoft.chilkat2.JsonObject;
import com.chilkatsoft.chilkat2.StringBuilder;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        // First, concatenate these into a plaintext string using the following order:
        //
        //     Capitilized method of the request. E.g. "POST"
        //     The URI path
        //     The query parameters sorted alphabetically and concatenated together into a URL friendly format: param1=ABC&param2=XYZ
        //     The request body as a string if one exists
        //     All parts are then concatenated together with an ampersand. The result resembles something like this:
        //
        // "POST&/partners/api/accounts&api_key=f9a7c8ebdfd34beaf260d9b0296c7059&api_timestamp=1401803554&{ ... request body ... }"

        StringBuilder sbStringToSign = new StringBuilder();

        String httpVerb = "POST";
        String uriPath = "/partners/api/accounts";
        String queryParamsStr = "api_key=YOUR_API_KEY&api_timestamp=UNIX_EPOCH_TIMESTAMP";

        // Build the following JSON that will be the body of the request:

        // {
        //   "account": {
        //     "first_name": "Coralie",
        //     "last_name": "Waelchi",
        //     "company_name": "Hegmann, Cremin and Bradtke",
        //     "email": "se_greg_6d477b1e59e8ff24abadfb59d3a2de3e@shippingeasy.com",
        //     "phone_number": "1-381-014-3358",
        //     "address": "2476 Flo Inlet",
        //     "address2": "",
        //     "state": "SC",
        //     "city": "North Dennis",
        //     "postal_code": "29805",
        //     "country": "USA",
        //     "password": "abc123",
        //     "subscription_plan_code": "starter"
        //   }
        // }

        JsonObject json = new JsonObject();
        json.updateString("account.first_name", "Coralie");
        json.updateString("account.last_name", "Waelchi");
        json.updateString("account.company_name", "Hegmann, Cremin and Bradtke");
        json.updateString("account.email", "se_greg_6d477b1e59e8ff24abadfb59d3a2de3e@shippingeasy.com");
        json.updateString("account.phone_number", "1-381-014-3358");
        json.updateString("account.address", "2476 Flo Inlet");
        json.updateString("account.address2", "");
        json.updateString("account.state", "SC");
        json.updateString("account.city", "North Dennis");
        json.updateString("account.postal_code", "29805");
        json.updateString("account.country", "USA");
        json.updateString("account.password", "abc123");
        json.updateString("account.subscription_plan_code", "starter");

        json.setEmitCompact(false);
        System.out.println(json.emit());

        // First, let's get the current date/time in the Unix Epoch Timestamp format (which is just an integer)
        DateTime dt = new DateTime();
        dt.setFromCurrentSystemTime();
        // Get the UTC time.
        boolean bLocalTime = false;
        String unixEpochTimestamp = dt.getAsUnixTimeStr(bLocalTime);

        // Build the string to sign:
        sbStringToSign.append(httpVerb);
        sbStringToSign.append("&");
        sbStringToSign.append(uriPath);
        sbStringToSign.append("&");
        sbStringToSign.append(queryParamsStr);
        sbStringToSign.append("&");
        // Make sure to send the JSON body of a request in compact form..
        json.setEmitCompact(true);
        sbStringToSign.append(json.emit());

        // Use your API key here:
        String your_api_key = "f9a7c8ebdfd34beaf260d9b0296c7059";

        int numReplaced = sbStringToSign.replace("YOUR_API_KEY", your_api_key);
        numReplaced = sbStringToSign.replace("UNIX_EPOCH_TIMESTAMP", unixEpochTimestamp);

        // Do the HMAC-SHA256 with your API secret:
        String your_api_secret = "ea210785fa4656af03c2e4ffcc2e7b5fc19f1fba577d137905cc97e74e1df53d";
        Crypt2 crypt = new Crypt2();
        crypt.setMacAlgorithm("hmac");
        crypt.setEncodingMode("hexlower");
        crypt.setMacKeyString(your_api_secret);
        crypt.setHashAlgorithm("sha256");

        String api_signature = crypt.macStringENC(sbStringToSign.getAsString());
        System.out.println("api_signature: " + api_signature);

        // --------------------------------------------------------------------
        // Here's an example showing how to use the signature in a request:

        // Build a new string-to-sign and create a new api_signature for the actual request we'll be sending...
        sbStringToSign.clear();
        sbStringToSign.append("GET");
        sbStringToSign.append("&");
        sbStringToSign.append("/app.shippingeasy.com/api/orders");
        sbStringToSign.append("&");
        sbStringToSign.append(queryParamsStr);
        sbStringToSign.append("&");
        // There is no body for a GET request.

        api_signature = crypt.macStringENC(sbStringToSign.getAsString());

        Http http = new Http();
        JsonObject queryParams = new JsonObject();

        queryParams.updateString("api_signature", api_signature);
        queryParams.updateString("api_timestamp", unixEpochTimestamp);
        queryParams.updateString("api_key", your_api_key);

        HttpResponse resp = new HttpResponse();
        try {
            http.httpParams("GET", "https://app.shippingeasy.com/api/orders", queryParams, resp);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println("response status code = " + resp.getStatusCode());
        System.out.println("response body:");
        System.out.println(resp.getBodyStr());
    }
}