INTRODUCTION
This document provides the integration details between the merchant & the PointCheckout systems. The integration allows the merchant system with its own shopping and order processing system to work in conjunction with PointCheckout system for the payments. The merchant would need the API credentials & the private secret key to access the PointCheckout API.
The process is outlined below:
When a customer is ready to pay for their order/shopping cart on the merchant system, a “Pay with PointCheckout” option is presented.
On submitting the “Pay with PointCheckout” button, the merchant system processes the order & makes the “NEW CHECKOUT REQUEST” API call to PointCheckout & obtains a checkout key.
On successfully obtaining the token from PointCheckout in the previous step, the merchant system then redirects the customer to PointCheckout passing in this checkout key (See PAYMENT PAGE REDIRECT).
The customer then logs in or registers to PointCheckout. At this stage, the customer may either successfully complete the payment or cancel the payment.
In any of the cases in the previous step, the customer is finally returned to the merchant system.
Once the customer has been returned to the merchant system from PointCheckout, the merchant system makes the
“GET CHECKOUT REQUEST” API call to retrieve the status of the payment and at this stage the checkout is now complete.
REQUIREMENTS
Below are the requirements that must be implemented in the shopping cart extension for PointCheckout.
Add a new Payment Method to the checkout page called PointCheckout. Should use the PointCheckout logo.
Should support the following configuration options:
a. Support for Staging / Test / Live environments.
b. Ability to restrict payment to users from specific countries
c. Ability to restrict payment to users from specific user groups
d. Ability to configure new order status
SETTINGS SCREEN
The settings screen for the PointCheckout payment method should include at minimum the following configuration options.
SUPPORTED ENVIRONMENTS
The PointCheckout Payment Extension / Plugin should support the following two environments; Staging and Production. Throughout the API, they will be referred to as $BASE_URL and user can select current environment in the administrator settings screen.
STAGING ENVIRONMENT
Base URL
|
https://pay.staging.pointcheckout.com
|
TEST ENVIRONMENT
Base URL
|
https://pay.test.pointcheckout.com
|
PRODUCTION ENVIRONMENT
Base URL
|
https://pay.pointcheckout.com |
API REQUESTS
There are two relevant API requests within the checkout process:
NEW CHECKOUT REQUEST
This requests sends the checkout details to the PointCheckout checkout service. It returns a unique checkout id that would be used for the processing of the payment.
REQUEST URL
Request URL
|
$BASE_URL/api/v1.1/checkout
|
METHOD TYPE
Request Type
|
POST
|
HEADER PARAMETERS
HEADER
|
DETAILS
|
Api-Key
|
The merchant API key.
|
Api-Secret
|
The Merchant API Secret.
|
Content-Type
|
application/json
|
QUERY PARAMETERS
The Request URL may include the below parameters
PARAMETER
|
TYPE
|
DETAILS
|
qr
(new)
|
Boolean
|
indicator to generate a Base64 QR image and include it in the
response, default is false. (Optional)
|
qrsize
(new)
|
Integer
|
the size of the QR image in pixels, default is 300
|
REQUEST BODY
The request is a JSON based object. It includes the following parameters
HEADER
|
TYPE
|
DETAILS
|
referenceId
|
String
|
A merchant unique reference ID for this checkout. This can be the
order ID. Must match any reference shown to user during checkout / order
history. (Required)
|
redirectUrl
|
String
|
URL to redirect user to after payment update (successful or failure) |
successUrl
|
String
|
URL to redirect user to after a successful payment (optional when |
failureUrl
|
String
|
URL to redirect user to after a failed payment |
grandtotal*
|
Decimal
|
The grand total of the whole order. This is the amount customer must
pay. (Required)
|
subtotal **
|
Decimal
|
Sum of all individual line items (without discount / tax / shipping /
etc). (Required)
|
shipping
|
Decimal
|
Total value of shipping. (Required)
|
tax
|
Decimal
|
Tax value on order. (Required)
|
discount
|
Decimal
|
Value of discount applied to Subtotal. (Required)
|
currency
|
String
|
ISO 4217 Currency Code (3
letter currency code). (Required)
|
deviceReference
(new)
|
String
|
Merchant device reference,
to be used by the merchant to indicate the source device of the checkout if
more than one device is used to submit checkouts to PointCheckout
|
items
|
Array
|
An array of objects representing the items associated with this
order. (Required)
|
name
|
String
|
The name of the item being sold to customer. (Required)
|
sku
|
String
|
Merchant item SKU. (Required)
|
quantity
|
Decimal
|
Quantity of item being bought by user. (Required)
|
total
|
Decimal
|
Total selling price for quantity of this item. (Required)
|
customer
|
Object
|
Details of the customer making the purchase
|
firstName
|
String
|
Customer first name
|
lastName
|
String
|
Customer last name
|
email
|
String
|
Customer email address
|
phone
|
String
|
Customer phone number with international calling code (Ex.
971567xxxxxx).
|
billingAddress
|
Object
|
Customer billing address
|
name
|
String
|
Billing address name
|
address1
|
String
|
Billing address line 1
|
address2
|
String
|
Billing address line 2
|
city
|
String
|
Billing address city
|
state
|
String
|
Billing address state
|
zip
|
String
|
Billing zip code
|
country
|
String
|
Billing address country (3 letter ISO country code)
|
shippingAddress
|
Object
|
Customer billing address
|
name
|
String
|
Shipping address name
|
address1
|
String
|
Shipping address line 1
|
address2
|
String
|
Shipping address line 2
|
city
|
String
|
Shipping address city
|
state
|
String
|
Shipping address state
|
zip
|
String
|
Shipping zip code
|
country
|
String
|
Shipping address country (3 letter ISO country code)
|
* Grand Total = “subtotal” + “shipping” + “tax” – “discount”
** Subtotal = Sum (item total) for all items
RESPONSE
The response is a JSON based object. It has the following structure
HEADER
|
TYPE
|
DETAILS
|
success
|
Boolean
|
Whether or not this operation completed successfully.
|
elapsed
|
Number
|
Time elapsed at server processing this request.
|
result
|
Object
|
Result Object
|
checkoutId
|
String
|
Unique PointCheckout ID associated to this checkout.
|
checkoutKey
|
String
|
Checkout Key used for redirecting user to checkout page to complete payment. (See PAYMENT PAGE REDIRECT) |
checkoutDisplayId
(new)
|
String
|
Checkout human readable short key, serves as an easier reference to
the checkout
|
merchantId
|
String
|
The PointCheckout merchant ID associated with this checkout.
|
merchantName
|
String
|
The PointCheckout merchant name associated with this checkout.
|
referenceId
|
String
|
Merchant unique reference ID for this checkout. This should be the
same as Order ID and match reference shown to user during checkout / order
history.
|
currency
|
String
|
ISO 4217 Currency Code (3
letter currency code) associated with this checkout.
|
grandtotal
|
Decimal
|
The grand total of the whole order. This is the amount customer must
pay.
|
cod
(new)
|
Decimal
|
Cash amount to be collected from Shopper
|
status
|
String
|
Current checkout status. (See CHECKOUT STATUSES)
|
deviceReference
(new)
|
String
|
Merchant device reference, the same as provided in the request
|
firebaseDatabase
(new)
|
String
|
Google firebase database name, to be used to receive notifications on
checkout updates
|
firebaseCollection
(new)
|
String
|
Google firebase collection name, to be used to receive notifications
on checkout updates
|
firebaseDocument
(new)
|
String
|
Google firebase document name, to be used to receive notifications on
checkout updates
|
base64QR
(new)
|
String
|
Base64 QR Code image data, that can be used for Quick Payment using
PointCheckout Mobile App, This will only contain value when the
qr
Request URL query parameter is present and set to
true
|
SAMPLE REQUEST BODY
Below is a sample request body for a “New Checkout” request.
{
"referenceId":"CHK-1000",
"successRedirectUrl":"https://onlinestore.com/pointcheckout/payment-success",
"failRedirectUrl":" https://onlinestore.com/pointcheckout/payment-success ",
"grandtotal":"100.00",
"subtotal":"100.00",
"shipping":"2.0",
"tax":"2.0",
"discount":"4.00",
"currency":"aed",
"deviceReference":"POS-01",
"items":[
{
"name":"Laptop XYZ case",
"sku":"1234",
"quantity":2,
"total":90
},
{
"name":"iPhone 7 Cover",
"sku":"1234",
"quantity":1,
"total":10
}
],
"customer":{
"firstName":"Bashar",
"lastName":"Saleh",
"email":"bashar.saleh@gmail.com",
"phone":"971567824730",
"billingAddress":{
"name":"Bashar Saleh",
"address1":"Business
Central Towers",
"address2":"Media city",
"city":"Dubai",
"state":"Dubai",
"zip":"123",
"country":"ARE"
},
"shippingAddress":{
"name":"Bashar Saleh",
"address1":"Business Central Towers",
"address2":"Media city",
"city":"Dubai",
"state":"Dubai",
"zip":"123",
"country":"ARE"
}
}
}
|
SAMPLE RESPONSE BODY
Below is a sample response body for a “New Checkout” request.
{
"success":true,
"elapsed":468,
"result":{
"checkoutId":"1584154845799418134",
"checkoutKey":"8d1796e88bbc37ef73a9edc3d3d85c0267c5c0bb3feb56dc",
"checkoutDisplayId":"N098T3",
"merchantId":"15b9b327ce8bfa09",
"merchantName":"amazon.com",
"referenceId":"CHK-0100",
"currency":"AED",
"grandtotal":100,
"cod":0,
"status":"PENDING",
"deviceReference":"POS-01",
"firebaseDatabase":"pc-checkout",
"firebaseCollection":"checkout",
"firebaseDocument":"nTDry405THLLrVKTstjIQemXIVC3OhJN",
"base64QR":null
}
} |
|
SAMPLE ERROR RESPONSE BODY
Below is a sample response body for a “New Checkout” request.
{
"success":false,
"elapsed":150,
"error":"A
checkout already exists for this merchant with reference id 'CHK-1000'"
}
|
GET CHECKOUT REQUEST
This requests asks PointCheckout to send checkout updated, usually after a user is redirected back to the merchant website.
REQUEST URL
Request URL
|
$BASE_URL/api/v1.1/checkout/
|
METHOD TYPE
Request Type
|
GET
|
HEADER PARAMETERS
HEADER
|
DETAILS
|
Api-Key
|
The merchant API key.
|
Api-Secret
|
The Merchant API Secret.
|
Content-Type
|
application/json
|
QUERY PARAMETERS
The Request URL may include the below parameters
PARAMETER
|
TYPE
|
DETAILS
|
qr
(new)
|
Boolean
|
indicator to generate a Base64 QR image and include it in the response, default is false. (Optional)
|
qrsize
(new)
|
Integer
|
the size of the QR image in pixels, default is 300
|
RESPONSE
The response is a JSON based object. It has the following structure
HEADER
|
TYPE
|
DETAILS
|
success
|
Boolean
|
Whether or not this operation completed successfully.
|
elapsed
|
Number
|
Time elapsed at server processing this request.
|
result
|
Object
|
Result Object
|
checkoutId
|
String
|
Unique PointCheckout ID associated to this checkout.
|
checkoutKey
|
String
|
Checkout Key used for redirecting user to checkout page to complete payment. (See PAYMENT PAGE REDIRECT)
)
|
checkoutDisplayId
(new)
|
String
|
Checkout human readable short key, serves as an easier reference to the checkout
|
merchantId
|
String
|
The PointCheckout merchant ID associated with this checkout.
|
merchantName
|
String
|
The PointCheckout merchant name associated with this checkout.
|
referenceId
|
String
|
Merchant unique reference ID for this checkout. This should be the same as Order ID and match reference shown to user during checkout / order history.
|
currency
|
String
|
ISO 4217 Currency Code (3 letter currency code) associated with this checkout.
|
grandtotal
|
Decimal
|
The grand total of the whole order. This is the amount customer must pay.
|
cod
(new)
|
Decimal
|
Cash amount to be collected from Shopper
|
status
|
String
|
Current checkout status. ( CHECKOUT STATUSES)
|
deviceReference
(new)
|
String
|
Merchant device reference, the same as provided in the request
|
firebaseDatabase
(new)
|
String
|
Google firebase database name, to be used to receive notifications on checkout updates
|
firebaseCollection
(new)
|
String
|
Google firebase collection name, to be used to receive notifications on checkout updates
|
firebaseDocument
(new)
|
String
|
Google firebase document name, to be used to receive notifications on checkout updates
|
base64QR
(new)
|
String
|
Base64 QR Code image data, that can be used for Quick Payment using PointCheckout Mobile App, This will only contain value when the qr
Request URL query parameter is present and set to true
|
SAMPLE SUCCESSFUL RESPONSE BODY
Below is a sample response body for a “Get Checkout” request.
{
"success":true,
"elapsed":468,
"result":{
"checkoutId":"1584154845799418134",
"checkoutKey":"8d1796e88bbc37ef73a9edc3d3d85c0267c5c0bb3feb56dc",
"checkoutDisplayId":"N098T3",
"merchantId":"15b9b327ce8bfa09",
"merchantName":"amazon.com",
"referenceId":"CHK-0056",
"currency":"AED",
"grandtotal":100,
"cod":0,
"status":"PENDING",
"deviceReference":"POS-01",
"firebaseDatabase":"pc-checkout",
"firebaseCollection":"checkout",
"firebaseDocument":"nTDry405THLLrVKTstjIQemXIVC3OhJN",
"base64QR":null
}
}
|
SAMPLE ERROR RESPONSE BODY
Below is a sample response body for a “Get Checkout” request.
{
"success":false,
"elapsed":150,
"error":"No checkout found with id '1584154845799418132'"
}
|
CHECKOUT STATUSES
A checkout can have multiple statuses that describe the current state that the checkout is in.
STATUS
|
DETAILS
|
PENDING
|
New Checkout. User has not completed payment.
|
PAID
|
This status is effective when a customer has successfully completed
the payment associated with this checkout.
|
FAILED
|
Payment failed due card or reward payment
failure. PointCheckout failed to recover such checkout process.
|
CANCELLED
|
User cancelled the checkout process and returned to merchant page. |
PAYMENT PAGE REDIRECT
Upon a successful NEW CHECKOUT REQUEST user should be redirected to the PointCheckout Payment Page. The URL used for the redirect is shown below:
Redirect URL
|
$BASE_URL/checkout/$CHECKOUT_KEY
|
* $CHECKOUT_KEY is the Checkout Key returned in a successful new checkout request request (See CHECKOUT RESPONSE RESPONSE )
PAYMENT RESPONSE HANDLING
Once a user completes a transaction, the user is redirected to the merchant website to proceed with the payment. The user is redirected to the pre-configured URL in the Merchant Admin panel. The response contains the following URL encoded parameters:
PARAMETER
|
DETAILS
|
checkoutId
|
The PointCheckout checkout ID that was processed.
|
We do not return the referenceId on
purpose to avoid storing such details in merchant session and enforce a lookup
/ storage of payment and order details.