Invoices are convenient for everyone. The customer does not need to enter the amount and recipient email. All he has to do for payment is to log into Paypal and click on few buttons.
In this post, I will tell you how to create invoices in Paypal and receive money with Integromat. In my case, each order has a flex price, so I need to dynamically load the price into the invoice. I will use Trello as an example.
Registering the Paypal account
First, you need to register a Paypal account, on which you can accept the money (not for all countries it is available).
Then we need to go to https://developer.paypal.com/ and create a new app in Sandbox or Live mode. After creation, the Client ID and Consumer secret key will be generated for your app.
Then you need to register Integromat account, if you are not registered yet.
Creating a scenario for Paypal invoicing
Let’s see how a scenario for invoicing looks like using the integration with Trello.
First we need to figure out what trigger we will use for generating the invoice. In my case, it’s moving the card to a certain list.
I can have 3 types of payment:
- Middle payment
- Full payment.
For each of these types of payments will be different lists in Trello. But their meaning is the same and the scenarios are almost the same. Let’s take a look at the process of the prepayment scenario.
Creating a Trigger in Trello
The trigger will be a webhook in the module Trello -> Watch activities (Instant). Select the board, list, and updateCard action.
You can run just this module once and see if it triggers when you move a card to or from this list. If it does, go ahead.
Since this webhook can be triggered when we don’t need it, we put a filter on the listAfter variable so that the scenario will only work when the final list into which the card is moved is exactly the one we need.
Find out the list ID through a test run of the module or the source code of the Trello page and add the list ID to the filter right after the first module.
Retrieving data from Custom fields in Trello
If we use custom fields in a card, we have to take data from them. To do that, first, we add the module Trello -> Get a Card to get all the information about the card.
The data of the custom fields are in an array. You retrieve them and create variables from them, which will be used in the scenario. To get the data from the array, use the map() function.
- Add the Tools -> Set multiple variables module to set variables. I recommend creating a Set multiple variables module right away, as it will be easier to add more variables over time, as the scenario will grow and become more complicated.
- Find out the IDs of all your custom fields via the source code of Trello or look at the Get a Card module after its activation.
- Set a variable for each field you want to use in the scenario through the map() function.
This is how the Set multiple variables module looks like to get custom fields from a card:
The knowledge base of how this function works and others can be found here – https://support.integromat.com/hc/en-us/articles/360001986513-Mapping
In brief, we:
- Specify the array in which to look for the key (Custom Fields).
- Setting the key and its type in raw format.
- Setting the key for the filter.
- Setting the filter value.
Once we have all the fields, we can continue scenario.
Create and configure module Paypal -> Create a payment (step 1)
Next, we create the module Paypal -> Create a payment (step 1). Add your Paypal account connection, using the Client ID and Consumer secret key from the developer area.
Description of the fields in this module:
- Cancel URL – here we enter the URL to which the client will be redirected if he refused or there was a payment error. I recommend creating such a page on the website and filling its URL here.
- Transaction – here you should create the transaction body: set amount for payment, currency, and description if needed. In the description, I recommend you insert the Trello card ID so after the payment you can identify the Trello card on which the payment was made. You can also add a template as a marker for your project (for example, if your account receives payments from different projects and you need to identify payments for your project).
- Return URL – a URL where the data will be sent when the customer agrees to pay (clicks on the “Pay” button). This will be a webhook. Here we get to the module Paypal -> Execute payment (step 2).
Create and configure module Paypal -> Execute payment (step 2)
For the payment to go through, Paypal needs to send data that the client clicked on the payment button and agreed with withdrawal.
To do this, we will need to create a new scenario. Here’s what it will look like:
- Create a scenario, create a webhook, copy its URL.
- Insert the copied URL into the module Paypal -> Create a payment (step 1) in the first scenario (Return URL). If needed, you can add additional parameters there via ampersand &.
- Now after the client confirms his intention to pay, our webhook will get a response with Payment ID and Payer ID.
- After webhook create Paypal -> Execute payment module (step 2) module, put Payment ID and Payer ID from webhook module into it.
- Next, optionally, after successful payment, you can add a redirect to the “Thank you for your payment” page. Create a page, add the Webhook response module and configure it.
- Status: 302 – redirect code.
- Key: key (Location).
- Value: URL where to redirect.
Next, you can add an Email sending module to notify the customer of a successful payment and to thank them.
Now let’s go back to the first scenario. Once we have created the invoice (Paypal -> Create Payment) its result will be a unique link Approval URL, which the customer will have to go to and pay. This variable with the link can be sent to email, Telegram, or anywhere through the appropriate modules in the scenario. I send it in the body of the email along with the “Pay” button.
Avoid agent’s mistakes
The agent who will send the card to the invoice will make mistakes and sometimes leave certain fields blank. So you need to determine which fields are mandatory and add a filter to the scenario that will check if all fields are filled in.
Here’s what it looks like:
After mapping all the fields from the Trello card in the Set multiple variables module, you create a router, and then one branch from it goes to the Telegram message (as a notification of error). There should be a filter in this branch. In this case, it checks mandatory fields, whether their variables empty or not. If at least one field matches emptyarray, i.e. empty, the scenario will pass this filter and send an error message to Telegram. The scenario will not go through the other branch (creating an invoice in Paypal).
In another branch that goes into the creation of the Paypal invoice, we check route type Fallback route which the scenario will continue to use if it cannot go through other branches (in our case, the branch that checks for errors).
So if there is at least 1 required field empty, the scenario goes to the Telegram error notification. If all fields are filled, the scenario goes into invoice link creation.
Examples of notifications in Telegram
In the screenshot above, when an error occurs, all required fields and their contents are displayed. The agent should see for itself where the empty field is.
To display only empty error fields, it is necessary to make the message markup a bit more complicated:
- Create a Set Multiple Variables module and use the if() function to determine which of the fields are empty.
- Combine the empty fields into one line with function split().
- Output the module result to the Telegram message body.
In Telegram, it’s convenient that you can add a mention of an agent with an @. You can use the switch() function to do this. Or you can define each agent nickname in the Set Multiple Variables module beforehand and insert the variable in the message. I described this approach in more detail here.
The function switch() is simple:
- Specify the variable to be checked:
- If the value is A
- Then result is B
- If the value is A1
- then the result is B1
- and so on.
This is the Paypal invoicing scenario. If you have any questions, ask in the comments. This scenario works perfectly. In the next article, I’ll tell you how to receive notifications of successful payment via Paypal, and what you can do with this data.
I love SEO, marketing, I am passionate about automation and I hate manual work that can be delegated to machines.