-
Notifications
You must be signed in to change notification settings - Fork 498
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
update Python Flask/Ruby Sinatra examples (#160)
- Loading branch information
1 parent
2cdd5d3
commit 843672d
Showing
16 changed files
with
488 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
FLASK_RUN_PORT=8080 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# Standard Integration Python Flask Sample | ||
|
||
PayPal Standard Integration sample in Python using Flask | ||
|
||
## Running the sample | ||
|
||
1. **Setup a virtual environment** | ||
|
||
```sh | ||
python3 -m venv .venv | ||
``` | ||
|
||
1. **Install the dependencies** | ||
|
||
```sh | ||
pip install -r requirements.txt | ||
``` | ||
|
||
1. **Add your API credentials to the environment:** | ||
|
||
- **Windows** | ||
|
||
```powershell | ||
$env:PAYPAL_CLIENT_ID = "<PAYPAL_CLIENT_ID>" | ||
$env:PAYPAL_CLIENT_SECRET = "<PAYPAL_CLIENT_SECRET>" | ||
``` | ||
|
||
- **Unix** | ||
|
||
```bash | ||
export PAYPAL_CLIENT_ID="<PAYPAL_CLIENT_ID>" | ||
export PAYPAL_CLIENT_SECRET="<PAYPAL_CLIENT_SECRET>" | ||
``` | ||
|
||
1. **Run the server** | ||
|
||
```sh | ||
flask --app server run | ||
``` | ||
|
||
1. Go to [http://localhost:8080/](http://localhost:8080/) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
Flask==3.0.3 | ||
paypal-server-sdk==0.5.2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
import logging | ||
import os | ||
|
||
from flask import Flask, request | ||
from paypalserversdk.http.auth.o_auth_2 import ClientCredentialsAuthCredentials | ||
from paypalserversdk.logging.configuration.api_logging_configuration import LoggingConfiguration, \ | ||
RequestLoggingConfiguration, ResponseLoggingConfiguration | ||
from paypalserversdk.paypalserversdk_client import PaypalserversdkClient | ||
from paypalserversdk.controllers.orders_controller import OrdersController | ||
from paypalserversdk.models.amount_with_breakdown import AmountWithBreakdown | ||
from paypalserversdk.models.checkout_payment_intent import CheckoutPaymentIntent | ||
from paypalserversdk.models.order_request import OrderRequest | ||
from paypalserversdk.models.purchase_unit_request import PurchaseUnitRequest | ||
from paypalserversdk.api_helper import ApiHelper | ||
|
||
app = Flask(__name__) | ||
|
||
paypal_client: PaypalserversdkClient = PaypalserversdkClient( | ||
client_credentials_auth_credentials=ClientCredentialsAuthCredentials( | ||
o_auth_client_id=os.getenv('PAYPAL_CLIENT_ID'), | ||
o_auth_client_secret=os.getenv('PAYPAL_CLIENT_SECRET') | ||
), | ||
logging_configuration=LoggingConfiguration( | ||
log_level=logging.INFO, | ||
# Disable masking of sensitive headers for Sandbox testing. | ||
# This should be set to True (the default if unset)in production. | ||
mask_sensitive_headers=False, | ||
request_logging_config=RequestLoggingConfiguration( | ||
log_headers=True, | ||
log_body=True | ||
), | ||
response_logging_config=ResponseLoggingConfiguration( | ||
log_headers=True, | ||
log_body=True | ||
) | ||
) | ||
) | ||
|
||
''' | ||
Health check | ||
''' | ||
@app.route('/', methods=['GET']) | ||
def index(): | ||
return {"message": "Server is running"} | ||
|
||
orders_controller: OrdersController = paypal_client.orders | ||
|
||
''' | ||
Create an order to start the transaction. | ||
@see https://developer.paypal.com/docs/api/orders/v2/#orders_create | ||
''' | ||
@app.route('/api/orders', methods=['POST']) | ||
def create_order(): | ||
request_body = request.get_json() | ||
# use the cart information passed from the front-end to calculate the order amount detals | ||
cart = request_body['cart'] | ||
order = orders_controller.orders_create({ | ||
"body": OrderRequest( | ||
intent=CheckoutPaymentIntent.CAPTURE, | ||
purchase_units=[ | ||
PurchaseUnitRequest( | ||
AmountWithBreakdown( | ||
currency_code='USD', | ||
value='100.00' | ||
) | ||
) | ||
] | ||
), | ||
"prefer": 'return=representation' | ||
} | ||
) | ||
return ApiHelper.json_serialize(order.body) | ||
|
||
''' | ||
Capture payment for the created order to complete the transaction. | ||
@see https://developer.paypal.com/docs/api/orders/v2/#orders_capture | ||
''' | ||
@app.route('/api/orders/<order_id>/capture', methods=['POST']) | ||
def capture_order(order_id): | ||
order = orders_controller.orders_capture({ | ||
'id': order_id, | ||
'prefer': 'return=representation' | ||
}) | ||
return ApiHelper.json_serialize(order.body) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
3.3.5 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# frozen_string_literal: true | ||
|
||
source "https://rubygems.org" | ||
|
||
gem "paypal-server-sdk", "~> 0.5.2" | ||
gem "puma", "~> 6.4" | ||
gem "rackup", "~> 2.1" | ||
gem "sinatra", "~> 4.0" | ||
gem "sinatra-contrib", "~> 4.0" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
# Standard Integration Ruby Sinatra Sample | ||
|
||
PayPal Standard Integration sample in Ruby using Sinatra | ||
|
||
## Running the sample | ||
|
||
1. **Ensure you have a supported Ruby version installed**: [Ruby Maintenance Branches](https://www.ruby-lang.org/en/downloads/branches/) | ||
|
||
1. **Install the dependencies** | ||
|
||
```bash | ||
bundle install | ||
``` | ||
|
||
1. **Add your API credentials to the environment:** | ||
|
||
- **Windows** | ||
|
||
```powershell | ||
$env:PAYPAL_CLIENT_ID = "<PAYPAL_CLIENT_ID>" | ||
$env:PAYPAL_CLIENT_SECRET = "<PAYPAL_CLIENT_SECRET>" | ||
``` | ||
|
||
- **Unix** | ||
|
||
```bash | ||
export PAYPAL_CLIENT_ID="<PAYPAL_CLIENT_ID>" | ||
export PAYPAL_CLIENT_SECRET="<PAYPAL_CLIENT_SECRET>" | ||
``` | ||
|
||
1. **Run the server** | ||
|
||
```bash | ||
bundle exec ruby server.rb | ||
``` | ||
|
||
1. Go to [http://localhost:8080/](http://localhost:8080/) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
require 'paypal_server_sdk' | ||
require 'sinatra' | ||
require 'sinatra/json' | ||
|
||
include PaypalServerSdk | ||
|
||
set :port, 8080 | ||
|
||
paypal_client = PaypalServerSdk::Client.new( | ||
client_credentials_auth_credentials: ClientCredentialsAuthCredentials.new( | ||
o_auth_client_id: ENV['PAYPAL_CLIENT_ID'], | ||
o_auth_client_secret: ENV['PAYPAL_CLIENT_SECRET'] | ||
), | ||
environment: Environment::SANDBOX, | ||
logging_configuration: LoggingConfiguration.new( | ||
mask_sensitive_headers: false, | ||
log_level: Logger::INFO, | ||
request_logging_config: RequestLoggingConfiguration.new( | ||
log_headers: true, | ||
log_body: true, | ||
), | ||
response_logging_config: ResponseLoggingConfiguration.new( | ||
log_headers: true, | ||
log_body: true | ||
) | ||
) | ||
) | ||
|
||
# Health Check | ||
get '/' do | ||
json :message => "Server is running" | ||
end | ||
|
||
# Create an order to start the transaction. | ||
# | ||
# @see https://developer.paypal.com/docs/api/orders/v2/#orders_create | ||
post "/api/orders" do | ||
# use the cart information passed from the front-end to calculate the order amount detals | ||
cart = JSON.parse request.body.read | ||
order_response = paypal_client.orders.orders_create({ | ||
'body' => OrderRequest.new( | ||
intent: CheckoutPaymentIntent::CAPTURE, | ||
purchase_units: [ | ||
PurchaseUnitRequest.new( | ||
amount: AmountWithBreakdown.new( | ||
currency_code: 'USD', | ||
value: '100.00' | ||
) | ||
) | ||
] | ||
), | ||
'prefer' => 'return=representation' | ||
}) | ||
json order_response.data | ||
end | ||
|
||
# Capture payment for the created order to complete the transaction. | ||
# | ||
# @see https://developer.paypal.com/docs/api/orders/v2/#orders_capture | ||
post '/api/orders/:order_id/capture' do |order_id| | ||
capture_response = paypal_client.orders.orders_capture({ | ||
'id' => order_id, | ||
'prefer' => 'return=representation' | ||
}) | ||
json capture_response.data | ||
rescue ErrorException => e | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
FLASK_RUN_PORT=8080 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# Standard Integration Python Flask Sample | ||
|
||
PayPal Standard Integration sample in Python using Flask | ||
|
||
## Running the sample | ||
|
||
1. **Setup a virtual environment** | ||
|
||
```sh | ||
python3 -m venv .venv | ||
``` | ||
|
||
1. **Install the dependencies** | ||
|
||
```sh | ||
pip install -r requirements.txt | ||
``` | ||
|
||
1. **Add your API credentials to the environment:** | ||
|
||
- **Windows** | ||
|
||
```powershell | ||
$env:PAYPAL_CLIENT_ID = "<PAYPAL_CLIENT_ID>" | ||
$env:PAYPAL_CLIENT_SECRET = "<PAYPAL_CLIENT_SECRET>" | ||
``` | ||
|
||
- **Unix** | ||
|
||
```bash | ||
export PAYPAL_CLIENT_ID="<PAYPAL_CLIENT_ID>" | ||
export PAYPAL_CLIENT_SECRET="<PAYPAL_CLIENT_SECRET>" | ||
``` | ||
|
||
1. **Run the server** | ||
|
||
```sh | ||
flask --app server run | ||
``` | ||
|
||
1. Go to [http://localhost:8080/](http://localhost:8080/) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
Flask==3.0.3 | ||
paypal-server-sdk==0.5.2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
import logging | ||
import os | ||
|
||
from flask import Flask, request | ||
from paypalserversdk.http.auth.o_auth_2 import ClientCredentialsAuthCredentials | ||
from paypalserversdk.logging.configuration.api_logging_configuration import LoggingConfiguration, \ | ||
RequestLoggingConfiguration, ResponseLoggingConfiguration | ||
from paypalserversdk.paypalserversdk_client import PaypalserversdkClient | ||
from paypalserversdk.controllers.orders_controller import OrdersController | ||
from paypalserversdk.models.amount_with_breakdown import AmountWithBreakdown | ||
from paypalserversdk.models.checkout_payment_intent import CheckoutPaymentIntent | ||
from paypalserversdk.models.order_request import OrderRequest | ||
from paypalserversdk.models.purchase_unit_request import PurchaseUnitRequest | ||
from paypalserversdk.api_helper import ApiHelper | ||
|
||
app = Flask(__name__) | ||
|
||
paypal_client: PaypalserversdkClient = PaypalserversdkClient( | ||
client_credentials_auth_credentials=ClientCredentialsAuthCredentials( | ||
o_auth_client_id=os.getenv('PAYPAL_CLIENT_ID'), | ||
o_auth_client_secret=os.getenv('PAYPAL_CLIENT_SECRET') | ||
), | ||
logging_configuration=LoggingConfiguration( | ||
log_level=logging.INFO, | ||
# Disable masking of sensitive headers for Sandbox testing. | ||
# This should be set to True (the default if unset)in production. | ||
mask_sensitive_headers=False, | ||
request_logging_config=RequestLoggingConfiguration( | ||
log_headers=True, | ||
log_body=True | ||
), | ||
response_logging_config=ResponseLoggingConfiguration( | ||
log_headers=True, | ||
log_body=True | ||
) | ||
) | ||
) | ||
|
||
''' | ||
Health check | ||
''' | ||
@app.route('/', methods=['GET']) | ||
def index(): | ||
return {"message": "Server is running"} | ||
|
||
orders_controller: OrdersController = paypal_client.orders | ||
|
||
''' | ||
Create an order to start the transaction. | ||
@see https://developer.paypal.com/docs/api/orders/v2/#orders_create | ||
''' | ||
@app.route('/api/orders', methods=['POST']) | ||
def create_order(): | ||
request_body = request.get_json() | ||
# use the cart information passed from the front-end to calculate the order amount detals | ||
cart = request_body['cart'] | ||
order = orders_controller.orders_create({ | ||
"body": OrderRequest( | ||
intent=CheckoutPaymentIntent.CAPTURE, | ||
purchase_units=[ | ||
PurchaseUnitRequest( | ||
AmountWithBreakdown( | ||
currency_code='USD', | ||
value='100.00' | ||
) | ||
) | ||
] | ||
), | ||
"prefer": 'return=representation' | ||
} | ||
) | ||
return ApiHelper.json_serialize(order.body) | ||
|
||
''' | ||
Capture payment for the created order to complete the transaction. | ||
@see https://developer.paypal.com/docs/api/orders/v2/#orders_capture | ||
''' | ||
@app.route('/api/orders/<order_id>/capture', methods=['POST']) | ||
def capture_order(order_id): | ||
order = orders_controller.orders_capture({ | ||
'id': order_id, | ||
'prefer': 'return=representation' | ||
}) | ||
return ApiHelper.json_serialize(order.body) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
3.3.5 |
Oops, something went wrong.