From 09799c028cfeb3d1bebbe7ab16cc3e7b41a3210c Mon Sep 17 00:00:00 2001 From: Haydar Ghasemi Date: Sun, 14 Dec 2025 14:05:48 +0330 Subject: [PATCH] feat(ipg): fix failed request and change html files fix failed request and change html files --- apps/pg/models.py | 18 +- apps/pg/views.py | 11 + static/image/pg/fail.png | Bin 0 -> 2690 bytes static/image/pg/tik.png | Bin 0 -> 2703 bytes templates/pg/payment-confirm.html | 33 ++ ...ment_confirm.html => payment_failure.html} | 345 +++++++++--------- templates/pg/payment_success.html | 30 +- 7 files changed, 231 insertions(+), 206 deletions(-) create mode 100644 static/image/pg/fail.png create mode 100644 static/image/pg/tik.png create mode 100644 templates/pg/payment-confirm.html rename templates/pg/{payment_confirm.html => payment_failure.html} (88%) diff --git a/apps/pg/models.py b/apps/pg/models.py index 792b4ae..4c196b7 100644 --- a/apps/pg/models.py +++ b/apps/pg/models.py @@ -159,14 +159,18 @@ class PaymentRequest(models.Model): logger.error(f"[Deposit Verify] Failed to get response from wallet service | payment_id={self.pk}") raise Exception('Failed to get response from wallet service') - if not verify_response.uuid or verify_response.state != 5: + if not verify_response.uuid: + logger.error(f"[Deposit Verify] Failed to get response uuid from wallet service | payment_id={self.pk}") + raise Exception('Failed to get response uuid from wallet service') + + if verify_response.state != 5: logger.error(f"[Deposit Verify] Wallet verification failed | payment_id={self.pk}, response={verify_response}") - to_pay_failed = PaymentRequest.objects.filter( - pk=self.pk, - state=StateChoices.WALLET_SUBMIT_SUCCESS.value - ).update( - state=StateChoices.FAILED.value, - ) + # to_pay_failed = PaymentRequest.objects.filter( + # pk=self.pk, + # state=StateChoices.WALLET_SUBMIT_SUCCESS.value + # ).update( + # state=StateChoices.FAILED.value, + # ) raise Exception('Failed to verify payment in wallet') to_pay_success = PaymentRequest.objects.filter( diff --git a/apps/pg/views.py b/apps/pg/views.py index 1451db6..c2c2a26 100644 --- a/apps/pg/views.py +++ b/apps/pg/views.py @@ -9,6 +9,7 @@ from rest_framework import generics from rest_framework.response import Response from rest_framework.views import APIView from drf_spectacular.utils import extend_schema +from django.shortcuts import render from utils.commons import calculate_pna_commission from .constans import StateChoices @@ -79,6 +80,11 @@ class PaymentRequestView(UpdateView): charge_request.save_commission() tool = charge_request.get_gateway_tools() tool.make_request() + charge_request.refresh_from_db() + if charge_request.state == StateChoices.FAILED: + return render(request, 'pg/payment_failure.html', { + 'object': charge_request + }) redirect_url = tool.get_pg_page_url() return HttpResponseRedirect(redirect_url) @@ -88,6 +94,11 @@ class PaymentRequestView(UpdateView): charge_request.set_gateway({'pna': True}) tool = charge_request.get_gateway_tools() tool.make_request() + charge_request.refresh_from_db() + if charge_request.state == StateChoices.FAILED: + return render(request, 'pg/payment_failure.html', { + 'object': charge_request + }) redirect_url = tool.get_pg_page_url() return HttpResponseRedirect(redirect_url) diff --git a/static/image/pg/fail.png b/static/image/pg/fail.png new file mode 100644 index 0000000000000000000000000000000000000000..ec72d92d49c53e72f8d9b5d05fcfd388546f06b4 GIT binary patch literal 2690 zcmV-|3Vrp7P)3e@6IEIQ)39$_(bP;1v)5qNk3|>%T6CHZ* z01x{VLcmyl`V-@Y4P@wM9zy_#V^F{Eht$Eri2eE7?>8eYpF7U`(9j_gcOeFxVwK@T44P8id zyPi$_VW)j9T&KsGDrd?^x}s@Xdp&w z8+-V%4GzMA)(0_xsQ$B{n$t)bT3Z#@MAw`SerO7TsRQ^cEVaMr7?nz}$<{yE(&l&~4ka4PaG)OH`#$FMXBhr#lB!3p=P54lF~^ zn7!?CDuI_+xnflTcbQZIs)a+m$0N%Sv^`(4#AiyZ$rwp>$?b&3YTUg%?ZPL3(dxz} zveaV-D7BsyRc1@9R4;)8c>rjv;8OtxI$$$ql+e$>En-uH)d2>W>N{$BL=_U|UX|v3 zT&$9q{KEon5gUQvT?teHcUiA;Abo4XbPgF(`vI{j^Brz~%u;PZ2~e={Zw!r1&`}d8 zAMjI#M0o=D4+fmS#calH2)P{gnLVGB?YCvT#J^ zLY24!Q7bQ8wL`}_y7uNtypdSBVk31>GEvPv`jp%WO0G4vsiD+)@}ySDFRr818)Aic z!tH<;?i%`&7gxo)Ilv^XqZCQ60m z6}SEW;yncv39%8?-#Mt5J&5N8jdP=z0_3`q8ZufGS{?J-5`&rQSX+XvO&%8Bz1=6kt;R#v`lzn!%Z4?LP1hz zSPr?GExaPJ7Ry#wHPtzys;Ls;0WNtpmKgJ1aeMtq{N+oi7+(3*fGNkau$@DL_*H7b z2LhC(fePUp`-jfwmVqrRh@1{dV#nM70lKn_E1FPg3b~jS>~q_sQbTFY($L)03Q#sn z)dX_w+_c7~jdQfN@dmOLv9-Cj2tua*(st9lnLJ*zU0h)1>q_;8J74$W^v`L4pa;w# zyx`C4X{MOLBTQYE**(nlZfRB>L>fw|gIJ0VyD?zu&xPEwK~JP5%LOe%HT!-; ztdfV^4qQ99^TjB}SFRwRdQC1<0r_43_g5&0WJ*52-hrG`sdDauCO(a|K1f?YZ+c6U zMRfL&)YU4I)P`LA!9HljOV*v)E#*4WLJ|z9pKJbJKA4VVei3Te<-kn6aYeFTi_x{? zI+iU7c}`z$#H|CYK00H?os{$C=_-7JpjLa}3~h^%o|sWlH|N)QKEy^SDAnkK%4B^i4#D%C%S5_b)1_^U z%SuhT4I5H9&33uG3zAEcnl6FG1G$i@wFf!KB{m6l`Ph2~CE<9KDEp5RG}kxH7h61l z>)b|e1edD{W^gQn5caS%u@4^+QV+*&h|>iyT${0-i8UACwk{Q+^fIA!z&QUA`s7Y? zZ1tAU5?EeMaml(=ddp#`iB_7d8j@-L7*SO~D#1%)XGkTN9v_!%{CJ9P+cyna=F}|A z9?1hILQAZGSBO}G(YZpsbXIUd2Ol{>e`*n}{z>>aHac7h@GLddZ-FDygHy#VrNJyoY8h_OqPcl-^EZ1u`?L=4B}0*Vv;DgRFgA| zQ55IYkWyF4olq;W^GHdiTK%KsjdXzwk%^YX0F(6R0MW^^W-Ts_*hS2}<*0|1338o~ wXfrdteT($@*HH-=E6`Wcv@u14rcD3*1Ld8qrBMirrvLx|07*qoM6N<$f?+r5(EtDd literal 0 HcmV?d00001 diff --git a/static/image/pg/tik.png b/static/image/pg/tik.png new file mode 100644 index 0000000000000000000000000000000000000000..c6beb97cd1500983316f3ae83447bbd9b611c162 GIT binary patch literal 2703 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 JPDHLkV1flT2Pyyn literal 0 HcmV?d00001 diff --git a/templates/pg/payment-confirm.html b/templates/pg/payment-confirm.html new file mode 100644 index 0000000..3e87bfc --- /dev/null +++ b/templates/pg/payment-confirm.html @@ -0,0 +1,33 @@ +{% extends "base.html" %} +{% load static %} +{% load crispy_forms_tags %} +{% load jalali_tags %} + +{% block title %}بازگشت{% endblock %} +{% block page_title %}بازگشت{% endblock %} + + +{% block content %} + مبلغ {{ object.amount }} ریال با وضعیت {{ object.get_state_display }}
+
+ {% csrf_token %} +
+
+ {#
#} + {#
#} + {{ form|crispy }} + {#
#} + {#
#} +
+
بازگشت به برنامه
+
+
+ +
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/templates/pg/payment_confirm.html b/templates/pg/payment_failure.html similarity index 88% rename from templates/pg/payment_confirm.html rename to templates/pg/payment_failure.html index 926cfab..1559144 100644 --- a/templates/pg/payment_confirm.html +++ b/templates/pg/payment_failure.html @@ -1,179 +1,168 @@ -{% load static %} -{% load crispy_forms_tags %} -{% load jalali_tags %} - - - - - - - - Payment Unsuccessful - - - - - - - - - -
-
- -
-
!
- {% if message %} -

{{ message }}

- {% else %} -

پرداخت شما ناموفق بود

- {% endif %} -
-
-

کد پیگیری تراکنش شما: {{ object.reference_number }}

-

در صورت کسر از موجودی، مبلغ پرداختی طی یک تا 72 ساعت آینده به حساب شما بازگردانده خواهد شد.

-
- وینسو -
- -
-
- {% csrf_token %} - {{ form|crispy }} - -
-
-
-
- - +{% load static %} +{% load crispy_forms_tags %} +{% load jalali_tags %} + + + + + + + + Payment Unsuccessful + + + + + + + + + +
+
+ +
+
fail
+ {% if message %} +

{{ message }}

+ {% else %} +

پرداخت ناموفق

+ {% endif %} +
+
+

کد پیگیری تراکنش شما: {{ object.reference_number }}

+

در صورت کسر از موجودی، مبلغ پرداختی طی یک تا 72 ساعت آینده به حساب شما بازگردانده خواهد شد.

+
+ winsoo +
+ +
+
+ {% csrf_token %} + {{ form|crispy }} + +
+
+
+
+ + \ No newline at end of file diff --git a/templates/pg/payment_success.html b/templates/pg/payment_success.html index fa011f1..fd9844e 100644 --- a/templates/pg/payment_success.html +++ b/templates/pg/payment_success.html @@ -24,18 +24,6 @@ min-height: 100vh; } - - .mobile-frame { - width: 100vh; - height: 100vh; - background-color: #ffffff; - box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); - padding: 30px; - box-sizing: border-box; - display: flex; - flex-direction: column; - } - .screen-content { flex-grow: 1; display: flex; @@ -125,7 +113,7 @@ width: 100%; padding: 15px; border: none; - border-radius: 20px; + border-radius: 8px; font-size: 1.1rem; font-weight: bold; font-family: 'Vazirmatn', sans-serif; @@ -134,12 +122,12 @@ } .btn-primary { - background-color: #6931c9; + background-color: #3B604B; color: #ffffff; } .btn-primary:hover { - background-color: #7745ce; + background-color: #3B604B; } @@ -149,24 +137,24 @@
-
✓
+
success

پرداخت موفق

-

پرداخت با موفقیت انجام شد.


- مقدار پرداخت شده: - {{ object.amount }} ریال + مبلغ شارژ + {{ object.amount }} تومان
- وینسو + winsoo
{% csrf_token %} {{ form|crispy }} - +
+