
Let's say you have a web app and you want to add some sort of PayPal Checkout. Let's say your Docker server is a Linux system. Move into your /tmp directory and clone the https://github.com/paypal-examples/docs-examples.git repository.
~]$ cd /tmp
~]$ git clone https://github.com/paypal-examples/docs-examples.git
Update /tmp/docs-examples/standard-integration/server/server.js to have either the sandbox or production base URL.
const base = "https://api-m.sandbox.paypal.com"; <- sandbox
const base = "https://api-m.paypal.com"; <- production
Let's first set this up in the Sandbox environment.
- Go to https://developer.paypal.com/dashboard/applications/sandbox
- Select Create App and follow the prompts to create an app. You should get a Client ID and Secret.
Rename /tmp/docs-examples/standard-integration/.env.example to .env and update .env to have your apps Client ID and Secret.
PAYPAL_CLIENT_ID="YOUR_CLIENT_ID_GOES_HERE"
PAYPAL_CLIENT_SECRET="YOUR_SECRET_GOES_HERE"
By default, /tmp/docs-examples/advanced-integration/v2/server/server.js will have USD 100.00 (e.g. $100.00). You may want to change this, especially when testing/debugging.
const createOrder = async (cart) => {
console.log(
"shopping cart information passed from the frontend createOrder() callback:",
cart,
);
const accessToken = await generateAccessToken();
const url = `${base}/v2/checkout/orders`;
const payload = {
intent: "CAPTURE",
purchase_units: [
{
amount: {
currency_code: "USD",
value: "100.00",
},
},
],
};
Create a file named Dockerfile in the /tmp/docs-examples/standard-integration directory.
touch /tmp/docs-examples/advanced-integration/Dockerfile
The Dockerfile should have something like this.
- Use RUN npm install when creating the sandbox container
- Use RUN npm install --omit=dev when creating the production container
FROM node:18-alpine
WORKDIR /src
COPY .env package.json /src/
COPY client/checkout.js /src/client/
COPY server/server.js /src/server/
COPY server/views/checkout.ejs /src/server/views/
RUN npm install
EXPOSE 8888
CMD ["npm", "start"]
Move into the directory that contains the Dockerfile.
cd /tmp/docs-examples/standard-integration/
Use the docker build command to create the Node.js image using the Dockerfile.
sudo docker build --file Dockerfile --tag paypal-nodejs:18-alpine .
The docker images command should return something like this.
~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
paypal-nodejs 18-alpine 824127ec51d1 2 weeks ago 189MB
The docker run command can be used to create and start a Docker container from the Node.js image.
sudo docker run \
--name paypal-nodejs \
--publish 0.0.0.0:8888:8888 \
--detach \
paypal-nodejs:18-alpine
The docker container ls command should show the container is up and running.
~]$ sudo docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c19d5eab9a75 paypal-nodejs:18-alpine "docker-entrypoint.s…" 2 weeks ago Up 2 weeks 0.0.0.0:8888->8888/tcp paypal-nodejs
The docker logs command should return something like this.
> @paypalcorp/standard-integration@1.0.0 start
> node server.js
Server listening at http://localhost:8888/
Go to http://<your Docker servers hostname or IP address>:8888/ and the following should be displayed.
Click the PayPal button and a pop-up should appear prompting you to sign into Sandbox PayPal. Sign in.
Once signed in, you should be presented with a form to test a payment.
In https://developer.paypal.com/dashboard/applications/sandbox, on the Event Logs tab, there should be 201 OK events for the completed transation.
Did you find this article helpful?
If so, consider buying me a coffee over at