AuthorizeTicket

This service is used to authorize a payment on an existing ticket

The endpoint for the JSON service:

https://v2.api.dibspayment.com/merchant/v1/JSON/Transaction/AuthorizeTicket

Input parameters

Parameter Type Description
MAC * String. Max 62 characters Contains the calculated HMAC value for the used parameters.
amount * Integer

The smallest unit of an amount in the selected currency, following the ISO4217 standard (see the minor unit list here).

Example:

Smallest unit for EUR is "cent" thus setting 'amount="150"' becomes 1,50 EUR
Smallest unit for JPY is "yen" thus setting 'amount="150"' becomes 150 JPY
currency * String. 3 characters. The currency. Either the numeric or alphabetic ISO4217 code is accepted.
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).
ticketId * String. Max 36 characters The ticket previously created either via the Payment Window or using the createTicket service.

*: Always validated by DIBS

Return parameters

Parameter Type Description
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
transactionIdString. Max 36 charactersThe ID of the transaction is returned if status is ACCEPT.
 

 

Code examples

<form method="post" action="https://api.dibspayment.com/merchant/v2/JSON/Transaction/AuthorizeTicket">
<input name="request" value='{
  "merchantId":"12345678",
  "currency":"208",
  "amount":"10000",
  "ticketId":"987654321",
  "orderId":"my_orderid-1234",
  "MAC":"1ad2bf10a99c7f9316f9ae720c4dd37e28c7765fec8136728a4b73329e7ad89c"
}' 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;
}
/**
* AuthorizeTicket
* Makes a new authorization on an existing ticket using the AuthorizeTicket JSON service
* @param int @amount The amount of the purchase in smallest unit
* @param string @currency The currency either in numeric or string format (e.g. 208/DKK)
* @param int @merchantId DIBS Merchant ID / customer number
* @param string @orderId The shops order ID for the purchase
* @param string @ticketId The ticket number on which the authorization should be done
* @param string @K The secret HMAC key from DIBS Admin
*/
function AuthorizeTicket($amount, $currency, $merchantId, $orderId, $ticketId, $K) {
  //Create message array consisting of all input parameters
  $message = array(
    "merchantId" => $merchantId,
    "amount" => $amount,
    "currency" => $currency,
    "orderId" => $orderId,
    "ticketId" => $ticketId,
  );
  
  //Calculate MAC value for request
  $mac = calculateMac($message, $K); 
  $message["MAC"] = $mac;
  
  //Post to the DIBS system
  $res = postToDIBS("AuthorizeTicket", $message);
  
  if ($res["status"] == "ACCEPT") {
    //Payment accepted. Check $res["transactionId"] for transaction 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;
/**
* AuthorizeTicket
* Makes a new authorization on an existing ticket using the AuthorizeTicket JSON service
* @param amount The amount of the purchase in smallest unit
* @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 ticketId The ticket number on which the authorization should be done
* @param K The secret HMAC key from DIBS Admin
**/
static void AuthorizeTicket(string amount, string currency, string merchantId, string orderId, string ticketId, 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> {
    {"amount", amount},
    {"currency",currency},
    {"merchantId", merchantId},
    {"ticketId", ticketId},
    {"orderId", orderId}
  };

  //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("AuthorizeTicket", message);

  System.Console.WriteLine("Ticket authorization 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
 */
/**
 * AuthorizeTicket Makes a new authorization on an existing ticket using the AuthorizeTicket JSON service
 *
 * @param amount The amount of the purchase in smallest unit
 * @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 ticketId The ticket number on which the authorization should be done
 * @param macKeyHex The secret HMAC key from DIBS Admin
 */
public void AuthorizeTicket(int amount, String currency, String merchantId, String orderId, String ticketId, String macKeyHex) {

  // Create JSON object and add parameters
  Map<String, String> parameters = new HashMap<String, String>();
  parameters.put("amount", String.valueOf(amount));
  parameters.put("currency", currency);
  parameters.put("merchantId", merchantId);
  parameters.put("orderId", orderId);
  parameters.put("ticketId", ticketId);

  // 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, "AuthorizeTicket");

  if (resp.get("status").equals("ACCEPT")) {
    // Authorization accepted. Check resp.get("transactionId") for transaction ID
    // ...
    System.out.println("Ticket Auth accepted. Response:");
    System.out.println(resp.toString());
  } else if (resp.get("status").equals("DECLINE")) {
    // Authorization declined. Check resp.get("declineReason") for more information
    // ...
    System.out.println("Ticket Auth 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 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