YoursafeDirect purchase
Create new purchase
Example for Verotel FlexPay PHP client library:
$flexpayClient = new Verotel\FlexPay\Client(
685478, // shop ID / website ID
"d6dToIj2d6YJ1PX2D1W9" // FlexPay signatureKey
new Verotel\FlexPay\YoursafeDirect()
);
$purchaseUrl = $flexpayClient->get_purchase_URL([
"priceAmount" => 14.00,
"priceCurrency" => "EUR",
"description" => "Purchase of foo",
"paymentMethod" => "IDEAL",
"email" => "example@example.com",
"declineURL" => "http://example.com/declined",
"successURL" => "http://example.com/success"
]);
Create new purchase
Example for Verotel FlexPay Java client library:
FlexPayClient flexPayClient = new FlexPayClient(
685478, // shop ID / website ID
"d6dToIj2d6YJ1PX2D1W9", // FlexPay signatureKey
Brand.YOURSAFE_DIRECT
);
URL purchaseUrl = flexPayClient.purchaseBuilder()
.withAmount(BigDecimal.valueOf(14), SaleCurrency.EUR)
.withDescription("Purchase of foo")
.withPaymentMethod(PaymentMethod.IDEAL)
.withEmail("example@example.com")
.withDeclineURL("http://example.com/declined")
.withSuccessURL("http://example.com/back")
.build();
FlexPay purchase initiates payment and redirects the buyer to the iDEAL payment page.
HTTP request
GET https://secure.yoursafedirect.com/status/order?
Query parameters
Parameter | Type | Required | Description |
---|---|---|---|
version | Number | mandatory | version of the FlexPay call, 4 for this version |
shopID | Number | mandatory | numerical ID of the website in the Verotel system |
type | String | mandatory | purchase must be set |
priceAmount | Number | mandatory | amount to be processed in nnn.nn format |
priceCurrency | String | mandatory | 3-char ISO code, must be one of the Sale currencies (USD EUR GBP AUD CAD CHF DKK NOK SEK ), depending on your account setup |
description | String | mandatory | description of the product. Text is displayed on the iDEAL payment page - max 100 printable characters |
paymentMethod | String | mandatory | IDEAL must be set. |
referenceID | String | optional | merchant's reference identifier. It must be unique if provided |
custom1 | String | optional | pass-through variable - max 255 printable characters. Is returned in postbacks |
custom2 | String | optional | pass-through variable - max 255 printable characters. Is returned in postbacks |
custom3 | String | optional | pass-through variable - max 255 printable characters. Is returned in postbacks |
successURL | String | conditional | URL for redirect after successful transaction - max 255 characters. Can be omitted if default success landing URL is set on the website. |
declineURL | String | conditional | URL for redirect after declined transaction - max 255 characters. Can be omitted if default decline landing URL is set on the website. |
mcc | String | conditional | 4-digit Merchant category code according to ISO 18245. Mandatory for CPSP transactions |
subCreditorName | String | conditional | 1-35 char CPSP sub-merchant name. Mandatory for CPSP transactions |
subCreditorId | Number | conditional | 1-6 digit CPSP sub-merchant ID. Mandatory for CPSP transactions |
subCreditorCountry | String | conditional | 2-char CPSP sub-merchant country code according to ISO 3166. Mandatory for CPSP transactions |
String | mandatory | email of the buyer. NOTE: email is excluded from signature calculations (max 100 chars else it will be ignored) | |
signature | String | mandatory | Signature calculation |
Success postback
Verify postback data
Example for Verotel FlexPay PHP client library
// pass GET params received in postback
$paramsAreVerified = $flexPayClient->validate_signature([...]);
Verify postback data
Example for Verotel FlexPay Java client library
// pass GET params received in postback
Boolean paramsAreVerified = flexPayClient.validateSignature(Map.of(...));
The successful sale postback is sent to the "Postback URL" immediately after the sale has been processed. The postback is sent only for successfully approved transactions. The data in the postback provide essential information about the sale. If more information is needed, the merchant should query the status page.
Important: The Verotel system expects HTTP status code 200 and plain text "OK" response. The response must be returned within 30 seconds.
Parameter | Type | Description |
---|---|---|
shopID | Number | numerical ID of the website in the Verotel system |
type | String | purchase |
referenceID | String | merchant reference identifier. It must be unique if provided |
saleID | Number | identifier of the sale in the Verotel system |
transactionID | Number | identifier of the transaction in the Verotel system |
priceAmount | Number | amount to be processed in nnn.nn format |
priceCurrency | String | 3 char ISO code of the Sale currency |
custom1 | String | pass-through variable - max 255 printable characters |
custom2 | String | pass-through variable - max 255 printable characters |
custom3 | String | pass-through variable - max 255 printable characters |
paymentMethod | String | payment method, IDEAL |
signature | String | Signature calculation |
Status page request
Query sale status
Example for Verotel FlexPay PHP client library
$statusURL = $flexPayClient->get_status_URL(['saleID' => 123456]);
Query sale status
Example for Verotel FlexPay Java client library
URL statusUrl = flexPayClient.getStatusUrlBySale(123456);
The status of a sale made with a FlexPay API can be reviewed by querying the status page. Status page provides complete information in - YAML format - about the sale, the buyer, and its status.
HTTP request
GET https://secure.yoursafedirect.com/status/order?
Query parameters
Parameter | Type | Description |
---|---|---|
version | Number | 4 |
shopID | Number | numerical ID of the website in the Verotel system |
referenceID | String | Merchant's reference identifier if provided (referenceID OR saleID must be posted - NOT BOTH) |
saleID | Number | Verotel saleID identifier (referenceID OR saleID must be posted - NOT BOTH) |
signature | String | Signature calculation |
Response
Parameter | Description |
---|---|
response | FOUND - purchase record found and returned NOTFOUND - purchase not found ERROR - error (see 'error' key) |
error | message (for response=ERROR ) |
saleID | identifier of the transaction in Verotel System |
shopID | ID of website in Verotel system |
paymentMethod | an identifier of payment method that was used for the transaction. |
priceAmount | amount processed. in nnn.nn formatt |
priceCurrency | 3 char ISO code of the Sale currency |
description | Product description text - max 100 printable characters |
referenceID | Merchant reference identifier - max 100 printable characters |
name | name of the buyer |
email address of the buyer | |
country | selected or detected country ISO code (ISO 3166-1-alpha-2 code) |
createdOn | Timestamp of purchase creation |
saleResult | purchase processing result (APPROVED) |
Signature calculation
Calculate signature
Example for Verotel FlexPay PHP client library
$computed_signature = $flexpayClient->get_signature([
'description' => 'Super video download',
'priceAmount' => '9.99',
'priceCurrency' => 'USD',
'shopID' => 12345,
'version' => 4,
]);
Calculate signature
Example for Verotel FlexPay Java client library
String computedSignature = flexpayClient.getSignature(Map.of(
"description", "Super video download",
"priceAmount", "9.99",
"priceCurrency", "USD",
"shopID", 12345,
"version", 4
));
If you are using one of our client libraries, signature calculation is handled by the library.
The signature used in FlexPay requests and postbacks is calculated as a SHA-256 hash (hexadecimal output) from the request parameters.
The first parameter has to be your signatureKey, followed by the parameters ordered alphabetically by their names.
Optional arguments that are used (have value) must be contained in the signature calculation. Optional arguments that are not used must not be contained in the signature calculation.
The email parameter in "startorder" request is not included in the signature calculations.
It is mandatory to convert arguments values into UTF-8 before computing the signature.
e.g.
signature = sha256_hex( signatureKey + ":description=" + description + ":period=" + period +
":priceAmount=" + priceAmount + ":priceCurrency=" + priceCurrency + ":referenceID=" +
referenceID + ":shopID=" + shopID + ":subscriptionType=" + subscriptionType + ":type=" + type +
":version=" + version )
Example calculation
Parameter | Value |
---|---|
(signatureKey) | BddJxtUBkDgFB9kj7Zwguxde4gAqha |
description | Super video download |
priceAmount | 9.99 |
priceCurrency | USD |
custom1 | xxyyzz |
shopID | 64233 |
type | purchase |
version | 4 |
Signature calculation using the values above
signature = sha256_hex(BddJxtUBkDgFB9kj7Zwguxde4gAqha:custom1=xxyyzz:description=Super video download:priceAmount=9.99:priceCurrency=USD:shopID=64233:type=purchase:version=4) => ccaf2357fe330654322a1b0f3f92984b3fe2a1462d6fc5082650a00c5ada2f2a
The FlexPay purchase request then is
https://secure.verotel.com/startorder?custom1=xxyyzz&description=Super+video+download&priceAmount=9.99&priceCurrency=USD&shopID=64233&type=purchase&version=4&signature=ccaf2357fe330654322a1b0f3f92984b3fe2a1462d6fc5082650a00c5ada2f2a
List of all signature parameters
This lists all parameters that must be part of the signature calculation - if they have non-empty value.
version
shopID
priceAmount
priceCurrency
description
referenceID
saleID
custom1
custom2
custom3
mcc
subCreditorName
subCreditorId
subCreditorCountry