handle posting form and receiving callbacks
This commit is contained in:
parent
9f7c119560
commit
0f8313f633
|
@ -0,0 +1,15 @@
|
|||
<html>
|
||||
<head>
|
||||
</head>
|
||||
<body onload="document.forms[0].submit()">
|
||||
<p>
|
||||
Redirection de paiement en cours...
|
||||
</p>
|
||||
<form action="{{ form.url }}" method="{{ form.method }}" style="display: none">
|
||||
{% for field in form.fields %}
|
||||
<input type="{{ field.type }}" name="{{ field.name }}" value="{{ field.value }}"/>
|
||||
{% endfor %}
|
||||
<input type="submit">
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
|
@ -16,11 +16,12 @@
|
|||
|
||||
from django.conf.urls import patterns, include, url
|
||||
|
||||
from .views import RegiesApiView, AddBasketItemApiView, PayView
|
||||
from .views import RegiesApiView, AddBasketItemApiView, PayView, CallbackView
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url('^api/lingo/regies$', RegiesApiView.as_view(), name='api-regies'),
|
||||
url('^api/lingo/add-basket-item$', AddBasketItemApiView.as_view(),
|
||||
name='api-add-basket-item'),
|
||||
url('^lingo/pay$', PayView.as_view(), name='lingo-pay'),
|
||||
url('^lingo/callback/(?P<regie_pk>\w+)/$', CallbackView.as_view(), name='lingo-callback'),
|
||||
)
|
||||
|
|
|
@ -14,11 +14,14 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import datetime
|
||||
from decimal import Decimal
|
||||
import json
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.template.response import TemplateResponse
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.views.generic import View, ListView
|
||||
|
||||
|
@ -96,8 +99,14 @@ class PayView(View):
|
|||
regie = items[0].regie
|
||||
|
||||
payment = eopayment.Payment(regie.service, regie.service_options)
|
||||
return_url = request.build_absolute_uri(
|
||||
reverse('lingo-callback', kwargs={'regie_pk': regie.id}))
|
||||
(order_id, kind, data) = payment.request(total_amount,
|
||||
next_url=request.build_absolute_uri('/'))
|
||||
next_url=request.build_absolute_uri('/'),
|
||||
accepturl=return_url,
|
||||
declineurl=return_url,
|
||||
exceptionurl=return_url,
|
||||
cancelurl=return_url)
|
||||
transaction.order_id = order_id
|
||||
transaction.save()
|
||||
|
||||
|
@ -105,5 +114,24 @@ class PayView(View):
|
|||
|
||||
if kind == eopayment.URL:
|
||||
return HttpResponseRedirect(data)
|
||||
elif kind == eopayment.FORM:
|
||||
return TemplateResponse(request, 'lingo/payment_form.html', {'form': data})
|
||||
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
class CallbackView(View):
|
||||
def get(self, request, *args, **kwargs):
|
||||
regie = Regie.objects.get(id=kwargs.get('regie_pk'))
|
||||
payment = eopayment.Payment(regie.service, regie.service_options)
|
||||
payment_response = payment.response(request.environ['QUERY_STRING'])
|
||||
assert payment_response.signed is True
|
||||
assert payment_response.result == eopayment.PAID
|
||||
transaction = Transaction.objects.get(order_id=payment_response.order_id)
|
||||
transaction.bank_data = payment_response.bank_data
|
||||
transaction.end_date = datetime.datetime.now()
|
||||
transaction.save()
|
||||
for item in transaction.items.all():
|
||||
item.payment_date = transaction.end_date
|
||||
item.save()
|
||||
return HttpResponseRedirect('/')
|
||||
|
|
Reference in New Issue