将网站连接到деньги@mail.ru的应用程序
项目描述
django-mailru-money 是一个连接 django 网站到деньги@mail.ru 支付系统的应用程序。
许可证 - MIT。支持 python 2.6, 2.7 和 3.2;django 1.3 和 1.4。
安装
$ pip install django-mailru-money
在 settings.py 中写入您的商店数据
MAILRU_MONEY_SHOP_ID = 'my_shop_id' MAILRU_MONEY_SECRET_KEY = 'my_secret_key'
在 urls.py 中连接支付接收处理器
urlpatterns = patterns('', # ... url(r'^mailru-money/', include('mailru_money.urls')), # ... )
在这种情况下,ResultURL(需要通知 money.mail.ru)将是 http://your-site.com/mailru-money/result/。
然后添加 'mailru_money' 到 INSTALLED_APPS 并执行 syncdb(如果使用 South,则使用 migrate)。
INSTALLED_APPS 还应包括 'django.contrib.auth' 和 'django.contrib.contenttypes'。
使用
在支付页面上使用 mailru_money.forms.MailruOrderForm 输出支付表单和形成订单
# views.py from django.shortcuts import get_object_or_404, render from mailru_money.forms import MailruOrderForm from myapp.models import Item @login_required def pay(request, item_id) # товар, который будем оплачивать item = get_object_or_404(Item, id=item_id) # создаем заказ form = MailruOrderForm( amount = item.price, description = item.description, user = request.user pay_for = item, ) return render(request, 'myapp/pay.html', {'form': form})
在模板中需要形成支付表单
{# myapp/pay.html #} {# ... #} <form method='post' action='{{ form.ACTION }}'> {{ form }} <input type='submit' value='Оплатить через Деньги@mail.ru'> </form> {# ... #}
请注意,不需要使用 {% csrf_token %}。表单将作为一组隐藏字段输出。
可以在 mailru_money.signals.order_status_changed 信号中处理支付
from mailru_money.models import MailruOrder from mailru_money.signals import order_status_changed from myapp.models import Item def mailru_payment_received(sender, order, old_status, **kwargs): item = order.pay_for if order.state == MailruOrder.PAID: item.deliver_to(order.user) elif order.state == MailruOrder.REJECTED: item.unblock() order_status_changed.connect(mailru_payment_received)
只有当订单状态改变时,才会发送信号。订单状态改变时,已支付的订单不能变成未支付状态。
django-mailru-money 还支持另一种工作模式(可以不使用内置的订单控制手段)。如果上述模式不符合要求,请参阅源代码。
开发
开发在 bitbucket.org 和 github.com 进行
问题跟踪器 - 在比特桶上:https://bitbucket.org/kmike/django-mailru-money/issues/new
为了运行测试,克隆仓库,安装 tox 并从仓库根目录运行。
$ tox
。