diff --git a/apps/pg/migrations/0006_sep.py b/apps/pg/migrations/0008_sep.py similarity index 97% rename from apps/pg/migrations/0006_sep.py rename to apps/pg/migrations/0008_sep.py index f40e17d..66e30f9 100644 --- a/apps/pg/migrations/0006_sep.py +++ b/apps/pg/migrations/0008_sep.py @@ -7,7 +7,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('pg', '0005_fake'), + ('pg', '0007_paymentrequest_commission'), ] operations = [ diff --git a/apps/pg/migrations/0009_remove_sep_sep_order_id_remove_sep_sep_originator_and_more.py b/apps/pg/migrations/0009_remove_sep_sep_order_id_remove_sep_sep_originator_and_more.py new file mode 100644 index 0000000..e59b4ff --- /dev/null +++ b/apps/pg/migrations/0009_remove_sep_sep_order_id_remove_sep_sep_originator_and_more.py @@ -0,0 +1,31 @@ +# Generated by Django 5.1.4 on 2026-03-09 16:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pg', '0008_sep'), + ] + + operations = [ + migrations.RemoveField( + model_name='sep', + name='sep_order_id', + ), + migrations.RemoveField( + model_name='sep', + name='sep_originator', + ), + migrations.AddField( + model_name='sep', + name='sep_ref_number', + field=models.CharField(blank=True, db_index=True, max_length=255, null=True), + ), + migrations.AlterField( + model_name='paymentrequest', + name='gateway', + field=models.CharField(choices=[('fake', 'fake'), ('pna', 'pna'), ('sep', 'sep')], max_length=255), + ), + ] diff --git a/apps/pg/models.py b/apps/pg/models.py index 1adc4bb..f1c7349 100644 --- a/apps/pg/models.py +++ b/apps/pg/models.py @@ -332,7 +332,7 @@ class SEP(BasePGModel): def make_request(self): self.payment_request.change_state(StateChoices.CREATED, StateChoices.IPG_PENDING, 'can not change state') - amount = self.payment_request.amount + amount = self.payment_request.amount + self.payment_request.commission description = 'from addwin ipg' callback_url = urllib.parse.urljoin( settings.IPG_BASE_PUBLIC_URL, @@ -342,6 +342,8 @@ class SEP(BasePGModel): try: response = self.client.request_token(amount, callback_url, order_id, phone_number) + self.details['get_token_response'] = response + self.sep_status_code = response['status'] self.sep_status_message = response.get('title') @@ -349,7 +351,6 @@ class SEP(BasePGModel): self.sep_token = response['token'] else: - self.details['get_token_response'] = response self.payment_request.change_state(self.payment_request.state, StateChoices.FAILED, 'error in sep gateway') except Exception as e: @@ -364,7 +365,7 @@ class SEP(BasePGModel): def confirm_request(self, request=None): if self.payment_request.state not in [StateChoices.IPG_PENDING]: messages.error(request, "وضعیت تراکنش در حالت مناسبی نیست.") - return + return False, "وضعیت تراکنش در حالت مناسبی نیست." print(dict(request.POST)) post_dict = dict(request.POST) @@ -372,7 +373,7 @@ class SEP(BasePGModel): # post = {'MID': ['0'], 'TerminalId': ['15336754'], 'RefNum': ['wSLVxHt51y3BjY9tkFXieaQAxHg6cmGp2X7B506RZs'], 'ResNum': ['10'], 'State': ['OK'], 'TraceNo': ['393594'], 'Amount': ['20000'], 'AffectiveAmount': ['20000'], 'Wage': [''], 'Rrn': ['224413541909'], 'SecurePan': ['504172******9210'], 'Status': ['2'], 'Token': ['dd830117c88a4e8284230430ccf6c553'], 'HashedCardNumber': ['6008617e6bab76997499446356f5c8b60288445650dd551fdf32007bcf2b14af']} try: - ref_number = post_dict.get('ref_number')[0] + ref_number = post_dict.get('RefNum')[0] except Exception as e: print(e) ref_number = None @@ -398,15 +399,16 @@ class SEP(BasePGModel): self.payment_request.charge_wallet_balance() messages.success(request, 'شارژ انجام شد') + return True, 'شارژ انجام شد' except Exception as e: print(e) messages.error(request, str(e)) + return False, "خطایی رخ داده است." else: print(request.POST) messages.error(request, "نتیجه تراکنش از سمت درگاه دریافت نشد.") - - + return False, "نتیجه تراکنش از سمت درگاه دریافت نشد." def reverse_request(self): raise NotImplementedError() diff --git a/apps/pg/views.py b/apps/pg/views.py index 79b1d47..96ffefa 100644 --- a/apps/pg/views.py +++ b/apps/pg/views.py @@ -75,33 +75,26 @@ class PaymentRequestView(UpdateView): slug_url_kwarg = 'uuid' # TODO: remove it in future - def get(self, request, *args, **kwargs): - charge_request: PaymentRequest = self.get_object() - charge_request.set_gateway({'pna': True}) - 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) - - # TODO: remove it in future - def post(self, request, *args, **kwargs): - charge_request: PaymentRequest = self.get_object() - 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) + # def get(self, request, *args, **kwargs): + # charge_request: PaymentRequest = self.get_object() + # 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) + # + # # TODO: remove it in future + # def post(self, request, *args, **kwargs): + # charge_request: PaymentRequest = self.get_object() + # tool = charge_request.get_gateway_tools() + # 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) def get_queryset(self): # return ChargeRequest.objects.all() @@ -113,6 +106,7 @@ class PaymentRequestView(UpdateView): charge_request: PaymentRequest = self.get_object() charge_request.set_gateway(form.data) + charge_request.save_commission() tool:BasePGModel = charge_request.get_gateway_tools() diff --git a/utils/sep.py b/utils/sep.py index e101e81..476002e 100644 --- a/utils/sep.py +++ b/utils/sep.py @@ -26,7 +26,7 @@ class SEPClient: # success_token = {'status': 1, 'token': '38faf9c852664f3ea1ecf764f853a284'} # failed_token = {'status': -1, 'errorCode': '5', 'errorDesc': 'پارامترهای ارسال شده نامعتبر است.; شماره ترمینال باید بزرگتر یا برابر با 1 باشد'} - response = requests.post(self.token_request_url, json=data) + response = requests.post(self.request_token_url, json=data) print(response.json()) tmp = {}