Actualizacion la compra con logs logs correspondientes
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
# Generated by Django 5.1.4 on 2025-02-16 18:16
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('home', '0008_category_remove_storecategory_parent_category_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='StripeLog',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('account_id', models.IntegerField()),
|
||||
('username', models.CharField(max_length=100)),
|
||||
('email', models.EmailField(max_length=254)),
|
||||
('acore_ip', models.GenericIPAddressField()),
|
||||
('stripe_ip', models.GenericIPAddressField(blank=True, null=True)),
|
||||
('product_name', models.TextField()),
|
||||
('amount', models.DecimalField(decimal_places=2, max_digits=10)),
|
||||
('session_id', models.CharField(max_length=255)),
|
||||
('mode', models.CharField(choices=[('test', 'Test'), ('live', 'Live')], max_length=10)),
|
||||
('character_name', models.CharField(max_length=100)),
|
||||
('timestamp', models.DateTimeField(auto_now_add=True)),
|
||||
],
|
||||
),
|
||||
]
|
||||
+17
-1
@@ -271,4 +271,20 @@ class HomeApiPoints(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
return f"Cuenta {self.accountID} - PV: {self.vp}, DP: {self.dp}"
|
||||
|
||||
|
||||
|
||||
class StripeLog(models.Model):
|
||||
account_id = models.IntegerField() # ID de la cuenta en acore_auth
|
||||
username = models.CharField(max_length=100) # Nombre de la cuenta
|
||||
email = models.EmailField() # Correo electrónico
|
||||
acore_ip = models.GenericIPAddressField() # IP de acore_auth
|
||||
stripe_ip = models.GenericIPAddressField(blank=True, null=True) # IP detectada por Stripe
|
||||
product_name = models.TextField() # Producto comprado
|
||||
amount = models.DecimalField(max_digits=10, decimal_places=2) # Precio total
|
||||
session_id = models.CharField(max_length=255) # ID de la sesión de Stripe
|
||||
mode = models.CharField(max_length=10, choices=[("test", "Test"), ("live", "Live")]) # Modo de Stripe
|
||||
character_name = models.CharField(max_length=100) # Nombre del personaje que compró
|
||||
timestamp = models.DateTimeField(auto_now_add=True) # Fecha y hora
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.username} compró {self.product_name} por {self.amount}€ ({self.mode})"
|
||||
+25
-3
@@ -1,10 +1,12 @@
|
||||
import stripe
|
||||
from django.conf import settings
|
||||
|
||||
from .models import StripeLog
|
||||
from django.utils.timezone import now
|
||||
stripe.api_key = settings.STRIPE_SECRET_KEY
|
||||
|
||||
def create_checkout_session(amount, currency="eur", success_url=None, cancel_url=None, product_name=""):
|
||||
def create_checkout_session(account_id, username, email, acore_ip, amount, character_name, currency="eur", success_url=None, cancel_url=None, product_name=""):
|
||||
try:
|
||||
# 🔹 Crear sesión de pago en Stripe
|
||||
session = stripe.checkout.Session.create(
|
||||
payment_method_types=["card"],
|
||||
line_items=[{
|
||||
@@ -19,6 +21,26 @@ def create_checkout_session(amount, currency="eur", success_url=None, cancel_url
|
||||
success_url=success_url,
|
||||
cancel_url=cancel_url,
|
||||
)
|
||||
|
||||
# 🔹 Determinar si Stripe está en modo TEST o LIVE
|
||||
mode = "live" if settings.STRIPE_SECRET_KEY.startswith("sk_live") else "test"
|
||||
|
||||
# 🔹 Guardar el log en la base de datos
|
||||
StripeLog.objects.create(
|
||||
account_id=account_id,
|
||||
username=username,
|
||||
email=email,
|
||||
acore_ip=acore_ip,
|
||||
stripe_ip=None, # Se actualizará cuando llegue el webhook
|
||||
product_name=product_name,
|
||||
amount=amount,
|
||||
session_id=session.id,
|
||||
mode=mode,
|
||||
character_name=character_name,
|
||||
timestamp=now()
|
||||
)
|
||||
|
||||
return {"success": True, "session_id": session.id}
|
||||
|
||||
except Exception as e:
|
||||
return {"success": False, "error": str(e)}
|
||||
return {"success": False, "error": str(e)}
|
||||
+4
-2
@@ -1,6 +1,6 @@
|
||||
from django.urls import path
|
||||
from . import views
|
||||
from .views import home_view, download_client_view, content_creators_view
|
||||
from .views import home_view, download_client_view, content_creators_view, stripe_webhook
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.home_view, name='index'), # Ruta para la página principal
|
||||
@@ -71,7 +71,9 @@ urlpatterns = [
|
||||
path('restore-character/', views.restore_character_view, name='restore-character'),
|
||||
path('restore-items/', views.restore_items_view, name='restore-items'),
|
||||
path('quest-character/', views.quest_character_view, name='quest-character'),
|
||||
path('send-gift/', views.send_gift_view, name='send-gift'),
|
||||
path('send-gift/', views.send_gift_view, name='send-gift'),
|
||||
path("webhook/stripe/", stripe_webhook, name="stripe-webhook"),
|
||||
|
||||
]
|
||||
|
||||
handler404 = 'home.views.not_found'
|
||||
|
||||
+241
-78
@@ -6,8 +6,9 @@ from django.db import connections
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth import logout
|
||||
from django import forms
|
||||
import stripe
|
||||
from .pagos_stripe import create_checkout_session
|
||||
from .models import Noticia, ClienteCategoria, ServerSelection, RecruitAFriend, DownloadClientPage, ContentCreator, RecruitReward, ClaimedReward, AccountActivation, SecurityToken, GuildRenameSettings, VoteSite, VoteLog, HomeApiPoints, UnstuckHistory, ReviveHistory, RenamePrice, CustomizePrice, ChangeRacePrice, ChangeFactionPrice, LevelUpPrice, GoldPrice, TransferPrice, Category, Item
|
||||
from .models import Noticia, ClienteCategoria, ServerSelection, RecruitAFriend, DownloadClientPage, ContentCreator, RecruitReward, ClaimedReward, AccountActivation, SecurityToken, GuildRenameSettings, VoteSite, VoteLog, HomeApiPoints, UnstuckHistory, ReviveHistory, RenamePrice, CustomizePrice, ChangeRacePrice, ChangeFactionPrice, LevelUpPrice, GoldPrice, TransferPrice, Category, Item, StripeLog
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from datetime import datetime, timedelta
|
||||
from .zone_definitions import get_zone_name
|
||||
@@ -22,6 +23,27 @@ from decimal import Decimal, ROUND_HALF_UP
|
||||
# Configuración del logger
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@csrf_exempt
|
||||
def stripe_webhook(request):
|
||||
payload = request.body
|
||||
sig_header = request.META.get("HTTP_STRIPE_SIGNATURE")
|
||||
|
||||
try:
|
||||
event = stripe.Webhook.construct_event(payload, sig_header, settings.STRIPE_WEBHOOK_SECRET)
|
||||
|
||||
if event["type"] == "checkout.session.completed":
|
||||
session = event["data"]["object"]
|
||||
session_id = session["id"]
|
||||
stripe_ip = request.META.get("REMOTE_ADDR") # IP detectada
|
||||
|
||||
# 🔹 Actualizar la IP de Stripe en el log
|
||||
StripeLog.objects.filter(session_id=session_id).update(stripe_ip=stripe_ip, timestamp=now())
|
||||
|
||||
return JsonResponse({"success": True})
|
||||
|
||||
except stripe.error.SignatureVerificationError:
|
||||
return JsonResponse({"success": False, "message": "Firma de webhook no válida."}, status=400)
|
||||
|
||||
def get_class_css(class_id):
|
||||
class_map = {
|
||||
1: 'warrior',
|
||||
@@ -1141,45 +1163,60 @@ def rename_character_view(request):
|
||||
if not username:
|
||||
return redirect('login')
|
||||
|
||||
# Obtener personajes del usuario desde la base de datos `acore_characters`
|
||||
# 🔹 Obtener información de la cuenta desde acore_auth
|
||||
with connections['acore_auth'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT id, email, last_ip FROM account WHERE username = %s
|
||||
""", [username])
|
||||
account_info = cursor.fetchone()
|
||||
|
||||
if not account_info:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Error: Cuenta no encontrada.</span>'})
|
||||
|
||||
account_id, email, acore_ip = account_info
|
||||
client_ip = request.META.get('REMOTE_ADDR', '')
|
||||
|
||||
# 🔹 Obtener personajes del usuario desde la base de datos `acore_characters`
|
||||
with connections['acore_characters'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT name
|
||||
FROM characters
|
||||
WHERE account = (
|
||||
SELECT id
|
||||
FROM acore_auth.account
|
||||
WHERE username = %s
|
||||
)
|
||||
""", [username])
|
||||
SELECT name FROM characters WHERE account = %s
|
||||
""", [account_id])
|
||||
characters = [row[0] for row in cursor.fetchall()]
|
||||
|
||||
# Obtener el precio del renombrado
|
||||
# 🔹 Obtener el precio del renombrado
|
||||
price_obj = RenamePrice.objects.first()
|
||||
price = price_obj.price if price_obj else 2.00
|
||||
|
||||
# Ejecutar el comando SOAP De prueba haber si el servidor funciona antes de proceder al pago
|
||||
|
||||
# 🔹 Ejecutar el comando SOAP para verificar el servidor
|
||||
command = f".server info"
|
||||
response = execute_soap_command(command)
|
||||
|
||||
if request.method == 'POST':
|
||||
character_name = request.POST.get('character')
|
||||
|
||||
|
||||
if response is None:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Error de comunicación con el servidor. Intente nuevamente más tarde.</span>'})
|
||||
|
||||
# Validar si el personaje fue seleccionado
|
||||
if not character_name:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Por favor, seleccione un personaje.</span>'})
|
||||
|
||||
# Verificar si el personaje pertenece al usuario
|
||||
if character_name not in characters:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">No tienes permiso para renombrar este personaje.</span>'})
|
||||
|
||||
# Crear sesión de pago con Stripe
|
||||
# 🔹 Crear sesión de pago con Stripe
|
||||
success_url = request.build_absolute_uri(reverse('rename-success'))
|
||||
cancel_url = request.build_absolute_uri(reverse('rename-cancel'))
|
||||
stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Renombrar personaje: {character_name}")
|
||||
stripe_response = create_checkout_session(
|
||||
account_id=account_id,
|
||||
username=username,
|
||||
email=email,
|
||||
acore_ip=acore_ip,
|
||||
amount=price,
|
||||
character_name=character_name,
|
||||
success_url=success_url,
|
||||
cancel_url=cancel_url,
|
||||
product_name=f"Renombrar personaje: {character_name}"
|
||||
)
|
||||
|
||||
if stripe_response["success"]:
|
||||
request.session['rename_character'] = character_name
|
||||
@@ -1244,17 +1281,25 @@ def customize_character_view(request):
|
||||
if not username:
|
||||
return redirect('login')
|
||||
|
||||
# Obtener personajes del usuario desde la base de datos `acore_characters`
|
||||
# ?? Obtener informaci��n de la cuenta desde acore_auth
|
||||
with connections['acore_auth'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT id, email, last_ip FROM account WHERE username = %s
|
||||
""", [username])
|
||||
account_info = cursor.fetchone()
|
||||
|
||||
if not account_info:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Error: Cuenta no encontrada.</span>'})
|
||||
|
||||
account_id, email, acore_ip = account_info
|
||||
client_ip = request.META.get('REMOTE_ADDR', '')
|
||||
|
||||
# ?? Obtener personajes del usuario desde la base de datos `acore_characters`
|
||||
with connections['acore_characters'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT name
|
||||
FROM characters
|
||||
WHERE account = (
|
||||
SELECT id
|
||||
FROM acore_auth.account
|
||||
WHERE username = %s
|
||||
)
|
||||
""", [username])
|
||||
SELECT name FROM characters WHERE account = %s
|
||||
""", [account_id])
|
||||
|
||||
characters = [row[0] for row in cursor.fetchall()]
|
||||
|
||||
# Obtener el precio de la personalización (si se gestiona desde el admin)
|
||||
@@ -1275,7 +1320,17 @@ def customize_character_view(request):
|
||||
# Crear sesión de pago con Stripe
|
||||
success_url = request.build_absolute_uri(reverse('customize-success'))
|
||||
cancel_url = request.build_absolute_uri(reverse('customize-cancel'))
|
||||
stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Personalizar personaje: {character_name}")
|
||||
stripe_response = create_checkout_session(
|
||||
account_id=account_id,
|
||||
username=username,
|
||||
email=email,
|
||||
acore_ip=acore_ip,
|
||||
amount=price,
|
||||
character_name=character_name,
|
||||
success_url=success_url,
|
||||
cancel_url=cancel_url,
|
||||
product_name=f"Personalizar personaje: {character_name}"
|
||||
)
|
||||
|
||||
|
||||
if stripe_response["success"]:
|
||||
@@ -1319,16 +1374,23 @@ def change_race_character_view(request):
|
||||
return redirect('login')
|
||||
|
||||
# Obtener personajes del usuario desde la base de datos `acore_characters`
|
||||
with connections['acore_auth'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT id, email, last_ip FROM account WHERE username = %s
|
||||
""", [username])
|
||||
account_info = cursor.fetchone()
|
||||
|
||||
if not account_info:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Error: Cuenta no encontrada.</span>'})
|
||||
|
||||
account_id, email, acore_ip = account_info
|
||||
client_ip = request.META.get('REMOTE_ADDR', '')
|
||||
|
||||
# ?? Obtener personajes del usuario desde la base de datos `acore_characters`
|
||||
with connections['acore_characters'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT name
|
||||
FROM characters
|
||||
WHERE account = (
|
||||
SELECT id
|
||||
FROM acore_auth.account
|
||||
WHERE username = %s
|
||||
)
|
||||
""", [username])
|
||||
SELECT name FROM characters WHERE account = %s
|
||||
""", [account_id])
|
||||
characters = [row[0] for row in cursor.fetchall()]
|
||||
|
||||
# Obtener el precio del cambio de raza
|
||||
@@ -1349,7 +1411,17 @@ def change_race_character_view(request):
|
||||
# Crear sesión de pago con Stripe
|
||||
success_url = request.build_absolute_uri(reverse('change-race-success'))
|
||||
cancel_url = request.build_absolute_uri(reverse('change-race-cancel'))
|
||||
stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Cambio de Raza del personaje: {character_name}")
|
||||
stripe_response = create_checkout_session(
|
||||
account_id=account_id,
|
||||
username=username,
|
||||
email=email,
|
||||
acore_ip=acore_ip,
|
||||
amount=price,
|
||||
character_name=character_name,
|
||||
success_url=success_url,
|
||||
cancel_url=cancel_url,
|
||||
product_name=f"Cambio de Raza del personaje: {character_name}"
|
||||
)
|
||||
|
||||
if stripe_response["success"]:
|
||||
# Guardar el personaje en la sesión para el cambio
|
||||
@@ -1392,16 +1464,23 @@ def change_faction_character_view(request):
|
||||
return redirect('login')
|
||||
|
||||
# Obtener personajes del usuario desde la base de datos `acore_characters`
|
||||
with connections['acore_auth'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT id, email, last_ip FROM account WHERE username = %s
|
||||
""", [username])
|
||||
account_info = cursor.fetchone()
|
||||
|
||||
if not account_info:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Error: Cuenta no encontrada.</span>'})
|
||||
|
||||
account_id, email, acore_ip = account_info
|
||||
client_ip = request.META.get('REMOTE_ADDR', '')
|
||||
|
||||
# ?? Obtener personajes del usuario desde la base de datos `acore_characters`
|
||||
with connections['acore_characters'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT name
|
||||
FROM characters
|
||||
WHERE account = (
|
||||
SELECT id
|
||||
FROM acore_auth.account
|
||||
WHERE username = %s
|
||||
)
|
||||
""", [username])
|
||||
SELECT name FROM characters WHERE account = %s
|
||||
""", [account_id])
|
||||
characters = [row[0] for row in cursor.fetchall()]
|
||||
|
||||
# Obtener el precio del cambio de facción
|
||||
@@ -1422,7 +1501,17 @@ def change_faction_character_view(request):
|
||||
# Crear sesión de pago con Stripe
|
||||
success_url = request.build_absolute_uri(reverse('change-faction-success'))
|
||||
cancel_url = request.build_absolute_uri(reverse('change-faction-cancel'))
|
||||
stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Cambiar Faccion del personaje: {character_name}")
|
||||
stripe_response = create_checkout_session(
|
||||
account_id=account_id,
|
||||
username=username,
|
||||
email=email,
|
||||
acore_ip=acore_ip,
|
||||
amount=price,
|
||||
character_name=character_name,
|
||||
success_url=success_url,
|
||||
cancel_url=cancel_url,
|
||||
product_name=f"Cambiar Faccion del personaje: {character_name}"
|
||||
)
|
||||
|
||||
if stripe_response["success"]:
|
||||
# Guardar el personaje seleccionado en la sesión
|
||||
@@ -1466,16 +1555,23 @@ def level_up_character_view(request):
|
||||
return redirect('login')
|
||||
|
||||
# Obtener personajes del usuario desde la base de datos `acore_characters`
|
||||
with connections['acore_auth'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT id, email, last_ip FROM account WHERE username = %s
|
||||
""", [username])
|
||||
account_info = cursor.fetchone()
|
||||
|
||||
if not account_info:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Error: Cuenta no encontrada.</span>'})
|
||||
|
||||
account_id, email, acore_ip = account_info
|
||||
client_ip = request.META.get('REMOTE_ADDR', '')
|
||||
|
||||
# ?? Obtener personajes del usuario desde la base de datos `acore_characters`
|
||||
with connections['acore_characters'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT name
|
||||
FROM characters
|
||||
WHERE account = (
|
||||
SELECT id
|
||||
FROM acore_auth.account
|
||||
WHERE username = %s
|
||||
)
|
||||
""", [username])
|
||||
SELECT name FROM characters WHERE account = %s
|
||||
""", [account_id])
|
||||
characters = [row[0] for row in cursor.fetchall()]
|
||||
|
||||
# Obtener el precio de subir a nivel 80
|
||||
@@ -1496,7 +1592,17 @@ def level_up_character_view(request):
|
||||
# Crear sesión de pago con Stripe
|
||||
success_url = request.build_absolute_uri(reverse('level-up-success'))
|
||||
cancel_url = request.build_absolute_uri(reverse('level-up-cancel'))
|
||||
stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Subir el Nivel 80 del personaje: {character_name}")
|
||||
stripe_response = create_checkout_session(
|
||||
account_id=account_id,
|
||||
username=username,
|
||||
email=email,
|
||||
acore_ip=acore_ip,
|
||||
amount=price,
|
||||
character_name=character_name,
|
||||
success_url=success_url,
|
||||
cancel_url=cancel_url,
|
||||
product_name=f"Subir el Nivel 80 del personaje: {character_name}"
|
||||
)
|
||||
|
||||
if stripe_response["success"]:
|
||||
# Guardar el personaje en la sesión para usarlo después del pago
|
||||
@@ -1542,19 +1648,30 @@ def gold_character_view(request):
|
||||
return redirect('login')
|
||||
|
||||
# Obtener personajes y estado de conexión del usuario
|
||||
with connections['acore_characters'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT name, online, money
|
||||
FROM characters
|
||||
WHERE account = (
|
||||
SELECT id
|
||||
FROM acore_auth.account
|
||||
WHERE username = %s
|
||||
)
|
||||
""", [username])
|
||||
characters_data = cursor.fetchall()
|
||||
try:
|
||||
with connections['acore_auth'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT id, email, last_ip FROM account WHERE username = %s
|
||||
""", [username])
|
||||
account_info = cursor.fetchone()
|
||||
|
||||
characters = {row[0]: {'online': row[1], 'money': row[2]} for row in characters_data}
|
||||
if not account_info:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Error: Cuenta no encontrada.</span>'})
|
||||
|
||||
account_id, email, acore_ip = account_info
|
||||
client_ip = request.META.get('REMOTE_ADDR', '')
|
||||
|
||||
# Obtener personajes del usuario desde la base de datos `acore_characters`
|
||||
with connections['acore_characters'].cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT name, online, money FROM characters WHERE account = %s
|
||||
""", [account_id])
|
||||
characters_data = cursor.fetchall()
|
||||
|
||||
characters = {row[0]: {'online': row[1], 'money': row[2]} for row in characters_data}
|
||||
|
||||
except Exception as e:
|
||||
return JsonResponse({'success': False, 'message': f'<span class="red-form-response">Error al obtener los personajes: {str(e)}</span>'})
|
||||
|
||||
# Obtener precios del oro
|
||||
gold_prices = GoldPrice.objects.all().order_by('gold_amount')
|
||||
@@ -1588,7 +1705,19 @@ def gold_character_view(request):
|
||||
# Crear sesión de pago con Stripe
|
||||
success_url = request.build_absolute_uri(reverse('gold-success'))
|
||||
cancel_url = request.build_absolute_uri(reverse('gold-cancel'))
|
||||
stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Aumentar el Oro: {gold_amount} al Personaje: {character_name}")
|
||||
|
||||
# Llamada corregida a create_checkout_session con todos los parámetros requeridos
|
||||
stripe_response = create_checkout_session(
|
||||
account_id=account_id,
|
||||
username=username,
|
||||
email=email,
|
||||
acore_ip=acore_ip,
|
||||
amount=stripe_price, # El precio calculado
|
||||
character_name=character_name,
|
||||
success_url=success_url,
|
||||
cancel_url=cancel_url,
|
||||
product_name=f"Aumentar el Oro: {gold_amount} al Personaje: {character_name}"
|
||||
)
|
||||
|
||||
if stripe_response["success"]:
|
||||
# Guardar en sesión los datos para el callback tras el pago
|
||||
@@ -1645,12 +1774,12 @@ def transfer_character_view(request):
|
||||
|
||||
# Obtener el ID de usuario desde acore_auth.account
|
||||
with connections['acore_auth'].cursor() as cursor:
|
||||
cursor.execute("SELECT id FROM account WHERE username = %s", [username])
|
||||
cursor.execute("SELECT id, email, last_ip FROM account WHERE username = %s", [username])
|
||||
user_data = cursor.fetchone()
|
||||
if not user_data:
|
||||
return JsonResponse({'success': False, 'message': '<span class="red-form-response">Cuenta no encontrada. Por favor, inicie sesión nuevamente.</span>'})
|
||||
|
||||
user_id = user_data[0] # ID de la cuenta
|
||||
user_id, email, acore_ip = user_data # ID de la cuenta, email y la última IP
|
||||
|
||||
# Obtener personajes de la cuenta de origen
|
||||
with connections['acore_characters'].cursor() as cursor:
|
||||
@@ -1722,7 +1851,19 @@ def transfer_character_view(request):
|
||||
# Crear sesión de pago con Stripe
|
||||
success_url = request.build_absolute_uri(reverse('transfer-success'))
|
||||
cancel_url = request.build_absolute_uri(reverse('transfer-cancel'))
|
||||
stripe_response = create_checkout_session(price, success_url=success_url, cancel_url=cancel_url, product_name=f"Trasnferir el personaje: {character_name} a la cuenta de destino: {destination_account}")
|
||||
|
||||
# Llamada corregida a create_checkout_session con todos los parámetros requeridos
|
||||
stripe_response = create_checkout_session(
|
||||
username=username,
|
||||
email=email,
|
||||
acore_ip=acore_ip,
|
||||
account_id=user_id, # Pasar el account_id
|
||||
amount=price, # El precio de la transferencia
|
||||
character_name=character_name,
|
||||
success_url=success_url,
|
||||
cancel_url=cancel_url,
|
||||
product_name=f"Transferir el personaje: {character_name} a la cuenta de destino: {destination_account}"
|
||||
)
|
||||
|
||||
if stripe_response["success"]:
|
||||
# Guardar los datos de la transferencia en la sesión para usarlos después del pago
|
||||
@@ -1805,7 +1946,7 @@ def store_novawow_view(request):
|
||||
# Obtener carrito desde la sesión
|
||||
carrito = request.session.get('carrito', [])
|
||||
|
||||
# ✅ Calcular el precio total con 2 decimales
|
||||
# Calcular el precio total con 2 decimales
|
||||
total_price = sum(Decimal(item['precio']) for item in carrito)
|
||||
total_price_with_iva = (total_price * Decimal('1.21')).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
|
||||
|
||||
@@ -1818,11 +1959,11 @@ def store_novawow_view(request):
|
||||
if not character_name:
|
||||
return JsonResponse({'success': False, 'message': 'Por favor, selecciona un personaje.'})
|
||||
|
||||
# ✅ ACTUALIZAR EL CARRITO Y FORZAR LA SESIÓN
|
||||
# ACTUALIZAR EL CARRITO Y FORZAR LA SESIÓN
|
||||
request.session['carrito'] = carrito
|
||||
request.session.modified = True # Forzar que Django guarde la sesión inmediatamente
|
||||
|
||||
# ✅ RECALCULAR EL PRECIO CON EL CARRITO ACTUALIZADO
|
||||
# RECALCULAR EL PRECIO CON EL CARRITO ACTUALIZADO
|
||||
total_price = sum(Decimal(item['precio']) for item in carrito)
|
||||
total_price_with_iva = (total_price * Decimal('1.21')).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
|
||||
|
||||
@@ -1830,15 +1971,36 @@ def store_novawow_view(request):
|
||||
if character_name not in characters:
|
||||
return JsonResponse({'success': False, 'message': 'No tienes permiso para renombrar este personaje.'})
|
||||
|
||||
# ✅ Definir siempre `product_description` antes de usarlo
|
||||
# Definir siempre `product_description` antes de usarlo
|
||||
product_description = ", ".join([f"{item.get('nombre', 'Ítem desconocido')} x{item.get('cantidad', 1)}" for item in carrito])
|
||||
|
||||
# Obtener detalles del usuario
|
||||
with connections['acore_auth'].cursor() as cursor:
|
||||
cursor.execute("SELECT id, email, last_ip FROM account WHERE username = %s", [username])
|
||||
user_data = cursor.fetchone()
|
||||
|
||||
if not user_data:
|
||||
return JsonResponse({'success': False, 'message': 'Cuenta no encontrada.'})
|
||||
|
||||
user_id, email, acore_ip = user_data # ID de la cuenta, email y la última IP
|
||||
|
||||
# Crear sesión de pago con Stripe
|
||||
success_url = request.build_absolute_uri(reverse('store-novawow/success'))
|
||||
cancel_url = request.build_absolute_uri(reverse('store-novawow/cancel'))
|
||||
stripe_response = create_checkout_session(total_price_with_iva, success_url=success_url, cancel_url=cancel_url, product_name=f"Compra de items del personaje: {character_name} : {product_description}")
|
||||
|
||||
# Llamada corregida a create_checkout_session con todos los parámetros requeridos
|
||||
stripe_response = create_checkout_session(
|
||||
username=username,
|
||||
email=email,
|
||||
acore_ip=acore_ip,
|
||||
account_id=user_id, # Pasar el account_id
|
||||
amount=total_price_with_iva, # El precio con IVA
|
||||
character_name=character_name,
|
||||
success_url=success_url,
|
||||
cancel_url=cancel_url,
|
||||
product_name=f"Compra de ítems para el personaje: {character_name} : {product_description}"
|
||||
)
|
||||
|
||||
if stripe_response["success"]:
|
||||
request.session['store_novawow'] = character_name
|
||||
return JsonResponse({
|
||||
@@ -1854,8 +2016,9 @@ def store_novawow_view(request):
|
||||
'store_data': store_data,
|
||||
'categories': categories,
|
||||
'total_price': total_price_with_iva
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
|
||||
from collections import Counter
|
||||
|
||||
def store_novawow_success_view(request):
|
||||
|
||||
Reference in New Issue
Block a user