def confirm(request): # The view for payment confirmation page_title = "Confirmation" if request.method == 'POST': payment_form = PaymentForm(request.POST) if payment_form.is_valid(): params_dict = get_posted_parameters(payment_form) signature = sign(params_dict) params_dict['signature'] = signature confirmation_form = ConfirmationForm(params_dict) return render_to_response('confirm.html', { 'page_title': page_title, 'confirmation_form': confirmation_form, 'params_dict': params_dict, 'signature': signature }, context_instance=RequestContext(request)) else: from configuration import * page_title = "Payment" return render_to_response('pay.html', { 'page_title': page_title, 'payment_form': payment_form }, context_instance=RequestContext(request)) else: return pay(request)
def dpn_asks_for_money(request): if request.method == 'GET': alipay_form = PaymentForm(auto_id=False) context = { "alipay_form": alipay_form, } return render(request, "pay/payment.html", context) # POST method site = Site.objects.get_current() pay_url = 'http://%s/' % (site.domain) form = PaymentForm(request.POST, auto_id=False) if not form.is_valid(): context = { "alipay_form": form, } return render(request, "pay/payment.html", context) # alipay form item_name = ("Django Alipay example") alipay_dict = { # base "_input_charset": 'utf-8', 'notify_url': '%salipay/dpn/' % pay_url, 'return_url': '%salipay/dpn/return/' % pay_url, # business #'seller_email': '', 'out_trade_no': uuid.uuid4().hex, 'subject': item_name, 'price': form.cleaned_data['price'], 'quantity': form.cleaned_data['quantity'], # direct pay #'extra_common_param': '%s|%d'% (form.cleaned_data['price'], form.cleaned_data['quantity']), # partner trade 'body': '%s|%d' % (form.cleaned_data['price'], form.cleaned_data['quantity']), } alipay_form = AliPayDirectPayForm(auto_id=False, initial=alipay_dict) context = { 'payment_title': ('AliPay Payment'), 'item_name': item_name, 'form': form, 'action': alipay_form.get_action(), 'paid_form': alipay_form, } data = get_form_data(alipay_form) alipay_form['sign'].field.initial = make_sign(data) return render(request, "pay/preview.html", context)
def confirm(request): # The view for payment confirmation page_title = "Confirmation" if request.method == 'POST': payment_form = PaymentForm(request.POST) if payment_form.is_valid(): params_dict = get_posted_parameters(payment_form) signature = sign(params_dict) params_dict['signature'] = signature confirmation_form = ConfirmationForm(params_dict) return render_to_response('confirm.html', {'page_title': page_title, 'confirmation_form': confirmation_form, 'params_dict': params_dict, 'signature': signature}, context_instance=RequestContext(request)) else: from configuration import * page_title = "Payment" return render_to_response('pay.html', {'page_title': page_title, 'payment_form': payment_form}, context_instance=RequestContext(request)) else: return pay(request)
def asks_for_money(request): if request.method == 'GET': alipay_form = PaymentForm(auto_id=False) context = { "alipay_form": alipay_form, } return render_to_response("pay/payment.html", context, context_instance=RequestContext(request)) # POST method site = Site.objects.get_current() pay_url = 'http://%s/'%(site.domain) form = PaymentForm(request.POST, auto_id=False) if not form.is_valid(): context = { "alipay_form": form, } return render_to_response("pay/payment.html", context, context_instance=RequestContext(request)) # alipay form item_name = ("Django Alipay example") alipay_dict = { # base "_input_charset": 'utf-8', 'notify_url': '%salipay/ptn/'% pay_url, 'return_url': '%salipay/return/'% pay_url, # business #'seller_email': '', 'out_trade_no': uuid.uuid4().hex, 'subject': item_name, 'price': form.cleaned_data['price'], 'quantity': form.cleaned_data['quantity'], # direct pay #'extra_common_param': '%s|%d'% (form.cleaned_data['price'], form.cleaned_data['quantity']), # partner trade 'body': '%s|%d'% (form.cleaned_data['price'], form.cleaned_data['quantity']), } alipay_form = AliPayPartnerTradeForm(auto_id=False, initial=alipay_dict) context = { 'payment_title': ('AliPay Payment'), 'item_name': item_name, 'form': form, 'action': alipay_form.get_action(), 'paid_form': alipay_form, } data = get_form_data(alipay_form) alipay_form['sign'].field.initial = make_sign(data) return render_to_response("pay/preview.html", context, context_instance=RequestContext(request))
def test_payments_form_with_missing_last_name(self): form = PaymentForm({ 'first_name': 'eric', 'address_line_1': '28201 E. Bonanza St.', 'address_line_2': 'South Park', 'address_line_3': '', 'address_line_4': '', 'post_code': 'er1 1ic', 'email_address': '*****@*****.**', 'credit_card_number': '4242424242424242', 'cvv': '123', 'expiry_month': 'Jan', 'expiry_year': '2037', 'stripe_id': 'test_stripe_id' }) self.assertFalse(form.is_valid()) self.assertRaisesMessage(forms.ValidationError, "Please fill in this field", form.full_clean())
def pay(request): """ A view that handles a payment request. It checks the HTTP method and the payment checksum and in successful cases renders the payment "confirmation" page. """ if request.method != 'POST': # only HTTP POSTs are allowed return HttpResponse("%s Not Allowed"%request.method, status=405) try: checksum_ok = check_md5(request.POST) except: # the md5 function can fail with non-ascii data checksum_ok = False if not checksum_ok: return HttpResponse("The checksum does not match the data", status=400) payment_form = PaymentForm(request.POST) if payment_form.is_valid(): payment = payment_form.save() dev = True if 'dev' in request.POST else False return render_to_response('payment/pay.html', {'payment': payment, 'dev': dev}, context_instance=RequestContext(request)) else: return HttpResponse("Invalid or missing data POSTed", status=400)
def checkout(request, pk): template = 'pos/checkout.html' form = PaymentForm() table = pk try: order = Order.objects.filter(table=table).latest('created') except Order.DoesNotExist: order = None if order == None or order.paid == True: messages.success(request, "No open orders on this table") return redirect("/cash") elif order.paid == False: orders = OrderItem.objects.filter(order=order) total = 0 for item in orders: total += item.total_price pay_form = PaymentForm(request.POST or None) if request.method == 'POST': if pay_form.is_valid(): if request.POST.get('type') == 'VISA': addon = (total * 5) / 100 total = total + addon order.paid = True order.save() messages.success(request, total) return redirect("/cash") back = int(request.POST.get('cash')) - total log = "Return" + " " + str(back) order.paid = True order.save() messages.success(request, log) return redirect("/cash") context = {'total': total, 'table': table, 'orders': orders, 'order': order, 'form': form} return render(request, template, context)
def pay(request): """ A view that handles a payment request. It checks the HTTP method and the payment checksum and in successful cases renders the payment "confirmation" page. """ if request.method != 'POST': # only HTTP POSTs are allowed return HttpResponse("%s Not Allowed" % request.method, status=405) try: checksum_ok = check_md5(request.POST) except: # the md5 function can fail with non-ascii data checksum_ok = False if not checksum_ok: return HttpResponse("The checksum does not match the data", status=400) payment_form = PaymentForm(request.POST) if payment_form.is_valid(): payment = payment_form.save() dev = True if 'dev' in request.POST else False return render_to_response('payment/pay.html', { 'payment': payment, 'dev': dev }, context_instance=RequestContext(request)) else: return HttpResponse("Invalid or missing data POSTed", status=400)
def payment(request,reservation_id): reservation= get_object_or_404(Reservation, pk=reservation_id) user= request.user if user != reservation.user or reservation.is_cancelled(): return HttpResponseForbidden() if reservation.is_paid(): redirect_url = reverse('reservation_info',kwargs={'reservation_id':reservation.pk}) return HttpResponseRedirect(redirect_url) stripe_key="pk_test_LTzee3NEdHl6M7MCaCJWWoch" invoiceId= b64encode('invoice='+unicode(reservation.user)+","+unicode(reservation.pk)) customId= b64encode('reservation='+unicode(reservation.user)+","+unicode(reservation.pk)) print "InvoiceId=" + invoiceId print "CustomId=" + customId paypal_dict = { "business": settings.PAYPAL_RECEIVER_EMAIL, "amount": reservation.value, "item_name": unicode(reservation), "invoice": invoiceId, "notify_url": settings.SITE_URL + reverse('paypal-ipn'), "return_url": settings.SITE_URL + reverse('paypal_return', kwargs={'reservation_id':reservation_id}), "cancel_return": settings.SITE_URL + reverse('reservation_payment', kwargs={'reservation_id':reservation_id}),#paypal_cancel_return'), "custom": customId, # Custom command to correlate to some function later (optional) "rm":2, } # Create the instance. paypal_form = PayPalPaymentsForm(initial=paypal_dict) data={ 'reservation':reservation, 'amount':int(reservation.value*100), 'error_exist': False, 'error_msg': '', 'stripe_key': stripe_key, 'paypal_form':paypal_form, } if request.method == 'POST': #Stripe processing only print "Method is POST" form = PaymentForm(request.POST) if form.is_valid(): print "Form is valid" token = form.cleaned_data['stripeToken'] stripe.api_key = "sk_test_HthF4Hs8I4oGjA39RFdTDwko" try: charge = stripe.Charge.create( amount=int(reservation.value*100), currency="usd", source=token, description=unicode(reservation) ) card_error=False except stripe.error.CardError,e: card_error=True card_error_msg=unicode(e) print "Error: exception " + unicode(e) if card_error is False: print "No Error" reservation.pay(confirmation=json.dumps(charge),choice='S') redirect_url = reverse('payment_success',kwargs={'reservation_id':reservation.pk}) return HttpResponseRedirect(redirect_url) else: print "Error" data['error_msg']=card_error_msg data['error_exist']=True
def asks_for_money(request): if request.method == 'GET': alipay_form = PaymentForm(auto_id=False) context = { "alipay_form": alipay_form, } return render_to_response("pay/payment.html", context, context_instance=RequestContext(request)) # POST method site = Site.objects.get_current() pay_url = 'http://%s/' % (site.domain) form = PaymentForm(request.POST, auto_id=False) if not form.is_valid(): context = { "alipay_form": form, } return render_to_response("pay/payment.html", context, context_instance=RequestContext(request)) # alipay form item_name = ("Django Alipay example") alipay_dict = { # base "_input_charset": 'utf-8', 'notify_url': '%salipay/dpn/' % pay_url, 'return_url': '%salipay/return/' % pay_url, 'service': SERVICE[0], # business #'seller_email': '', 'out_trade_no': uuid.uuid4().hex, 'subject': "xxx", 'price': form.cleaned_data['price'], 'quantity': form.cleaned_data['quantity'], 'total_fee': form.cleaned_data['price'] * form.cleaned_data['quantity'], # direct pay #'extra_common_param': '%s|%d'% (form.cleaned_data['price'], form.cleaned_data['quantity']), # partner trade 'body': '%s|%d' % (form.cleaned_data['price'], form.cleaned_data['quantity']), } alipay_form = AliPayPartnerTradeForm(auto_id=False, initial=alipay_dict) data = get_form_data(alipay_form) alipay_form['sign'].field.initial = make_sign(data) data = get_form_data(alipay_form) url = ALIPAY_GATEWAY + "?" for p in data: url = url + p + "=" + str(data[p]) + "&" url = url[:-1] context = { 'payment_title': ('AliPay Payment'), 'item_name': item_name, 'form': form, 'action': url, 'paid_form': alipay_form, } return render_to_response("pay/preview.html", context, context_instance=RequestContext(request))