Quaife

Payment without borders

Seamlessly process payments worldwide in 190 currencies

Accept a range of payments

Accept all types of credit and debit card payments in 190+ currencies. Benefiting from features such as deferred and recurring payments.

Get the highest level of security

Enjoy peace of mind that your customers’ data is secure with our level 1 PCI DSS certification. Enjoy advanced fraud screening tools as standard.

Dedicated Account Manager

Get the support you need when you need it. We’re here to answer your queries by phone, email or Twitter, 24 hours a day, 7 days a week.

Developer Kits- example

1. Prepare the checkout

First, perform a server-to-server POST request to prepare the checkout with the required data, including the order type, amount and currency. The response to a successful request is a JSON string with an id, which is required in the second step to create the payment form.

curl https://test.oppwa.com/v1/payments \
  -d "authentication.userId=8a8294174e735d0c014e86d5e0ee217b" \
  -d "authentication.password=74nrfbej8a" \
  -d "authentication.entityId=8a8294174e735d0c014e86d5e0db2177" \
  -d "amount=92.00" \
  -d "currency=EUR" \
  -d "paymentBrand=VISA" \
  -d "paymentType=DB" \
  -d "card.number=4200000000000000" \
  -d "card.holder=Jane Jones" \
  -d "card.expiryMonth=05" \
  -d "card.expiryYear=2018" \
  -d "card.cvv=123"
public Dictionary Request() {
  Dictionary responseData;
  string data="authentication.userId=8a8294174e735d0c014e86d5e0ee217b" +
    "&authentication.password=74nrfbej8a" +
    "&authentication.entityId=8a8294174e735d0c014e86d5e0db2177" +
    "&amount=92.00" +
    "¤cy=EUR" +
    "&paymentBrand=VISA" +
    "&paymentType=DB" +
    "&card.number=4200000000000000" +
    "&card.holder=Jane Jones" +
    "&card.expiryMonth=05" +
    "&card.expiryYear=2018" +
    "&card.cvv=123";
  string url = "https://test.oppwa.com/v1/payments";
  byte[]  buffer = Encoding.ASCII.GetBytes(data);
  HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
  request.Method = "POST";
  request.ContentType = "application/x-www-form-urlencoded";
  Stream PostData = request.GetRequestStream();
  PostData.Write(buffer, 0, buffer.Length);
  PostData.Close();
  using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
  {
      Stream dataStream = response.GetResponseStream();
      StreamReader reader = new StreamReader(dataStream);
      var s = new JavaScriptSerializer();
      responseData = s.Deserialize>(reader.ReadToEnd());
      reader.Close();
      dataStream.Close();
  }
  return responseData;
}

responseData = Request()["result"]["description"];
import groovy.json.JsonSlurper

public static String request() {
  def data = "authentication.userId=8a8294174e735d0c014e86d5e0ee217b" +
    "&authentication.password=74nrfbej8a" +
    "&authentication.entityId=8a8294174e735d0c014e86d5e0db2177" +
    "&amount=92.00" +
    "¤cy=EUR" +
    "&paymentBrand=VISA" +
    "&paymentType=DB" +
    "&card.number=4200000000000000" +
    "&card.holder=Jane Jones" +
    "&card.expiryMonth=05" +
    "&card.expiryYear=2018" +
    "&card.cvv=123"
  def url = "https://test.oppwa.com/v1/payments".toURL()
  def connection = url.openConnection()
  connection.setRequestMethod("POST")
  connection.doOutput = true
  connection.outputStream << data
  def json = new JsonSlurper().parseText(connection.inputStream.text)
  json
}
println request()
private String request() throws IOException {
  URL url = new URL("https://test.oppwa.com/v1/payments");

  HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
  conn.setRequestMethod("POST");
  conn.setDoInput(true);
  conn.setDoOutput(true);

  String data = ""
    + "authentication.userId=8a8294174e735d0c014e86d5e0ee217b"
    + "&authentication.password=74nrfbej8a"
    + "&authentication.entityId=8a8294174e735d0c014e86d5e0db2177"
    + "&amount=92.00"
    + "¤cy=EUR"
    + "&paymentBrand=VISA"
    + "&paymentType=DB"
    + "&card.number=4200000000000000"
    + "&card.holder=Jane Jones"
    + "&card.expiryMonth=05"
    + "&card.expiryYear=2018"
    + "&card.cvv=123";

  DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
  wr.writeBytes(data);
  wr.flush();
  wr.close();
  int responseCode = conn.getResponseCode();
  InputStream is;

  if (responseCode >= 400) is = conn.getErrorStream();
  else is = conn.getInputStream();

  return IOUtils.toString(is);
}
var http = require('https');
var querystring = require('querystring');

function request(callback) {
  var path='/v1/payments';
  var data = querystring.stringify( {
    'authentication.userId' : '8a8294174e735d0c014e86d5e0ee217b',
    'authentication.password' : '74nrfbej8a',
    'authentication.entityId' : '8a8294174e735d0c014e86d5e0db2177',
    'amount' : '92.00',
    'currency' : 'EUR',
    'paymentBrand' : 'VISA',
    'paymentType' : 'DB',
    'card.number' : '4200000000000000',
    'card.holder' : 'Jane Jones',
    'card.expiryMonth' : '05',
    'card.expiryYear' : '2018',
    'card.cvv' : '123'
  });
  var options = {
    port: 443,
    host: 'test.oppwa.com',
    path: path,
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Content-Length': data.length
    }
  };
  var postRequest = http.request(options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
      jsonRes = JSON.parse(chunk);
      return callback(jsonRes);
    });
  });
  postRequest.write(data);
  postRequest.end();
}
  
request(function(responseData) {
  console.log(responseData);
});
function request() {
  $url = "https://test.oppwa.com/v1/payments";
  $data = "authentication.userId=8a8294174e735d0c014e86d5e0ee217b" .
    "&authentication.password=74nrfbej8a" .
    "&authentication.entityId=8a8294174e735d0c014e86d5e0db2177" .
    "&amount=92.00" .
    "¤cy=EUR" .
    "&paymentBrand=VISA" .
    "&paymentType=DB" .
    "&card.number=4200000000000000" .
    "&card.holder=Jane Jones" .
    "&card.expiryMonth=05" .
    "&card.expiryYear=2018" .
    "&card.cvv=123";

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// this should be set to true in production
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $responseData = curl_exec($ch);
  if(curl_errno($ch)) {
    return curl_error($ch);
  }
  curl_close($ch);
  return $responseData;
}
$responseData = request();
import urllib, urllib2, json

def request():
  url = "https://test.oppwa.com/v1/payments"
  data = {
    'authentication.userId' : '8a8294174e735d0c014e86d5e0ee217b',
    'authentication.password' : '74nrfbej8a',
    'authentication.entityId' : '8a8294174e735d0c014e86d5e0db2177',
    'amount' : '92.00',
    'currency' : 'EUR',
    'paymentBrand' : 'VISA',
    'paymentType' : 'DB',
    'card.number' : '4200000000000000',
    'card.holder' : 'Jane Jones',
    'card.expiryMonth' : '05',
    'card.expiryYear' : '2018',
    'card.cvv' : '123'
  }
  try:
    opener = urllib2.build_opener(urllib2.HTTPHandler)
    request = urllib2.Request(url, data=urllib.urlencode(data))
    request.get_method = lambda: 'POST'
    response = opener.open(request)
    return json.loads(response.read());
  except urllib2.HTTPError, e:
    return e.code;

responseData = request();
print responseData;
require 'net/https'
require 'uri'
require 'json'

def request()
  uri = URI('https://test.oppwa.com/v1/payments')
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  req = Net::HTTP::Post.new(uri.path)
  req.set_form_data({
    'authentication.userId' => '8a8294174e735d0c014e86d5e0ee217b',
    'authentication.password' => '74nrfbej8a',
    'authentication.entityId' => '8a8294174e735d0c014e86d5e0db2177',
    'amount' => '92.00',
    'currency' => 'EUR',
    'paymentBrand' => 'VISA',
    'paymentType' => 'DB',
    'card.number' => '4200000000000000',
    'card.holder' => 'Jane Jones',
    'card.expiryMonth' => '05',
    'card.expiryYear' => '2018',
    'card.cvv' => '123'
  })
  res = http.request(req)
  return JSON.parse(res.body)
end

puts request()
def initialPayment : String = {
  val url = "https://test.oppwa.com/v1/payments"
  val data = (""
    + "authentication.userId=8a8294174e735d0c014e86d5e0ee217b"
    + "&authentication.password=74nrfbej8a"
    + "&authentication.entityId=8a8294174e735d0c014e86d5e0db2177"
    + "&amount=92.00"
    + "¤cy=EUR"
    + "&paymentBrand=VISA"
    + "&paymentType=DB"
    + "&card.number=4200000000000000"
    + "&card.holder=Jane Jones"
    + "&card.expiryMonth=05"
    + "&card.expiryYear=2018"
    + "&card.cvv=123"
  )
  val conn = new URL(url).openConnection()

  conn match {
    case secureConn: HttpsURLConnection  => secureConn.setRequestMethod("POST")
    case _ => throw new ClassCastException
  }
  conn.setDoInput(true)
  conn.setDoOutput(true)
  IOUtils.write(data, conn.getOutputStream())
  conn.connect()
  if (conn.getResponseCode() >= 400) {
    return IOUtils.toString(conn.getErrorStream())
  }
  else {
    return IOUtils.toString(conn.getInputStream())
  }
}
Public Function Request() As Dictionary(Of String, Object)
  Dim url As String = "https://test.oppwa.com/v1/payments"
  Dim data As String = "" +
    "authentication.userId=8a8294174e735d0c014e86d5e0ee217b" +
    "&authentication.password=74nrfbej8a" +
    "&authentication.entityId=8a8294174e735d0c014e86d5e0db2177" +
    "&amount=92.00" +
    "¤cy=EUR" +
    "&paymentBrand=VISA" +
    "&paymentType=DB" +
    "&card.number=4200000000000000" +
    "&card.holder=Jane Jones" +
    "&card.expiryMonth=05" +
    "&card.expiryYear=2018" +
    "&card.cvv=123"

  Dim request As WebRequest = WebRequest.Create(url)
  request.Method = "POST"
  request.ContentType = "application/x-www-form-urlencoded"
  Dim byteArray As Byte() = Encoding.UTF8.GetBytes(data)
  request.ContentLength = byteArray.Length
  Dim dataStream As Stream = request.GetRequestStream()
  dataStream.Write(byteArray, 0, byteArray.Length)
  dataStream.Close()
  Dim webresponse As WebResponse = request.GetResponse()
  dataStream = webresponse.GetResponseStream()
  Dim reader As New StreamReader(dataStream)
  Dim response As String = reader.ReadToEnd()
  reader.Close()
  dataStream.Close()
  webresponse.Close()
  Dim jss As New System.Web.Script.Serialization.JavaScriptSerializer()
  Dim dict As Dictionary(Of String, Object) = jss.Deserialize(Of Dictionary(Of String, Object))(response)

  Return dict
End Function

responseData = Request()("result")("description")

2. Create the payment form

To create the payment form you just need to add the following lines of HTML/JavaScript to your page and populating the following variables

The checkout's id that you got in the response from step 1

<script src="https://test.oppwa.com/v1/paymentWidgets.js?checkoutId={checkoutId}"></script>

The shoopperResultUrl, which is the page on your site where the customer should be redirected to after the payment is processed and the brands that will be available.

<form action="{shopperResultUrl}" class="paymentWidgets" data-brands="VISA MASTER AMEX"></form>

3. Get the payment status

Once the payment has been processed, the customer is redirected to your shopperResultUrl along with a GET parameter resourcePath.

Important: The baseUrl must end in a "/", e.g. "https://test.oppwa.com/".

Then, to get the status of the payment, you should make a GET request to the baseUrl + resourcePath, including your authentication parameters.

 resourcePath=/v1/checkouts/{checkoutId}/payment
https://test.oppwa.com/v1/checkouts//payment
curl https://test.oppwa.com/v1/checkouts \
	-d "authentication.userId=8a82941756a2ab6f0156c1726d754d26" \
	-d "authentication.password=FMD9WRE4hq" \
	-d "authentication.entityId=8a82941756a2ab6f0156c1726c0b4d22" \
	-d "amount=92.00" \
	-d "currency=EUR" \
	-d "paymentType=DB"
            
public Dictionary Request() {
	Dictionary responseData;
	string data="authentication.userId=8a82941756a2ab6f0156c1726d754d26" +
		"&authentication.password=FMD9WRE4hq" +
		"&authentication.entityId=8a82941756a2ab6f0156c1726c0b4d22" +
		"&amount=92.00" +
		"¤cy=EUR" +
		"&paymentType=DB";
	string url = "https://test.oppwa.com/v1/checkouts";
	byte[]  buffer = Encoding.ASCII.GetBytes(data);
	HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
	request.Method = "POST";
	request.ContentType = "application/x-www-form-urlencoded";
	Stream PostData = request.GetRequestStream();
	PostData.Write(buffer, 0, buffer.Length);
	PostData.Close();
	using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
	{
	    Stream dataStream = response.GetResponseStream();
	    StreamReader reader = new StreamReader(dataStream);
	    var s = new JavaScriptSerializer();
	    responseData = s.Deserialize>(reader.ReadToEnd());
	    reader.Close();
	    dataStream.Close();
	}
	return responseData;
}

responseData = Request()["result"]["description"];
            
import groovy.json.JsonSlurper

public static String request() {
  def data = "authentication.userId=8a82941756a2ab6f0156c1726d754d26" +
    "&authentication.password=FMD9WRE4hq" +
    "&authentication.entityId=8a82941756a2ab6f0156c1726c0b4d22" +
    "&amount=92.00" +
    "¤cy=EUR" +
    "&paymentType=DB"
  def url = "https://test.oppwa.com/v1/checkouts".toURL()
  def connection = url.openConnection()
  connection.setRequestMethod("POST")
  connection.doOutput = true
  connection.outputStream << data
  def json = new JsonSlurper().parseText(connection.inputStream.text)
  json
}
println request()
        	
private String request() throws IOException {
	URL url = new URL("https://test.oppwa.com/v1/checkouts");

	HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
	conn.setRequestMethod("POST");
	conn.setDoInput(true);
	conn.setDoOutput(true);

	String data = ""
		+ "authentication.userId=8a82941756a2ab6f0156c1726d754d26"
		+ "&authentication.password=FMD9WRE4hq"
		+ "&authentication.entityId=8a82941756a2ab6f0156c1726c0b4d22"
		+ "&amount=92.00"
		+ "¤cy=EUR"
		+ "&paymentType=DB";

	DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
	wr.writeBytes(data);
	wr.flush();
	wr.close();
	int responseCode = conn.getResponseCode();
	InputStream is;

	if (responseCode >= 400) is = conn.getErrorStream();
	else is = conn.getInputStream();

	return IOUtils.toString(is);
}
           	
var https = require('https');
var https = require('https');
var querystring = require('querystring');

function request(callback) {
	var path='/v1/checkouts';
	var data = querystring.stringify( {
		'authentication.userId' : '8a82941756a2ab6f0156c1726d754d26',
		'authentication.password' : 'FMD9WRE4hq',
		'authentication.entityId' : '8a82941756a2ab6f0156c1726c0b4d22',
		'amount' : '92.00',
		'currency' : 'EUR',
		'paymentType' : 'DB'
	});
	var options = {
		port: 443,
		host: 'test.oppwa.com',
		path: path,
		method: 'POST',
		headers: {
			'Content-Type': 'application/x-www-form-urlencoded',
			'Content-Length': data.length
		}
	};
	var postRequest = https.request(options, function(res) {
		res.setEncoding('utf8');
		res.on('data', function (chunk) {
			jsonRes = JSON.parse(chunk);
			return callback(jsonRes);
		});
	});
	postRequest.write(data);
	postRequest.end();
}
	
request(function(responseData) {
	console.log(responseData);
});
           	
function request() {
	$url = "https://test.oppwa.com/v1/checkouts";
	$data = "authentication.userId=8a82941756a2ab6f0156c1726d754d26" .
		"&authentication.password=FMD9WRE4hq" .
		"&authentication.entityId=8a82941756a2ab6f0156c1726c0b4d22" .
		"&amount=92.00" .
		"¤cy=EUR" .
		"&paymentType=DB";

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// this should be set to true in production
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$responseData = curl_exec($ch);
	if(curl_errno($ch)) {
		return curl_error($ch);
	}
	curl_close($ch);
	return $responseData;
}
$responseData = request();
           	
import urllib, urllib2, json

def request():
	url = "https://test.oppwa.com/v1/checkouts"
	data = {
		'authentication.userId' : '8a82941756a2ab6f0156c1726d754d26',
		'authentication.password' : 'FMD9WRE4hq',
		'authentication.entityId' : '8a82941756a2ab6f0156c1726c0b4d22',
		'amount' : '92.00',
		'currency' : 'EUR',
		'paymentType' : 'DB'
	}
	try:
		opener = urllib2.build_opener(urllib2.HTTPHandler)
		request = urllib2.Request(url, data=urllib.urlencode(data))
		request.get_method = lambda: 'POST'
		response = opener.open(request)
		return json.loads(response.read());
	except urllib2.HTTPError, e:
		return e.code;

responseData = request();
print responseData;
           	
require 'net/https'
require 'uri'
require 'json'

def request()
	uri = URI('https://test.oppwa.com/v1/checkouts')
	http = Net::HTTP.new(uri.host, uri.port)
	http.use_ssl = true
	req = Net::HTTP::Post.new(uri.path)
	req.set_form_data({
		'authentication.userId' => '8a82941756a2ab6f0156c1726d754d26',
		'authentication.password' => 'FMD9WRE4hq',
		'authentication.entityId' => '8a82941756a2ab6f0156c1726c0b4d22',
		'amount' => '92.00',
		'currency' => 'EUR',
		'paymentType' => 'DB'
	})
	res = http.request(req)
	return JSON.parse(res.body)
end

puts request()
           	
def initialPayment : String = {
	val url = "https://test.oppwa.com/v1/checkouts"
	val data = (""
		+ "authentication.userId=8a82941756a2ab6f0156c1726d754d26"
		+ "&authentication.password=FMD9WRE4hq"
		+ "&authentication.entityId=8a82941756a2ab6f0156c1726c0b4d22"
		+ "&amount=92.00"
		+ "¤cy=EUR"
		+ "&paymentType=DB"
	)
	val conn = new URL(url).openConnection()

	conn match {
		case secureConn: HttpsURLConnection  => secureConn.setRequestMethod("POST")
		case _ => throw new ClassCastException
	}
	conn.setDoInput(true)
	conn.setDoOutput(true)
	IOUtils.write(data, conn.getOutputStream())
	conn.connect()
	if (conn.getResponseCode() >= 400) {
		return IOUtils.toString(conn.getErrorStream())
	}
	else {
		return IOUtils.toString(conn.getInputStream())
	}
}
           	
Public Function Request() As Dictionary(Of String, Object)
	Dim url As String = "https://test.oppwa.com/v1/checkouts"
	Dim data As String = "" +
		"authentication.userId=8a82941756a2ab6f0156c1726d754d26" +
		"&authentication.password=FMD9WRE4hq" +
		"&authentication.entityId=8a82941756a2ab6f0156c1726c0b4d22" +
		"&amount=92.00" +
		"¤cy=EUR" +
		"&paymentType=DB"

	Dim req As WebRequest = WebRequest.Create(url)
	req.Method = "POST"
	req.ContentType = "application/x-www-form-urlencoded"
	Dim byteArray As Byte() = Encoding.UTF8.GetBytes(data)
	req.ContentLength = byteArray.Length
	Dim dataStream As Stream = req.GetRequestStream()
	dataStream.Write(byteArray, 0, byteArray.Length)
	dataStream.Close()
	Dim res As WebResponse = req.GetResponse()
	Dim resStream = res.GetResponseStream()
	Dim reader As New StreamReader(resStream)
	Dim response As String = reader.ReadToEnd()
	reader.Close()
	resStream.Close()
	res.Close()
	Dim jss As New System.Web.Script.Serialization.JavaScriptSerializer()
	Dim dict As Dictionary(Of String, Object) = jss.Deserialize(Of Dictionary(Of String, Object))(response)

	Return dict
End Function

responseData = Request()("result")("description")
           	
authentication.userId=8a82941756a2ab6f0156c1726d754d26
authentication.password=FMD9WRE4hq
authentication.entityId=8a82941756a2ab6f0156c1726c0b4d22
amount=92.00
currency=EUR
paymentType=DB
           	

Payments Brands

A Simple Pricing Structure

Low Risk Business Sector

  • £100.00/month
  • £0.12 per transaction
  • Visa/Master EU 1.45%
  • Visa/Master outside EU 2.75%
  • £0.03 per fraud check

High Risk Business Sector

  • £100.00/month
  • £0.20 per transaction
  • Visa/Master EU 5.00%
  • Visa/Master outside EU 6.00%
  • £0.05 per fraud check

Discounted rates are available for businesses processing over £500k per month

MORE INFO

Payment Security

Payment Gateway that’s fully PCI DSS Level 1 certified and is a member of the PCI Initiative. Our two active redundant data centres and data recovery sites ensures that our clients have highly secure and resilient payment services with 99.99% availability.

Fraud Prevention

Internal risk checks

Quaife.net’s internal risk offering includes more than 120 risk checks, easily configured within our user interface, the Business Intelligence Platform. For an even simpler solution, our payment experts have devised OneClickSafe, three bundled fraud prevention options—smart, advanced, and excellent—that can be selected or changed with just one click. Some of our more popular individual internal fraud prevention options include:

  • 3D Secure
  • Alternative Payment Method
  • Selection
  • Black and white listing
  • Geo IP location checks
  • Velocity checks
  • Device fingerprinting

Third party fraud prevention providers

For payment providers focused on industries that need specialized risk checks or those than simply want additional layers of security, Quaife.net offers simple and rapid routing to nearly two dozen fraud prevention providers. In addition, with Fraud Preventer on Demand, we will quickly connect to any third party provider not yet in our network.

Contact