PayPal Servidor, Generar token de autorización para procesar la orden #-Python Django 28

Ya por aquí generadas nuestras claves recapitulando un poco y por aquí también el la URL de acceso el siguiente punto es empezar a hacer la conexión en este caso como te comentaba antes de aprobar la orden vamos a requerir de un token de acceso esto es algo más o menos común pero en vez de mandarle el usuario contraseña que sería el Secret y el client le mandamos es el token el token de autorización cuando hagamos una petición eso es básicamente el por qué se requiere este token entonces aclarado eso como te comentaba vamos a implementarlo por acá así que vamos a crear aquí un método para el token de acceso.

mystore\elements\views.py

import requests
from django.conf import settings
from django.http import JsonResponse

class PayPalPayment:
   def __init__(self):
       self.client_id = settings.PAYPAL_CLIENT_ID
       self.secret = settings.PAYPAL_SECRET
       self.base_url = settings.PAYPAL_BASE_URL

   def get_access_token(self):
       url = f"{self.base_url}/v1/oauth2/token"
       headers = {
           "Accept": "application/json",
           "Content-Type": "application/x-www-form-urlencoded",
       }
       data = {"grant_type": "client_credentials"}

       response = requests.post(url, auth=(self.client_id, self.secret), data=data, headers=headers)

       if response.status_code == 200:
           return response.json().get("access_token")
       else:
           return None

Como puntos importantes tenemos que, agregamos la URL a la cual debemos de realizar la petición:

url = f"{self.base_url}/v1/oauth2/token"

Los headers, para indicar que devuelva una respuesta en formato JSON y que la petición es enviada NO como una petición JSON si no como si fuera un formulario:

headers = {
   "Accept": "application/json",
    "Content-Type": "application/x-www-form-urlencoded",
}

Indicamos que la petición es para generar el token de acceso:

data = {"grant_type": "client_credentials"}

Armamos la petición que es de tipo POST y suministramos los datos anteriores:

response = requests.post(url, auth=(self.client_id, self.secret), data=data, headers=headers)

Con:

return response.json()

Obtenemos toda la respuesta, que es formato JSON según configuramos anteriormente, nos interesa es solo el token que es registrado en:

return response.json().get("access_token")

También, verificamos que el estatus de la petición sea 200 que indica que el token fue generado exitosamente, cualquier otro status, indica que NO se pudo generar el token:

response.status_code

El token luce similar a:

A21AAJmqsBwihAFF236Y6pnisFJWK***hy3Qr6SsZNr0BsWPFIwEkXqu45bkJHlDgxkknDUkoSA

Y es el que tenemos que suministrar en lugar del client y el secret al momento de aprobar la orden; toda la estructura de los datos son los estipulados por PayPal.

Acepto recibir anuncios de interes sobre este Blog.

Vamos a generar el token de acceso para poder procesar la orden.

- Andrés Cruz

In english

Este material forma parte de mi curso y libro completo; puedes adquirirlos desde el apartado de libros y/o cursos Curso y Libro desarrollo web con Django 5 y Python 3 + integración con Vue 3, Bootstrap y Alpine.js.