CreateTicket

This service performs an authorization of a credit or debit card and, if successful, saves the card information for recurring payments

The endpoint for the JSON service:

https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/CreateTicket
Note: Handling of card data must be in compliance with the existing PCI rules dictated by your acquirer.
 

Essential input parameters

Parameter Type Description
MAC * String. Max 62 characters Contains the calculated HMAC value for the used parameters.
cardNumber * String. Max 19 characters The credit card number.
clientIp * String. Max 39 characters The customer's IP adress.
currency * String. 3 characters. The currency. Either the numeric or alphabetic ISO4217 code is accepted.
cvc Integer The card verification code.
expMonth Integer The expiration month, e.g. 8 for August and 12 for December.
expYear Integer The expiration year in two digits, e.g. 18 for 2018.
merchantId * String. Max 36 characters Integration ID from DIBS Admin 2.0.
orderId * String. Max 50 characters The shop’s order number for this particular puchase. It can be seen later when payment is captured, and will in some instances appear on the customer's bank statement (both numerals and letters may be used).

*: Always validated by DIBS

Optional input parameters

ParameterTypeDescription
issueNumberIntegerThe issue number - applicable for some maestro/solo cards.
startMonthInteger

The start month - applicable for some maestro/solo cards.

startYearInteger

The start year - applicable for some maestro/solo cards.

testBoolean

Use the set up test acquirers.

 

Return parameters

ParameterTypeDescription
acquirerString. Max 36 characters

The acquirer used for the specific transaction if ACCEPT.

declineReasonString. Max 140 characters

Reason for decline or failure of the authorization. Will not be returned for successful calls.

statusString. Max 36 charactersACCEPT/DECLINE/ERROR
ticketIdString. Max 36 characters

The ID of the ticket is returned if status is ACCEPT.

 

Code examples

<form method="post" action="https://api.dibspayment.com/merchant/v2/JSON/Transaction/CreateTicket">
<input name="request" value='{
    "merchantId":"12345678",
    "currency":"208",
    "orderId":"my_orderid-1234",
    "cardNumber":"4711100000000000",
    "expMonth":"6",
    "expYear":"24",
    "cvc":"684",
    "clientIp":"123.321.123.321",
    "MAC":"55423b3c17794295faf449af7bd61c742d081bb440d685d17b70debf0cf74d89",
}' type="hidden" />
</form>
/**
* postToDIBS
* Sends a set of parameters to a DIBS API function
* @param string $paymentFunction The name of the target payment function, e.g. AuthorizeCard
* @param array $params A set of parameters to be posted in key => value format
* @return array
*/
function postToDIBS($paymentFunction, $params) {
  //Create JSON string from array of key => values
  $json_data = json_encode($params);
  
  //Set correct POST URL corresponding to the payment function requested
  switch ($paymentFunction) {
    case "AuthorizeCard":
      $postUrl = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/AuthorizeCard";
      break;
    case "AuthorizeTicket":
      $postUrl = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/AuthorizeTicket";
      break;
    case "CancelTransaction":
      $postUrl = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/CancelTransaction";
      break;
    case "CaptureTransaction":
      $postUrl = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/CaptureTransaction";
      break;
    case "CreateTicket":
      $postUrl = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/CreateTicket";
      break;
    case "RefundTransaction":
      $postUrl = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/RefundTransaction";
      break;
    case "Ping":
      $postUrl = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/Ping";
      break;
    default:
      echo("Wrong input paymentFunctions to postToDIBS");
      $postUrl = null;
  }
  
  //Use Curl to communicate with the server.
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL,$postUrl);
  curl_setopt($ch, CURLOPT_POST, 1);
  //curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); //Can be uncommented to specify SSL security level
  curl_setopt($ch, CURLOPT_POSTFIELDS, "request=" . $json_data);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
  $json_output = curl_exec ($ch);
  
  //Check for errors in the Curl operation
  if (curl_errno($ch) != 0) {
    error_log("Curl failed:");
    error_log(curl_getinfo($ch));
    error_log(curl_errno($ch));
    error_log(curl_error($ch));
  }
  curl_close ($ch);
  
  //Convert JSON server output to array of key => values
  $res = json_decode(urldecode($json_output), true);
  
  return $res;
}
/**
* CreateTicket
* Creates a ticket from a given card using the CreateTicket JSON service
* @param int @amount The amount of the purchase in smallest unit
* @param int @cardNumber The customers cardnumber
* @param string @clientIp The customers IP address
* @param string @currency The currency either in numeric or string format (e.g. 208/DKK)
* @param int @cvc Card Verification Value, 3 digit
* @param string @expMonth Expiry month of the card, 1 or 2 digits (e.g. 6/06)
* @param string @expYear Expiry year of the card, 2 digits (e.g. 18 for 2018)
* @param int @merchantId DIBS Merchant ID / customer number
* @param string @orderId The shops order ID for the purchase
* @param string @K The secret HMAC key from DIBS Admin
*/
function CreateTicket($amount, $cardNumber, $clientIp, $currency, $cvc, $expMonth, $expYear, $merchantId, $orderId, $K) {
  //Create message array consisting of all input parameters
  $message = array(
    "merchantId" => $merchantId,
    "currency" => $currency,
    "amount" => $amount,
    "orderId" => $orderId,
    "cardNumber" => $cardNumber,
    "expMonth" => $expMonth,
    "expYear" => $expYear,
    "cvc" => $cvc,
    "clientIp" => $clientIp,
  );

  //Uncomment following line for test mode to be active
  //$message["test"] = "true";

  //Calculate MAC value for request
  $mac = calculateMac($message, $K); 
  $message["MAC"] = $mac;

  //Post to the DIBS system
  $res = postToDIBS("CreateTicket", $message);

  if ($res["status"] == "ACCEPT") {
    //Ticket creation accepted. Check $res["ticketId"] for ticket ID.
    //Insert own code to update shop system
  } else if ($res["status"] == "DECLINE") { 
    //Check $res["declineReason"] for more information.
    //Insert own code to update shop system
  } else {
    //An error happened. Check $res["declineReason"] for more information.
    //Insert own code to update shop system
  }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Web;
using System.IO;
using Newtonsoft.Json;
using System.Globalization;
using System.Security.Cryptography;
/**
* postToDIBS
* Sends a set of parameters to a DIBS API function
* @param paymentFunction The name of the target payment function, e.g. AuthorizeCard
* @param data A set of parameters to be posted in Dictionary<string, string> format
* @return Dictionary<string, string>
*/
static Dictionary<string, string> postToDIBS(string paymentFunction, Dictionary<string, string> data)  {
  //Set correct POST URL corresponding to the payment function requested
  string postUrl = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/";
  switch (paymentFunction) {
    case "AuthorizeCard":
      postUrl += "AuthorizeCard";
      break;
    case "AuthorizeTicket":
      postUrl += "AuthorizeTicket";
      break;
    case "CancelTransaction":
      postUrl += "CancelTransaction";
      break;
    case "CaptureTransaction":
      postUrl += "CaptureTransaction";
      break;
    case "CreateTicket":
      postUrl += "CreateTicket";
      break;
    case "RefundTransaction":
      postUrl += "RefundTransaction";
      break;
    case "Ping":
      postUrl += "Ping";
      break;
    default:
      System.Console.WriteLine("Wrong input paymentFunctions to postToDIBS");
      postUrl = null;
      break;
  }

  //Create JSON string from Dictionary<string, string>
  string json_data = JsonConvert.SerializeObject(data);
  json_data = "request=" + json_data;

  ASCIIEncoding encoding = new ASCIIEncoding();
  byte[] json_data_encoded = encoding.GetBytes(json_data);

  //Using HttpWebRequest for posting and receiving response
  HttpWebRequest con = (HttpWebRequest)WebRequest.Create(postUrl);

  con.Method = "POST";
  con.ContentType = "application/x-www-form-urlencoded";
  con.ContentLength = json_data_encoded.Length;
  con.Timeout = 15000; //15 seconds timeout

  //Send the POST request
  using (Stream stream = con.GetRequestStream()) {
    stream.Write(json_data_encoded, 0, json_data_encoded.Length);
  }

  //Receive response
  Dictionary<string, string> res_dict = new Dictionary<string, string> {};
  try {
    HttpWebResponse response = (HttpWebResponse)con.GetResponse();
    string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    responseString = HttpUtility.UrlDecode(responseString);
    //Create Dictionary<string,string> hashmap from response JSON data
    res_dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseString);
  }
  catch (System.Net.WebException) {
    Console.WriteLine("Timeout occured...");
  }
  return res_dict;
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using Newtonsoft.Json;
using System.Globalization;
using System.Security.Cryptography;
/**
* CreateTicket
* Creates a ticket from a given card using the CreateTicket JSON service
* @param amount The amount of the purchase in smallest unit
* @param cardNumber The customers cardnumber
* @param clientIp The customers IP address
* @param currency The currency either in numeric or string format (e.g. 208/DKK)
* @param cvc Card Verification Value, 3 digit
* @param expMonth Expiry month of the card, 1 or 2 digits (e.g. 6/06)
* @param expYear Expiry year of the card, 2 digits (e.g. 18 for 2018)
* @param merchantId DIBS Merchant ID / customer number
* @param orderId The shops order ID for the purchase
* @param K The secret HMAC key from DIBS Admin
*/
static void CreateTicket(string cardNumber, string clientIp, string currency, string cvc, string expMonth, string expYear, string merchantId, string orderId, string K) {
  //Create Dictionary<string, string> object with used values. Can be modified to contain additional parameters.
  Dictionary<string, string> message = new Dictionary<string, string> {
    {"cardNumber", cardNumber},
    {"clientIp", clientIp},
    {"currency",currency},
    {"cvc", cvc},
    {"expMonth", expMonth},
    {"expYear", expYear},
    {"merchantId", merchantId},
    {"orderId", orderId}
  };

  //Uncomment following line for test mode to be active
  message.Add("test", "true");

  //Calculate mac and add it
  string mac = calculateMac(message, K);
  message.Add("MAC", mac);

  //Use postToDIBS() function to send the parameters and receive the response
  Dictionary<string, string> res = postToDIBS("CreateTicket", message);

  System.Console.WriteLine("CreateTicket done.");
  System.Console.WriteLine("Response:");
  foreach (KeyValuePair<string, string> r in res) {
    System.Console.WriteLine("{0} = {1}", r.Key, r.Value);
  }
  System.Console.WriteLine();
}
/**
 * Dependencies:
 * Apache-Commons/Commons-Codec for Hex encoding/decoding
 * Codehaus/Jackson for JSON mapping
 */
/**
 * postToDIBS Sends a post to the specified DIBS function
 *
 * @param parameters A Map<String, String> holding the parameters to be parsed to DIBS
 * @param func A String holding the name of the function to be used
 * @return A Map<String, String> holding the parameters returned by DIBS
 */
public Map<String, String> postToDIBS(Map<String, String> parameters, String func) {
  try {
  	//Set the endpoint for the chosen function
		String endpoint = null;
		if (func.equals("AuthorizeCard")) {
			endpoint = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/AuthorizeCard";
		} else if (func.equals("AuthorizeTicket")) {
			endpoint = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/AuthorizeTicket";
		} else if (func.equals("CancelTransaction")) {
			endpoint = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/CancelTransaction";
		} else if (func.equals("CaptureTransaction")) {
			endpoint = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/CaptureTransaction";
		} else if (func.equals("CreateTicket")) {
			endpoint = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/CreateTicket";
		} else if (func.equals("RefundTransaction")) {
			endpoint = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/RefundTransaction";
		} else if (func.equals("Ping")) {
			endpoint = "https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/Ping";
		} else {
			System.out.println("Error in postToDIBS(): Given function does not exist");
			return null;
		}

    // Set properties for connection.
    // Connection is not initialized until parameters are posted
    URL url = new URL(endpoint);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");

    // Initiate output stream for connection and post message
    OutputStream out = connection.getOutputStream();
    out.write("request=".getBytes(Charset.forName("UTF-8")));
    ObjectMapper objectMapper = new ObjectMapper(); // ObjectMapper from the Jackson library
    objectMapper.writeValue(out, parameters);
    out.flush();
    out.close();

    if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
      // OK
      @SuppressWarnings("unchecked")
      Map<String, String> response = objectMapper.readValue(connection.getInputStream(), Map.class);
      return response;
    } else {
      // Server returned HTTP error code.
      System.out.println("HTTP error!" + connection.getResponseCode());
      return null;
    }
  } catch (MalformedURLException e) {
    e.printStackTrace();

  } catch (IOException e) {
    e.printStackTrace();
  }
  return parameters;
}
/**
 * Dependencies:
 * Apache-Commons/Commons-Codec for Hex encoding/decoding
 * Codehaus/Jackson for JSON mapping
 */
/**
 * CreateTicket Creates a ticket from a given card using the CreateTicket JSON service
 *
 * @param cardNumber The customers cardnumber
 * @param clientIp The customers IP address
 * @param currency The currency either in numeric or string format (e.g. 208/DKK)
 * @param merchantId DIBS Merchant ID / customer number
 * @param orderId The shops order ID for the purchase
 * @param cvc Card Verification Value, 3 digit
 * @param expMonth Expiry month of the card, 1 or 2 digits (e.g. 6/06)
 * @param expYear Expiry year of the card, 2 digits (e.g. 18 for 2018)
 * @param macKeyHex The secret HMAC key from DIBS Admin
 */
public void CreateTicket(String cardNumber, String clientIp, String currency, String merchantId, String orderId, String cvc, int expMonth, int expYear, String macKeyHex) {

  // Create JSON object and add parameters
  Map<String, String> parameters = new HashMap<String, String>();
  parameters.put("cardNumber", cardNumber);
  parameters.put("clientIp", clientIp);
  parameters.put("currency", currency);
  parameters.put("merchantId", merchantId);
  parameters.put("orderId", orderId);
  parameters.put("cvc", cvc);
  parameters.put("expMonth", String.valueOf(expMonth));
  parameters.put("expYear", String.valueOf(expYear));

  // Uncomment following line for test mode to be active
  parameters.put("test", String.valueOf(Boolean.TRUE));

  // Add MAC value for request
  parameters.put("MAC", calculateMac(parameters, macKeyHex));

  // Post to the DIBS system and receive response
  Map<String, String> resp = postToDIBS(parameters, "CreateTicket");

  if (resp.get("status").equals("ACCEPT")) {
    // Ticket creation accepted. Check resp.get("transactionId") for transaction ID
    // ...
    System.out.println("Ticket creation accepted. Response:");
    System.out.println(resp.toString());
  } else if (resp.get("status").equals("DECLINE")) {
    // Ticket creation declined. Check resp.get("declineReason") for more information
    // ...
    System.out.println("Ticket creation declined. Response:");
    System.out.println(resp.toString());
  } else {
    // An error happened. Check Check resp.get("declineReason") for more information
    // ...
    System.out.println("An error happened during Auth. Response:");
    System.out.println(resp.toString());
  }
}
Do you have a question or need help?
Follow us
DIBS Payment Services
Stockholm +46 (0)8-527 525 00
Göteborg +46 031-600 800
København +45 7020 3077
Oslo +47 21 55 44 00