Partenaires Alliance – Onboarding des submerchants
Afin de pouvoir traiter des paiements pour des submerchants sur votre plateforme, ceux-ci doivent d’abord disposer d’un compte PAY. Dans la documentation ci-dessous, nous expliquons comment créer un compte submerchant via l’API. Il est également possible de créer manuellement un submerchant via l’écran de gestion des submerchants dans PAY. en remplissant le formulaire prévu à cet effet.
Si l’inscription est soumise correctement, il est généralement possible de commencer immédiatement à traiter des transactions. PAY. est légalement tenu de contrôler ses clients afin de prévenir le blanchiment d’argent et le financement du terrorisme. Pour ce faire, plusieurs documents et informations sont demandés. Une fois ces documents fournis et vérifiés par l’équipe d’onboarding, le submerchant est contrôlé sur différents aspects. Une fois ces vérifications effectuées, les fonds reçus peuvent être versés par PAY.
1 Ajouter des submerchants
Requête
Dans cet exemple de requête, nous ajoutons un merchant à partir d’un compte partenaire Alliance.
Code de requête : Ajouter un submerchant
curl --request POST
--url https://rest-api.pay.nl/v16/Alliance/addMerchant/json
--header 'authorization: Basic dG9rZW46PHlvdXItYXBpLXRva2VuPg=='
--header 'cache-control: no-cache'
--header 'content-type: application/x-www-form-urlencoded'
--data-urlencode 'merchant[name]=Test Alliance Submerchant'
--data-urlencode 'merchant[coc]=123456178'
--data-urlencode 'merchant[vat]=NL12345678B01'
--data-urlencode 'merchant[street]=Kopersteden'
--data-urlencode 'merchant[houseNumber]=10'
--data-urlencode 'merchant[houseNumberAddition]=test@email.com'
--data-urlencode 'merchant[postalCode]=7547TK'
--data-urlencode 'merchant[city]=Enschede'
--data-urlencode 'merchant[contactEmail]=info@alliancepartner.nl'
--data-urlencode 'merchant[contactPhone]=+31888866622'
--data-urlencode 'accounts[0][email]=director@classic-carparts.nl'
--data-urlencode 'accounts[0][firstname]=John'
--data-urlencode 'accounts[0][lastname]=Doe'
--data-urlencode 'accounts[0][dateOfBirth]=21-12-2001'
--data-urlencode 'accounts[0][placeOfBirth]=Spijkenisse'
--data-urlencode 'accounts[0][gender]=M'
--data-urlencode 'accounts[0][authorizedToSign]=1'
--data-urlencode 'accounts[0][ubo]=0'
--data-urlencode 'accounts[0][uboPercentage]=0'
--data-urlencode 'accounts[0][useCompanyAuth]=1'
--data-urlencode 'accounts[0][hasAccess]=1'
--data-urlencode 'accounts[0][language]=4'
--data-urlencode 'accounts[1][email]=ubo@classic-carparts.nl'
--data-urlencode 'accounts[1][firstname]=Dagobert'
--data-urlencode 'accounts[1][lastname]=Duck'
--data-urlencode 'accounts[1][dateOfBirth]=13-12-1937'
--data-urlencode 'accounts[1][placeOfBirth]=Spijkenisse'
--data-urlencode 'accounts[1][gender]=M'
--data-urlencode 'accounts[1][authorizedToSign]=0'
--data-urlencode 'accounts[1][ubo]=1'
--data-urlencode 'accounts[1][uboPercentage]=95'
--data-urlencode 'accounts[1][useCompanyAuth]=0'
--data-urlencode 'accounts[1][hasAccess]=0'
--data-urlencode 'accounts[1][language]=1'
--data-urlencode 'bankAccount[bankAccountOwner]=CompanyAccount'
--data-urlencode 'bankAccount[bankAccountNumber]=NL01PAYL0001234567'
--data-urlencode 'bankAccount[bankAccountBic]=NLPAYNL2A'
--data-urlencode 'settings[package]=03-07-2017'
--data-urlencode 'settings[sendEmail]=1'
--data-urlencode 'settings[settleBalance]=1'
--data-urlencode 'settings[clearingInterval]=week'
--data-urlencode 'settings[referralProfileId]=CP-####-####'
Paramètres
| Paramètre | Type | Champ | Description |
|---|---|---|---|
| Merchant | array | OBLIGATOIRE | Ajouter les informations de l’entreprise d’un submerchant |
| name | string | Nom de l’entreprise | |
| coc | string | Numéro du registre du commerce | |
| vatNumber | string | Numéro de TVA | |
| street | string | Rue | |
| houseNumber | string | Numéro | |
| houseNumberAddition | string | Complément d’adresse | |
| postalCode | string | Code postal | |
| city | string | Ville | |
| countryCode | string | Pays dans lequel l’entreprise est établie | |
| contactEmail | string | OPTIONNEL | Adresse e-mail de contact pour les clients |
| contactPhone | string | OPTIONNEL | Numéro de téléphone de contact pour les clients |
| Accounts | array | OBLIGATOIRE | Tableau des comptes utilisateurs à associer au submerchant. Au moins un compte est requis. |
Accounts
| Paramètre | Type | Description |
|---|---|---|
| string | Adresse e-mail de l’utilisateur | |
| firstname | string | Prénom |
| lastname | string | Nom |
| gender | string | Sexe de l’utilisateur. Options : male, female |
| authorizedToSign | string | Pouvoir de signature : 0 : NON 1 : OUI, signature individuelle 2 : OUI, signature conjointe |
| ubo | integer | Statut UBO : 0 : NON 1 : OUI |
| uboPercentage | string | Pourcentage UBO sous forme numérique |
| hasAccess | string | Accès au compte merchant : 0 : NON 1 : OUI |
| languageId | string | Langue préférée de l’utilisateur. Exemples : 1:NL, 2:BE, 4:EN, 5:DE, 6:FR, 8:ES |
Réponse
Cet exemple montre le résultat de l’appel à l’API alliance::addMerchant.
| Nom | Type | Description |
|---|---|---|
| success | boolean | 0 : échec, 1 : succès |
| error_field | string | Code d’erreur |
| errorMessage | string | Description de l’erreur |
| merchantId | string | Référence unique du compte submerchant créé |
| merchantToken | string | Token du submerchant |
| accounts | array | Liste des comptes créés |
| Nom | Type | Description |
|---|---|---|
| accountId | string | Code du compte utilisateur (A-####-####) |
| string | Adresse e-mail de l’utilisateur créé |
Response: Alliance::addMerchant
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"success": "1",
"error_field": "",
"error_message": "",
"merchantId": "M-####-####",
"merchantToken": "***********",
"accounts": [
{
"accountId": "A-####-####",
"email": "director@classic-carparts.nl"
},
{
"accountId": "A-####-####",
"email": "finance@classic-carparts.nl"
}
]
}
2. Récupérer un merchant individuel
Requête
Dans cet exemple, nous récupérons les données d’un seul merchant. Cette requête permet notamment d’obtenir :
- Le nom du vendeur
- Les méthodes de paiement activées (services)
- Le solde du compte
- Le statut des documents à fournir
- Les utilisateurs ajoutés
- Le compte bancaire associé
- Les informations de l’entreprise (adresse, numéro du registre du commerce)
- Les coordonnées publiques
- L’autorisation de débiter le solde
- Les dates de création, d’acceptation ou de suppression du compte
Request code: Add Submerchant
curl --request POST
--url https://rest-api.pay.nl/v16/Alliance/getMerchant/json
--header 'authorization: Basic dG9rZW46PHlvdXItYXBpLXRva2VuPg=='
--header 'cache-control: no-cache'
--header 'content-type: application/x-www-form-urlencoded'
--data-urlencode 'merchantId=M-###-####'
Paramètres
| Paramètre | Type | Champ | Description |
|---|---|---|---|
| merchantId | array | OBLIGATOIRE | ID du submerchant (M-####-####) |
Request
Dans cet exemple de requête, nous récupérons les données d’un merchant associé à un compte partenaire Alliance.
Paramètres
| Paramètre | Type | Champ | Description |
|---|---|---|---|
| merchantId | array | OBLIGATOIRE | ID du submerchant (M-####-####) |
Response: Alliance::getMerchant
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"request": {
"result": "1",
"errorId": "",
"errorMessage": ""
},
"merchantId": "M-####-####",
"merchantName": "Classic Carparts BV",
"services": [
{
"serviceId": "SL-####-####",
"serviceName": "Classic Carparts Diner"
},
{
"serviceId": "SL-####-####",
"serviceName": "Classic Carparts Burger Delivery"
}
],
"balance": "125343",
"documents": [
{
"id": "D-####-####",
"type_id": "agreement",
"type_name": "Overeenkomst",
"status_id": "2",
"status_name": "Wacht op goedkeuring",
"expires": ""
},
{
"id": "D-####-####",
"type_id": "coc_extract",
"type_name": "KvK uittreksel",
"status_id": "4",
"status_name": "Afgekeurd",
"expires": ""
}
],
"accounts": [
{
"id": "AL-####-####",
"account_id": "A-####-####",
"name": "John Doe",
"accepted": "1",
"access": "1",
"ubo": "0",
"authorised_to_sign": "1",
"signature_label": "Volledig/ Zelfst. Tekenbevoegd",
"documents": [
{
"id": "D-####-####",
"type_id": "identification",
"type_name": "Legitimatie",
"status_id": "1",
"status_name": "Aan te leveren",
"expires": ""
}
]
},
{
"id": "AL-####-####",
"account_id": "A-####-####",
"name": "Dagobert Duck",
"accepted": "0",
"access": "0",
"ubo": "1",
"authorised_to_sign": "0",
"signature_label": "Niet Tekenbevoegd",
"documents": [
{
"id": "D-####-####",
"type_id": "identification",
"type_name": "Legitimatie",
"status_id": "1",
"status_name": "Aan te leveren",
"expires": ""
}
]
}
],
"bankaccounts": [
{
"id": "BA-####-####",
"bankaccountHolder": "Classic Carparts Diner",
"bankaccountNumber": "NL20PAYN000123456***",
"bic": "PAYNLA2A",
"countryCode": ""
}
],
"public_info": [
{
"merchantId": "M-####-####",
"name": "Classic Carparts BV",
"type": "",
"type_name": "",
"postalAddress": {
"street": "Kopersteden",
"houseNumber": "10",
"zipCode": "7547TK",
"city": "Enschede",
"countryCode": "NL",
"countryName": "Nederland"
},
"cocNumber": "012345678",
"vatNumber": "NL012345678B01",
"image": "",
"contactdata": [
{
"type": "email",
"value": "info@classic-carparts.nl",
"description": "24/7 helpdesk"
},
{
"type": "phone",
"value": "+31888866622",
"description": "Customer service"
}
]
}
],
"contract": {
"packageType": "ALLIANCEPLUS",
"invoiceAllowed": "1",
"payoutInterval": "week",
"createdDate": "2021-01-15",
"acceptedDate": "",
"deletedDate": ""
}
}
3. Téléverser un document
Authentification
Basic Authentication
L’authentification de l’API document::add s’effectue via HTTP Basic Authentication.
Request
Dans cet exemple de requête, les paramètres requis pour le téléversement du document « D-####-#### » sont présentés.
Paramètres
| Paramètre | Type | Champ | Description |
|---|---|---|---|
| documentID | array | OBLIGATOIRE | ID du document à téléverser pour le submerchant |
| filename | string | OPTIONNEL | Nom du fichier à téléverser |
| documentFile | string | OBLIGATOIRE | Chaîne Base64 contenant le document |
Request code: Uploading a document as base64 for a Submerchant
curl --request POST
--url https://rest-api.pay.nl/v1/document/add/json
--header 'authorization: Basic dG9rZW46PHlvdXItYXBpLXRva2VuPg=='
--header 'cache-control: no-cache'
--header 'content-type: application/x-www-form-urlencoded'
--data-urlencode 'documentID=D-####-####'
--data-urlencode 'filename=id.pdf'
--data-urlencode 'documentFile=Sm9pbiBvdXIgdGVhbSEgV2UncmUgYWx3YXlzIGxvb2tpbmcgZm9yIGdvb2QgZGV2ZWxvcGVycyE='
Réponse
| Nom | Type | Description |
|---|---|---|
| request | array | Informations relatives au résultat de la requête |
| result | string | 0 : échec, 1 : succès |
| errorId | string | Code d’erreur |
| errorMessage | string | Description de l’erreur |
Response: Document upload
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"request": {
"result": "1",
"errorId": "",
"errorMessage": ""
},
}
4 Ajouter un compte bancaire à un submerchant
Authentification
Basic Authentication
L’authentification de l’API alliance::addBankAccount s’effectue via HTTP Basic Authentication.
Request
Dans cet exemple de requête, vous trouverez les paramètres nécessaires pour ajouter un (nouveau) compte de règlement au compte submerchant « M-####-#### » au moyen d’un paiement de vérification via iDEAL, Bancontact.
Paramètres
| Paramètre | Type | Champ | Description |
|---|---|---|---|
| merchantId | array | OBLIGATOIRE | ID du submerchant auquel le compte bancaire doit être ajouté |
| returnUrl | string | OBLIGATOIRE | URL de redirection après le paiement |
| paymentOptionId | string | OPTIONNEL | Méthode de paiement utilisée pour le paiement de vérification |
| bankId | string | OPTIONNEL | Banque sélectionnée pour iDEAL |
| returnUrl | string | OPTIONNEL | URL de retour après paiement |
Méthodes de paiement disponibles
- 10 – iDEAL – NL
- 436 – Bancontact – BE
Request code: adding a new bank account to a Submerchant account by doing a one time payment.
curl --request POST
--url https://rest-api.pay.nl/v1/alliance/addBankAccount/json
--header 'authorization: Basic dG9rZW46PHlvdXItYXBpLXRva2VuPg=='
--header 'cache-control: no-cache'
--header 'content-type: application/x-www-form-urlencoded'
--data-urlencode 'merchantId=M-####-####'
--data-urlencode 'returnUrl=https://alliance-partner.com/bankaccount_added'
--data-urlencode 'paymentOptionId=10'
--data-urlencode 'bankId=4'
Response
Dans cet exemple de réponse, vous voyez le résultat de l’ajout d’un compte bancaire au compte submerchant M-####-#### via iDEAL - ING.
Réponse
| Nom | Type | Description |
|---|---|---|
| request | array | Informations relatives au résultat de la requête |
| result | string | 0 : échec, 1 : succès |
| errorId | string | Code d’erreur |
| errorMessage | string | Description de l’erreur |
| issuerUrl | string | Lien vers la page de paiement de vérification |
Response: Alliance::addBankAccount
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"request": {
"result": "1",
"errorId": "",
"errorMessage": ""
}
"issuerUrl": "https://bankieren.ideal.ing.nl/ideal/betalen/inlog-annuleren/static/detect_mob?trxid=XXXXXXX&random=YYYYYYY"
}
5. Suspendre ou réactiver un merchant
Lorsqu’un client a résilié son contrat, vous pouvez nous le signaler via l’API Alliance::suspend ou réactiver le merchant via Alliance::unsuspend.
Paramètres
| Paramètre | Type | Champ | Description |
|---|---|---|---|
| merchantId | array | OBLIGATOIRE | ID du submerchant à suspendre ou à réactiver |
Réponse
| Nom | Type | Description |
|---|---|---|
| request | array | Informations relatives au résultat de la requête |
| status | string | FALSE (0) : échec, TRUE (1) : succès |
| message | string | Description de l’erreur éventuelle (par ex. : access denied) |