chore: docs and added new field for tpv domain
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
# Generated by Django 5.1.4 on 2025-01-13 08:05
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("shop", "0003_order_shipping_method_alter_payment_order"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="shopsettings",
|
||||
name="tpv_domain",
|
||||
field=models.URLField(
|
||||
blank=True, max_length=128, null=True, verbose_name="dominio del tpv"
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -631,6 +631,9 @@ class ShopSettings(SingletonModel):
|
||||
) # 978 == EURO
|
||||
terminal = models.CharField(max_length=8, verbose_name=_("Terminal"))
|
||||
shared_secret = models.CharField(max_length=100, verbose_name=_("Clave de Redsys"))
|
||||
tpv_domain = models.URLField(
|
||||
max_length=128, blank=True, null=True, verbose_name=_("dominio del tpv")
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("ajustes de la tienda")
|
||||
|
||||
+11
-8
@@ -7,7 +7,7 @@ from django.conf import settings
|
||||
from django.urls import reverse
|
||||
|
||||
from shop.exceptions import RedsysPaymentException
|
||||
from shop.models import Order
|
||||
from shop.models import Order, ShopSettings
|
||||
from shop.settings import TransactionTypes
|
||||
from shop.utils import compute_signature, decode_b64_dict
|
||||
|
||||
@@ -21,6 +21,9 @@ class RedsysClient:
|
||||
)
|
||||
REST_PROD_ENVIRONMENT_URL = "https://sis.redsys.es/sis/rest/trataPeticionREST"
|
||||
|
||||
def __init__(self):
|
||||
self.settings = ShopSettings.load()
|
||||
|
||||
def get_target_url(self):
|
||||
if settings.DEBUG:
|
||||
return self.DEBUG_ENVIRONMENT_URL
|
||||
@@ -32,31 +35,31 @@ class RedsysClient:
|
||||
return self.REST_PROD_ENVIRONMENT_URL
|
||||
|
||||
def get_merchant_code(self) -> str:
|
||||
return settings.REDSYS_MERCHANT_CODE
|
||||
return self.settings.merchant_code
|
||||
|
||||
def get_terminal(self) -> str:
|
||||
return settings.REDSYS_TERMINAL
|
||||
return self.settings.terminal
|
||||
|
||||
def get_currency_code(self) -> str:
|
||||
return settings.REDSYS_CURRENCY_CODE
|
||||
return self.settings.currency_code
|
||||
|
||||
def get_merchant_url_ok_for_order(self, order: Order) -> str:
|
||||
path = reverse("web:order", kwargs={"uuid": order.uuid})
|
||||
return f"{settings.REDSYS_TPV_DOMAIN}{path}"
|
||||
return f"{self.settings.tpv_domain}{path}"
|
||||
|
||||
def to_integer(self, value: Decimal):
|
||||
return int(value * 100)
|
||||
|
||||
def get_merchant_url_ko_for_order(self, order: Order) -> str:
|
||||
path = reverse("web:order", kwargs={"uuid": order.uuid})
|
||||
return f"{settings.REDSYS_TPV_DOMAIN}{path}"
|
||||
return f"{self.settings.tpv_domain}{path}"
|
||||
|
||||
def get_webhook_url_for_order(self, order: Order) -> str:
|
||||
path = reverse("shop:webhook", kwargs={"uuid": order.uuid})
|
||||
return f"{settings.REDSYS_TPV_DOMAIN}{path}"
|
||||
return f"{self.settings.tpv_domain}{path}"
|
||||
|
||||
def get_shared_secret(self) -> str:
|
||||
return settings.REDSYS_SHARED_SECRET
|
||||
return self.settings.shared_secret
|
||||
|
||||
def get_signature(self, hash, payload: str):
|
||||
key = self.get_shared_secret()
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
from django.core.signals import Signal
|
||||
|
||||
|
||||
clear_cart = Signal()
|
||||
send_order_email = Signal()
|
||||
|
||||
@@ -2,14 +2,13 @@ import base64
|
||||
import json
|
||||
from decimal import Decimal
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
from shop.models import CustomerAddress, Order, Tax
|
||||
from shop.models import CustomerAddress, Order, ShopSettings, Tax
|
||||
from shop.redsys import RedsysClient
|
||||
from shop.tests.mixins import CreateProductsMixin
|
||||
from shop.utils import create_order, create_order_line_for_product, validate_expiry_date
|
||||
@@ -26,7 +25,7 @@ class TestRedsysTPV(APITestCase, CreateProductsMixin):
|
||||
self.customer = get_user_model().objects.create_user(
|
||||
username="11111111H",
|
||||
first_name="Darth",
|
||||
last_name="Maull",
|
||||
last_name="Maul",
|
||||
email="darth@maul.com",
|
||||
password="dathomir",
|
||||
)
|
||||
@@ -53,6 +52,9 @@ class TestRedsysTPV(APITestCase, CreateProductsMixin):
|
||||
self.product = self.create_product()
|
||||
self.order = self.create_order()
|
||||
self.order.calculate_total_from_lines()
|
||||
self.settings = ShopSettings.load()
|
||||
self.settings.shared_secret = "sq7HjrUOBfKmC576ILgskD5srU870gJ7" # Debug secret
|
||||
self.settings.save()
|
||||
|
||||
def create_order(self):
|
||||
order = create_order(
|
||||
@@ -83,12 +85,10 @@ class TestRedsysTPV(APITestCase, CreateProductsMixin):
|
||||
assert merchant_parameters.get("DS_MERCHANT_AMOUNT") == str(
|
||||
int(amount_to_pay * 100)
|
||||
)
|
||||
assert (
|
||||
merchant_parameters.get("DS_MERCHANT_TERMINAL") == settings.REDSYS_TERMINAL
|
||||
)
|
||||
assert merchant_parameters.get("DS_MERCHANT_TERMINAL") == self.settings.terminal
|
||||
assert (
|
||||
merchant_parameters.get("DS_MERCHANT_MERCHANTCODE")
|
||||
== settings.REDSYS_MERCHANT_CODE
|
||||
== self.settings.merchant_code
|
||||
)
|
||||
|
||||
client.get_body_for_order(self.order)
|
||||
@@ -124,7 +124,7 @@ class TestRedsysTPV(APITestCase, CreateProductsMixin):
|
||||
reverse("shop:webhook", kwargs={"uuid": self.order.uuid}),
|
||||
data={
|
||||
"Ds_MerchantParameters": b64_merchant_params,
|
||||
"Ds_Signature": settings.REDSYS_SHARED_SECRET,
|
||||
"Ds_Signature": self.settings.shared_secret,
|
||||
"Ds_SignatureVersion": "HMAC_SHA256_V1",
|
||||
},
|
||||
)
|
||||
@@ -164,7 +164,7 @@ class TestRedsysTPV(APITestCase, CreateProductsMixin):
|
||||
reverse("shop:webhook", kwargs={"uuid": self.order.uuid}),
|
||||
data={
|
||||
"Ds_MerchantParameters": b64_merchant_params,
|
||||
"Ds_Signature": settings.REDSYS_SHARED_SECRET,
|
||||
"Ds_Signature": self.settings.shared_secret,
|
||||
"Ds_SignatureVersion": "HMAC_SHA256_V1",
|
||||
},
|
||||
)
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ from django.shortcuts import get_object_or_404
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
|
||||
from shop.models import Order
|
||||
from shop.utils import validate_payment_for_order, pay_order
|
||||
from shop.utils import pay_order, validate_payment_for_order
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
|
||||
Reference in New Issue
Block a user