chore: docs and added new field for tpv domain

This commit is contained in:
2025-01-13 18:08:57 +01:00
parent 475b53a7e3
commit 2ff2d08565
12 changed files with 101 additions and 43 deletions
@@ -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"
),
),
]
+3
View File
@@ -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
View File
@@ -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
View File
@@ -1,5 +1,4 @@
from django.core.signals import Signal
clear_cart = Signal()
send_order_email = Signal()
+9 -9
View File
@@ -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
View File
@@ -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