Интеграция метода оплаты, включенного в перенаправление, в django-oscar

Я разрабатываю сайт для покупок с использованием django-oscar framework, на самом деле я использую их сайт sandbox. Я хочу добавить платеж в процесс оформления заказа, но дело в том, что я полностью смущен!

Я прочитал эту ссылку: «Документы по интеграции платежей Оскара»

и я получил большой материал. Я также прочитал файл views.py в приложении checkout, но у меня есть несколько вопросов, которые я не мог найти в Интернете.

Мой вопрос в том, какие методы / классы я должен переопределить или создать для обработки следующего процесса:

после того как пользователь запросит платеж, я должен отправить запрос в банк и предоставить им необходимые параметры (pay_request_parameters в коде)

то они отправят идентификатор, подтверждающий мой доступ, а затем я должен отправить этот идентификатор на адрес и перенаправить пользователя на веб-страницу банка.

После того, как пользователь заплатил банк успешно, они сообщают мне сообщение на адрес обратной связи, предоставленный мной на первом этапе.

с этой информацией, я должен проверить успешность платежа, и если он был успешным, я должен попросить у банка урегулирования, чтобы отправить мне деньги.

Теперь код, который у меня есть, выполняет первые два шага, но я не знаю, как обрабатывать этот процесс после перенаправления в песочнице. вот мой код:

from oscar.apps.checkout import views from oscar.apps.payment import models from oscar.apps.payment.exceptions import * import requests import datetime mellat_services_url = 'https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl' start_pay_url = 'https://bpm.shaparak.ir/pgwchannel/startpay.mellat' terminal_id = 'xxx' username = 'xxx' password = 'xxx' # Subclass the core Oscar view so we can customise class PaymentDetailsView(views.PaymentDetailsView): def handle_payment(self, order_number, total, **kwargs): # Talk to payment gateway. If unsuccessful/error, raise a # PaymentError exception which we allow to percolate up to be caught # and handled by the core PaymentDetailsView. # mellat cycle start local_date = str(datetime.date.today())[0:4] + str(datetime.date.today())[5:7] + str(datetime.date.today())[8:10] local_time = str(datetime.datetime.now().time())[0:2] + str(datetime.datetime.now().time())[3:5] + str(datetime.datetime.now().time())[6:8] # call bpPayRequest and get refId pay_request_parameters = {'terminalId': terminal_id, 'userName': username, 'userPassword': password, 'orderId': order_number, 'amount': total.incl_tax, 'localDate': local_date, 'localTime': local_time, 'additionalData': "" 'callBackUrl': 'mysite.com/checkout/preview/'} pay_request_answer = requests.post(mellat_services_url, pay_request_parameters) if not pay_request_answer.split(",")[0] == 0: response_code = pay_request_answer.split(",")[0] if response_code[0] == '1': raise UnableToTakePayment() else: raise PaymentError() requests.post(start_pay_url, pay_request_answer.split(",")[1]) raise RedirectRequired(start_pay_url) # post the refId to bank and then redirect customer to the bank # apparently wait for the bank ( like for 10 mins ) to get the payment status # if the bank responded with success, the you verify the payment with a post to the bank # if everything was verified, tell the bank for a settlement # mellat cycle end #The rest should be implemented but I dont know where I should put this #All I know is that it should be done after the verification with the data #sent from the bank. reference = gateway.pre_auth(order_number, total.incl_tax, kwargs['bankcard']) # Payment successful! Record payment source source_type, __ = models.SourceType.objects.get_or_create( name="SomeGateway") source = models.Source( source_type=source_type, amount_allocated=total.incl_tax, reference=reference) self.add_payment_source(source) # Record payment event self.add_payment_event('pre-auth', total.incl_tax) 

заранее спасибо.

One Solution collect form web for “Интеграция метода оплаты, включенного в перенаправление, в django-oscar”

У меня была аналогичная проблема, я сделал, что callBackUrl из банка перенаправил на представление, которое реализовано примерно так:

 class CustomCheckoutDone(OrderPlacementMixin, RedirectView): """ here we verify payment was done and place the actual order then redirect to thank you page """ permanent = False def get_redirect_url(self, pk): basket = Basket.objects.get(pk=self.checkout_session.get_submitted_basket_id()) basket.strategy = CustomStrategy() order_number = self.checkout_session.get_order_number() shipping_address = self.get_shipping_address(basket) shipping_method = self.get_shipping_method(basket, shipping_address) shipping_charge = shipping_method.calculate(basket) billing_address = self.get_billing_address(shipping_address) order_total = self.get_order_totals(basket, shipping_charge=shipping_charge) order_kwargs = {} # make sure payment was actually paid CustomPayment.objects.get(order_number=order_number, payed_sum=str(float(order_total.incl_tax))) user = self.request.user if not user.is_authenticated(): order_kwargs['guest_email'] = self.checkout_session.get_guest_email() self.handle_order_placement( order_number, user, basket, shipping_address, shipping_method, shipping_charge, billing_address, order_total, **order_kwargs ) return '/checkout/thank-you/' 
Python - лучший язык программирования в мире.