Pay By Bank Payment
Endpoint: POST /v2/moneyins/paybybank/transfer/init
sequenceDiagram
title Pay By Bank
participant Customer
participant Partner
participant Lemonway_API_Public
participant Lemonway_Webkit as "Lemonway_Webkit (Webkit PHP)"
participant Lemonway_API_Private as "Lemonway_API_Private (Webkit Webservice)"
participant PISP
participant Banks
Partner->>Lemonway_API_Public: NEW CALL GetBankList (GET /moneyins/transfers)\nOptional: ListCountryCode
Lemonway_API_Public->>PISP: GET /api/v1/providers/{market}
PISP-->>Lemonway_API_Public: { ...,\n "name":"se-bink-thirdpartyapp",\n ... }
Lemonway_API_Public-->>Partner: OUTPUTS\n{\n CountryCode: FR,\n ParentName: BNP,\n BankName: BNP Paribas Privée,\n logoURL: https://web.bankin.com/img/banks-logo/350_bnp.png,\n BankId: se-bink-thirdpartyapp,\n Filtre pro ?\n}
Customer->>Partner: Selects Pay by Bank + chooses bank\nIf bank not found: VIBAN / classic transfer option
Partner->>Lemonway_API_Public: NEW CALL MoneyInPayByBank (POST /v2/moneyins/transfer/PayByBank)\n{\n AccountId,\n amount,\n returnUrl,\n cancelUrl,\n errorUrl,\n comment,\n CountryCode,\n BankId\n}
Lemonway_API_Public->>Lemonway_API_Public: Checks\n- account blocked\n- threshold\n- BankId exists (else: Incorrect BankId)
Lemonway_API_Public->>Lemonway_API_Public: Create pending transaction (id=1234)
Lemonway_API_Public-->>Partner: webkit-url/?MoneyInToken={webkitToken}
Partner-->>Customer: Redirect URL (webkit)
Customer->>Lemonway_Webkit: webkit-url/?MoneyInToken={webkitToken}
Lemonway_Webkit->>Lemonway_API_Private: BuildPaymentTransferForm
Lemonway_API_Private->>PISP: PAYMENT REQUEST\n{\n amount,\n currency,\n destinations:[{accountNumber,type}],\n executionDate,\n market,\n paymentScheme,\n recipientName,\n remittanceInformation:{type,value},\n sourceMessage\n}
PISP-->>Lemonway_API_Private: PAYMENT RESPONSE\n{ id: "18408f4...", ... }
Lemonway_API_Private->>Lemonway_API_Private: Set real_ref of 1234 = PISP id (18408f4...)
Lemonway_API_Private-->>Lemonway_Webkit: RESPONSE\naction=https://link.tink.com/1.0/pay/\nmethod=GET\ncontent={client_id,redirect_uri,market,input_provider?,payment_request_id}
Note over Partner,PISP: User is redirected to the PISP link (Tink) with payment_request_id
Partner->>PISP: https://link.tink.com/1.0/pay/?client_id=...&redirect_uri=...&market=...&input_provider=...&payment_request_id=18408f4...
PISP->>Banks: Payer redirected to their bank
PISP-->>Lemonway_Webkit: redirect_uri callback\n/webhook/paybybank?payment_request_id=18408f4...
Lemonway_Webkit->>Lemonway_API_Private: Confirm transaction received\nWebhookHandle (keep pending)
Lemonway_API_Private->>PISP: Check payment status\nGET /api/v1/payments/requests/18408f4.../transfers
PISP-->>Lemonway_API_Private: { paymentRequestCreatedTransfers:[{status,statusMessage,...}, ...] }
Lemonway_API_Private->>Lemonway_API_Private: Update transaction 1234\n- CANCELLED if cancelled\n- REFUSED/FAILED if failed
Lemonway_API_Private-->>Lemonway_Webkit: WebPaymentForm\n{ actionUrl: returnUrl/cancelUrl/errorUrl,\n method: GET }
Lemonway_Webkit-->>Partner: Redirect to action URL
To view the diagram, copy and paste the code on the following site:
title Pay By Bank
participant Customer
participant Partner
participant Lemonway_API_Public
participant Lemonway_Webkit (Webkit PHP)
participant Lemonway_API_Private (Webkit Webservice)
participant PISP
participant Banks
Partner->Lemonway_API_Public:**NEW CALL GetBankList or GET/Moneyins/transfers/**\n\nOptional : ListCountryCode
Lemonway_API_Public->PISP:GET /api/v1/providers/{market}\n\n\n
PISP->Lemonway_API_Public:{\n ...,\n "name": "se-bink-thirdpartyapp",\n ...\n}
Lemonway_API_Public->Partner:**OUTPUTS**\n\n{\n CountryCode : FR,\n ParentName : BNP,\n BankName : BNP Paribas Privée,\n logoURL : https://web.bankin.com/img/banks-logo/350_bnp.png,\n BankId : se-bink-thirdpartyapp,\n<color:#red>Filtre pro ?</color>\n}
Customer->Partner:Selects Pay by Bank & chooses his bank on the partner's page.\nIf he can't find his bank, the partner shows him an option (VIBAN/classic transfer)
Partner->Lemonway_API_Public:**NEW CALL MoneyInPayByBank or POST/v2/moneyins/transfer/PayByBank**\n\n{\n AccountId,\n amount,\n returnUrl: "http://1000mercis.fr"\n cancelUrl: "http://1000mercis.fr"\n errorUrl: "http://1000mercis.fr"\n comment, <color:#red>>> 35 characters as for moneyouts ?</color>\n CountryCode,\n BankId, (example: se-bink-thirdpartyapp)\n}
Lemonway_API_Public->Lemonway_API_Public:Check lists \n<color:#red>>> could we have the full list ? ?</color>\n- if the account is blocked\n- threshold\n- Create a new error message : Incorrect BankId
Lemonway_API_Public->Lemonway_API_Public:Create pending transaction id = 1234
Partner<-Lemonway_API_Public:http://webkit-url/?MoneyInToken=Webkit token
Customer<-Partner:url\n
Customer->Lemonway_Webkit (Webkit PHP):http://webkit-url/?MoneyInToken=Webkit token
Lemonway_Webkit (Webkit PHP)->Lemonway_API_Private (Webkit Webservice):BuildPaymentTransferForm
Lemonway_API_Private (Webkit Webservice)->PISP:**PAYMENT REQUEST**\n\n{\n "amount": 10,\n "currency": "SEK", <color:#red>>> devise compte acquéreur </color> >> errors if no bank account attached to environment + currency not supported by TINK\n "destinations": [\n {\n "accountNumber": "4578-3748", >> Lemonway\n "type": "se-pg" >>iban\n }\n ],\n "executionDate": "2019-11-20",\n "market": "SE", >> mandatory, if we provide input_provider ?\n "paymentScheme": "SEPA_CREDIT_TRANSFER",\n "recipientName": "Test AB", >> Lemonway\n "remittanceInformation": {\n "type": "OCR", <color:#red>>> check with Tink</color>\n "value": "3245928392092" >> SolutionId.TransId + Partner Comment >> nb of guaranteed characters ?\n },\n "sourceMessage": "Payment for Gym Equipment" >> Only for Sweden, leave empty\n}
Lemonway_API_Private (Webkit Webservice)<-PISP:**PAYMENT RESPONSE**\n\n{\n "id": "18408f41163f4748b87da9b9a68b6df8",\n ...\n}
Lemonway_API_Private (Webkit Webservice)->Lemonway_API_Private (Webkit Webservice):Set real_ref of 1234 to tink transaction id: 18408f41163f4748b87da9b9a68b6df8
Lemonway_API_Private (Webkit Webservice)->Lemonway_Webkit (Webkit PHP):**RESPONSE**\n\n action = https://link.tink.com/1.0/pay/\n method = GET \n content = {client_id: {YOUR_CLIENT_ID}, \n redirect_uri: http://LEMONWAY_WEBKIT_URL/payline/1234, \n market: {MARKET},\n input_provider: se-bink-thirdpartyapp, (optional)\n payment_request_id: 18408f41163f4748b87da9b9a68b6df8
Partner->PISP:https://link.tink.com/1.0/pay/?client_id={YOUR_CLIENT_ID}&redirect_uri=http://LEMONWAY_WEBKIT_URL/webhook/paybybank&scope=user:read,credentials:read&market={MARKET}&locale=en_GB&input_provider=se-bink-thirdpartyapp, &payment_request_id=18408f41163f4748b87da9b9a68b6df8
PISP->Banks:Payer is redirected to his bank
Lemonway_Webkit (Webkit PHP)<-PISP:http://LEMONWAY_WEBKIT_URL/webhook/paybybank?payment_request_id=18408f41163f4748b87da9b9a68b6df8
Lemonway_Webkit (Webkit PHP)->Lemonway_API_Private (Webkit Webservice):Confirm transaction received\nWebhookHandle (leave transaction in pending)
Lemonway_API_Private (Webkit Webservice)->PISP:** Check payment status **\n\nhttps://api.tink.com/api/v1/payments/requests/18408f41163f4748b87da9b9a68b6df8/transfers \\n -H 'Authorization: Bearer {YOUR_CLIENT_ACCESS_TOKEN}' \\n -H 'Content-Type: application/json'
Lemonway_API_Private (Webkit Webservice)<-PISP:{\n "paymentRequestCreatedTransfers": [\n {\n ...\n "status": "SENT", // CANCELLED / FAILED\n "statusMessage": "Payment is sent to your bank",\n ...\n },\n {\n ...\n }\n ]\n}
Lemonway_API_Private (Webkit Webservice)->Lemonway_API_Private (Webkit Webservice):Update status of 1234 cancelled or refused if tink is status is cancelled or failed
Lemonway_Webkit (Webkit PHP)<-Lemonway_API_Private (Webkit Webservice):WebPaymentForm { \n action url: returnUrl or cancelUrl or errorUrl \n method: GET \n}\n\n
Partner<-Lemonway_Webkit (Webkit PHP):Redirect to action urlUpdated 2 days ago
