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.