Small Print: There is a minimum monthly fee of £100.00 meaning you pay no monthly fee if your transaction fees are greater than £100.00.
Seamlessly process payments the
smarter way in up to 190 different
currencies using our dedicated
advanced payment systems…
Seamlessly process online payments in all card brands and in over 200 alternative payment methods.
Quaife payments
Being able to accept online payments may help your business grow. With Quaife online payments you can accept payments through your website, by phone (via a virtual terminal) and through links on email invoices.
Our various online payment options accept all major credit and debit cards, provide access to a range of fraud screening tools and allow you to choose how you want to integrate your website to the payment gateway, depending on the requirements of your business
Our Payment Gateway allows you to log into your merchant account, view all of your transactions, issue refunds, view payment analytics and edit fraud prevention settings.
At Quaife, it is our belief that integrations should be as simple and painless as possible.
Every integration is different and comes with it’s own issues and solutions. Our dedicated support team will help guide you through this process as quickly and efficiently as possible to get your payments up-and-running and get you processing transactions with ease.
Follow the 3 easy steps below to get stated intergrating your payment gateway.
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/checkouts \ -d "entityId=8a82941756a2ab6f0156c1726c0b4d22" \ -d "amount=92.00" \ -d "currency=EUR" \ -d "paymentType=DB" \ -H "Authorization: Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ=="
public Dictionary<string, dynamic> Request() { Dictionary<string, dynamic> responseData; string data="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.Headers["Authorization"] = "Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ=="; 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<Dictionary<string, dynamic>>(reader.ReadToEnd()); reader.Close(); dataStream.Close(); } return responseData; } responseData = Request()["result"]["description"];
import groovy.json.JsonSlurper public static String request() { def data = "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.setRequestProperty("Authorization","Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==") 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.setRequestProperty("Authorization", "Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ=="); conn.setDoInput(true); conn.setDoOutput(true); String data = "" + "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 querystring = require('querystring'); function request(callback) { var path='/v1/checkouts'; var data = querystring.stringify( { 'entityId':'8a82941756a2ab6f0156c1726c0b4d22', 'amount':'92.00', 'currency':'EUR', 'paymentType':'DB' }); var options = { port: 443, host: 'https://test.oppwa.com', path: path, method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': data.length, 'Authorization':'Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==' } }; 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 = "entityId=8a82941756a2ab6f0156c1726c0b4d22" . "&amount=92.00" . "¤cy=EUR" . "&paymentType=DB"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization:Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==')); 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 = { '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.add_header('Authorization', 'Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==') 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({ '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 = ("" + "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.setRequestProperty("Authorization", "Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==") 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 = "" + "entityId=8a82941756a2ab6f0156c1726c0b4d22" + "&amount=92.00" + "¤cy=EUR" + "&paymentType=DB" Dim req As WebRequest = WebRequest.Create(url) req.Method = "POST" req.Headers.Add("Authorization", "Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==") 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")
For a full list of parameters that can be sent in the prepare checkout request, check the documentation links below:
<script src="https://test.oppwa.com/v1/paymentWidgets.js?checkoutId={checkoutId}"></script>
<form action="{shopperResultUrl}" class="paymentWidgets" data-brands="VISA MASTER AMEX"></form>
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.
Example of a resourcePath:
resourcePath=/v1/checkouts/{checkoutId}/payment
For a full list of parameters that can be sent in the prepare checkout request, check the documentation links below:
curl -G https://test.oppwa.com/v1/checkouts/{id}/payment \ -d "entityId=8a82941756a2ab6f0156c1726c0b4d22" \ -H "Authorization: Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ=="
public Dictionary<string, dynamic> Request() { Dictionary<string, dynamic> responseData; string data="entityId=8a82941756a2ab6f0156c1726c0b4d22"; string url = "https://test.oppwa.com/v1/checkouts/{id}/payment?" + data; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.Method = "GET"; request.Headers["Authorization"] = "Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ=="; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); var s = new JavaScriptSerializer(); responseData = s.Deserialize<Dictionary<string, dynamic>>(reader.ReadToEnd()); reader.Close(); dataStream.Close(); } return responseData; } responseData = Request()["result"]["description"];
import groovy.json.JsonSlurper public static String request() { def data = "entityId=8a82941756a2ab6f0156c1726c0b4d22" def url = ("https://test.oppwa.com/v1/checkouts/{id}/payment?" + data).toURL() def connection = url.openConnection() connection.setRequestMethod("GET") connection.setRequestProperty("Authorization","Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==") 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/{id}/payment "&entityId=8a82941756a2ab6f0156c1726c0b4d22"); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Authorization", "Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ=="); 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 querystring = require('querystring'); function request(callback) { var path='/v1/checkouts/{id}/payment'; path += '?entityId=8a82941756a2ab6f0156c1726c0b4d22'; var options = { port: 443, host: 'https://test.oppwa.com', path: path, method: 'GET', headers: { 'Authorization':'Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==' } }; var postRequest = https.request(options, function(res) { res.setEncoding('utf8'); res.on('data', function (chunk) { jsonRes = JSON.parse(chunk); return callback(jsonRes); }); }); postRequest.end(); } request(function(responseData) { console.log(responseData); });
function request() { $url = "https://test.oppwa.com/v1/checkouts/{id}/payment"; $url .= "?entityId=8a82941756a2ab6f0156c1726c0b4d22"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization:Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==')); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); 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/{id}/payment" url += '?entityId=8a82941756a2ab6f0156c1726c0b4d22' try: opener = urllib2.build_opener(urllib2.HTTPHandler) request = urllib2.Request(url, data='') request.add_header('Authorization', 'Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==') request.get_method = lambda: 'GET' 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() path = ("?entityId=8a82941756a2ab6f0156c1726c0b4d22") uri = URI.parse('https://test.oppwa.com/v1/checkouts/{id}/payment' + path) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true req = Net::HTTP::Get.new(uri) req['Authorization'] = 'Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==' http.request(req) return JSON.parse(res.body) end puts request()
def initialPayment : String = { val url = "https://test.oppwa.com/v1/checkouts/{id}/payment" url +="?entityId=8a82941756a2ab6f0156c1726c0b4d22" val conn = new URL(url).openConnection() conn match { case secureConn: HttpsURLConnection => secureConn.setRequestMethod("GET") case _ => throw new ClassCastException } conn.setRequestProperty("Authorization", "Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==") 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/{id}/payment" + "?entityId=8a82941756a2ab6f0156c1726c0b4d22" Dim req As WebRequest = WebRequest.Create(url) req.Method = "GET" req.Headers.Add("Authorization", "Bearer OGE4Mjk0MTc1NmEyYWI2ZjAxNTZjMTcyNmQ3NTRkMjZ8Rk1EOVdSRTRocQ==") req.ContentType = "application/x-www-form-urlencoded" 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")
IMPORTANT: A throttling rule applies for get payment status calls. Per checkout, it is allowed to send two get payment requests in a minute.
We recommend that you verify the following fields from the Payment Status response, by comparing the returned values with expected:
Payment Security
Payment Gateway that’s fully PCI DSS Level 1 certified and is a member of the PCI Initiative.
Our data recovery sites and two active redundant data centres make sure that our clients have a highly secure and resilient payment service with 99.99% availability.
Fraud Prevention
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:
Payment Security
For payment providers focused on industries that need specialised risk checks or those that 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.
Mobile SDK makes it easy to accept payments in your mobile app on iOS and Android platforms.
The links to the guides below show you how to integrate in-app payments into your mobile shop or build a wallet-style app. The Mobile SDK takes care of the complexity: it routes the payment correctly to your account and handles the interaction with the payment gateway.
Small Print: There is a minimum monthly fee of £100.00 meaning you pay no monthly fee if your transaction fees are greater than £100.00.
© 2024 Quaife
Should you be interested in becoming a merchant, then please fill out the short form below and one of our specialists will be in touch shortly.
We are delighted that you are considering using Quaife as your payment partner. Fill in the form below & let’s get started.