Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

UNKNOWN

Project description

Moneyboookers gateway for Django with two payment forms: common and secure.

Moneyboookers gateway allows you to accept payments on your website. It contains two payment paths:

  • Form genaration with POST to Moneybookers
  • Secure redirect with prepared SESSION_ID

In both cases additional security checks are implemented.

Full API documentation: “Moneybookers Payment Gateway”

How to install

  1. Download the source and place in your apps folder
  2. Edit “settings.py”
    • add “moneybookers” to your “INSTALLED_APPS”
    • add following settings (example):
MONEYBOOKERS_MERCHANT_ID = "123456"
MONEYBOOKERS_SECRET_WORD = "YourSecretWord"
MONEYBOOKERS_PAY_TO_EMAIL = "billing@mycompany.com"
MONEYBOOKERS_STATUS_URL = "https://www.mycompany.com/moneybookers/status_url/"
MONEYBOOKERS_CURRENCY_CODE = "EUR"

not required, but recommended:

MONEYBOOKERS_CANCEL_URL = "https://www.mycompany.com/moneybookers/cancel/"
MONEYBOOKERS_RETURN_URL = "https://www.mycompany.com/moneybookers/ok/"
MONEYBOOKERS_STATUS_URL2 = "mailto: billing@mycompany.com"
MONEYBOOKERS_RECEPIENT_DESCRIPTION = "My Company Limited"

For more optional settings please see “conf.py”

  1. Add to “urls.py” paths
urlpatterns = patterns('',
    (r'^moneybookers/status_url/', include('moneybookers.urls')),
    (r'^moneybookers/cancel/', 'MoneybookersCancel'),
    (r'^moneybookers/ok/', 'MoneybookersOk'),
    (r'^order/$', 'View_With_Order'),
)
  1. Create table in your database
manage.py syncdb
  1. Create/render form
  • Common way:

Create an instance of the form in your “views.py” and make render in your template

from moneybookers.forms import MoneybookersStandardForm

def View_With_Order(request):
    mb_dict = {
      "amount":"25.00",
      "invoice":"4567",
      "user_id": request.user.id,
      "detail1_description":"Product ID:",
      "detail1_text":"4509334",
      "merchant_field": "new_client",
      "merchant_field_value": "1",
      "user_ipaddress": request.META.get("REMOTE_ADDR", "0.0.0.0")
    }
    f = MoneybookersStandardForm(initial=mb_dict)
    context = {"form": f}
    return render_to_response("order.html", context)

In “order.html”:

<h1>Pay with Moneybookers now!</h1>
{{ form.render }}

After payment Moneybookers sends a signal to your server (status_url). The transaction will be saved in the database, then will be send a signal MoneybookersSignal. You can use it to process your own actions (add amount to users account, etc..). An example to use in “models.py”: from moneybookers.signals import moneybookers_signal from django.db import transaction from django.core.mail import mail_admins

@transaction.commit_manually
def MoneybookersSignal(sender, **kwargs):
        if sender.error:
                mail_admins("Moneybookers: bad transaction %s" % sender.transaction_id, sender.error_text)
                return
        sid = transaction.savepoint()
        try:
                user = User.objects.get(id=sender.user_id)
                profile = user.get_profile()
                profile.money = profile.money + sender.amount
                profile.save()
                mail_admins( "Moneybookers: good transaction %s" % sender.transaction_id, "%s added to user %s" % (sender.amount, sender.user_id) )
                transaction.savepoint_commit(sid)
            except Exception, e:
                transaction.savepoint_rollback(sid)
                mail_admins("Moneybookers: database rollback: transaction %s" % sender.transaction_id, e)
            transaction.commit()

moneybookers_signal.connect(MoneybookersSignal, dispatch_uid="yourapp.models.MoneybookersSignal")

Secure way:

Add to “urls.py” another path

urlpatterns = patterns('',
    (r'^moneybookers_redirect/$', 'payment_moneybookers_redirect'),
)

Create an form in your template yourself with POST-Url to “moneybookers_redirect”

<form action="https://www.mycompany.com/moneybookers_redirect/" method="post">
    <input name="invoice" value="777" type="hidden">
    <input type="submit" value="Pay with Moneybookers"/>
</form>

In your “views.py” you must check the invoice number

from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_POST
from django.http import HttpResponseRedirect, HttpResponseServerError

@login_required
@require_POST
def payment_moneybookers_redirect(request):
    invoice = request.POST.get("invoice", None)
    mb_dict = {
        "language": "EN",
        "country": ...,
        "amount": ...,
        "prepare_only": True,
        "detail1_description": "Invoice #",
        "detail1_text": invoice,
        "invoice": invoice,
        "user_id": request.user.id,
        "user_ipaddress": request.META.get("REMOTE_ADDR", "0.0.0.0")
        }

    # If you want accept only credit cards without user to register on moneybookers:
    mb_dict["hide_login"] = "1"
    mb_dict["payment_methods"] = "ACC"

    f = MoneybookersSecureForm(initial=mb_dict)
    url = f.redirect_url()
    if url:
        return HttpResponseRedirect(url)
    return HttpResponseServerError()
Patch your "models.py" with signal MoneybookersSignal like in "common way"

Based on “Moneybookers Payment Gateway Merchant Integration Manual” v6.10 / 8 Nov. 2010

Alex Aster, www.alrond.com, 2010 FreeBSD License

Project details


Release history Release notifications

This version

0.2

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-moneybookers, version 0.2
Filename, size File type Python version Upload date Hashes
Filename, size django-moneybookers-0.2.tar.gz (15.4 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page