INTRODUCTION:
Paypal is one of the best online payment services which is used worldwide. In this blog, we are going to see how we can get the PayPal payment notification (IPN) on python. The method we are going to use uses webhooks and MQTT and this payment method can be used to receive a payment notification from Arduino, Raspberry pi, nodemcu, ESP or any other board you know. For this project, we will be using PayPal IPN but we will not be using any web hosting or PHP servers so this tutorial is completely different from all other PayPal IPN tutorial out there. So this tutorial will help you implement paypal in raspberry pi and paypal in ESP.
APPLICATIONS
- Can be used as a payment option on vending machines made by raspberry pi or nodemcu.
- Can be used on live streams and you can trigger anything from Raspberry pi. if payment is received.
I want you to write in comments, where this method can be implemented.
VIDEO TUTORIAL:
LET’S GET STARTED:
SETUP ZAPIER ACCOUNT:
The first thing we have to do is go to zapier.com which is an online service to automate the workflows, It works like IFTTT. You will have to sign up for an account or sign up using google or facebook.
MAKE A ZAP:
After signing up, you will have to click on make a zap and in the when this happens part search for webhooks and you will able to see webhooks by zapier, click it.
SETUP TRIGGER PART:
Then you will have to select the trigger event, we will select CATCH HOOK here and then we will press continue.
In the Hook customized window there will be a custom webhook URL, we have to copy it then press continue.
TEST WORKFLOW USING PAYPAL WEBHOOK SIMULATOR:
Now to test our connection and to assure our workflow process we will go to PayPal developers.
Now we will go to developers.paypal.com and go to Webhook Simulator and paste the customized URL here that we copied earlier. Select an Event Type and click on the send test.
Now go to zapier and press pull in Hooks or Get more samples and you will get the hook there, and it will assure its working.
SETUP PUBNUB ACCOUNT AND GETTING KEYSET:
Now the next step is we have to go to pubnub.com which is an online service and provides Cloud MQTT Service so we are going to use this service to get messages using MQTT.
And you will have to sign up for an account After signing up, login and create a new app.
Write the name of your app Press continue
Click on the app you have created recently and you will see that there is publish key and subscribe key you have to copy them.
SETTING UP ACTION ON ZAPIER:
Now go back to zapier.com and now we will add Action we have already defined the trigger and now we have to define action so we can get MQTT messages on Raspberry Pi or nodemcu or Arduino or any python running machine.
Click on edit action And search for webhook by zapier.
and in the events, select GET and press continue now.
we have to put some parameters like we have to put URL and here is the format of URL. We will Replace the publish and subscribe it with our publish and subscribe key and then we will put this in zapier get URL.
http://pubsub.pubnub.com//publish/publish-key/subscribe-key/0/paymentTrigger/0/{“requester”:”pi”,”trigger”:”anything”,”status”:1}
and then we will press continue we can skip the test now and don’t forget to turn your zap on.
PAYPAL SETTINGS:
we have tested the workflow using the simulator and now its time to put the webhook URL which we were using in the simulator, in the PayPal IPN settings in order to receive the notification when someone in real makes payment.
The first thing you have to go is to go in account settings in your PayPal account.
And then click on notifications.
Update instant payment notifications or IPN.
Click on Edit Settings and update the information and turn on the IPN service.
and you are good to go now. we have completed the setup of online services and now we have to write the Raspberry Pi code.
RASPBERRY PI SETUP:
all you have to do is to install the PubNub library which you can do by typing,
pip2 install pubnub== 3.9.0
PYTHON CODE:
This code can be run on any device that can run Python 2, this was tested on raspberry pi 3B and windows 10 machine.
# Import all the libraries from pubnub import Pubnub import time # Initialize the Pubnub Keys # Replace them with your keysets pub_key = "pub-c-XXXXXXXXXXXXX" sub_key = "sub-c-XXXXXXXXXXXXX" def init(): # initalize the pubnub keys and start subscribing global pubnub # Pubnub Initialization pubnub = Pubnub(publish_key=pub_key, subscribe_key=sub_key) pubnub.subscribe(channels='paymentTrigger', callback=callback, error=callback, reconnect=reconnect, disconnect=disconnect) def get_message(controlCommand): if (controlCommand.has_key("trigger")): if (controlCommand["trigger"] == "anything" and controlCommand["status"] == 1): print("payment recieved") else: pass else: pass def callback(message, channel): # this function waits for the message from the aleatrigger channel print(message) if (message.has_key("requester")): get_message(message) else: pass def error(message): # if there is error in the channel,print the error print("ERROR : " + str(message)) def reconnect(message): # responds if server connects with pubnub print("RECONNECTED") def disconnect(message): # responds if server disconnects with pubnub print("DISCONNECTED") if __name__ == '__main__': init() # Initialize the Script
now we will have to replace the publish and subscribe key with your keysets and we can run the code.
NODEMCU SETUP:
In order to run this code on nodemcu, we will have to use pubnub library for nodeMCU and we can do that by going into library manager in Arduino IDE and installing PubNub library by Vladimir. You will have to replace the WIFI SSID, WIFI password, Publish and subscribe keys in the code.
After installing the library all we have to do is to restart the IDE and connect our board with PC, select the board type and select the com port and in the end, we will have to upload the code.
ET// PubNub example using ESP8266. #include <ESP8266WiFi.h> #define PubNub_BASE_CLIENT WiFiClient #include <PubNub.h> static char ssid[] = "XXXXXXXX"; static char pass[] = "XXXXXXXX"; const static char pubkey[] = "pub-c-XXXXXXXXXXX"; const static char subkey[] = "sub-c-XXXXXXXXXXX"; const static char channel[] = "paymentTrigger"; String message; void setup() { Serial.begin(9600); Serial.println("Attempting to connect..."); WiFi.begin(ssid, pass); if(WiFi.waitForConnectResult() != WL_CONNECTED) { // Connect to WiFi. Serial.println("Couldn't connect to WiFi."); while(1) delay(100); } else { Serial.print("Connected to SSID: "); Serial.println(ssid); PubNub.begin(pubkey, subkey); // Start PubNub. Serial.println("PubNub is set up."); } } void loop() { { // Subscribe. PubSubClient* sclient = PubNub.subscribe(channel); // Subscribe. if (0 == sclient) { Serial.println("Error subscribing to channel."); delay(1000); return; } while (sclient->wait_for_data()) { // Print messages. Serial.write(sclient->read()); } Serial.println("Payment Recieved"); sclient->stop(); } delay(1000); }
Replace X’s with the respective values.
THAT’S IT:
Hopefully by following the tutorial you have integrated payment solution in your Raspberry pi, Arduino or ESP project . If you love the tutorial please write in comments and don’t forget to subscribe us on youtube.
and check out our facebook page.
for any query, you can contact us.