【发布时间】:2013-08-06 14:03:33
【问题描述】:
我有一个 django 应用程序,我正在尝试将它与 EBS 支付网关集成。所以下面是我的代码
settings.py
INSTALLED_APPS = (
.............
'ebspayment',
)
EBS_ACCOUNT_ID = '5880' #Enter Your Account Id here.This is a test id.
EBS_SECRET_KEY = 'ebskey' #Enter Your Secret Key here.This is a test key.
EBS_ACTION_URL = 'https://secure.ebs.in/pg/ma/sale/pay' #Do not edit this URL.
EBS_RETURN_URL = 'http://127.0.0.1:8000/ebs/ebspayment/response' #Enter your domain URL instead of 127.0.0.1:8000.
urls.py
from django.conf.urls import url, patterns
from ebspayment.views import ebspayment, ebsresponse
urlpatterns = patterns('',
url(r'^ebspayment/(?P<app_id>\d+)/$', ebspayment, name='ebsindex'),
url(r'^ebspayment/response', ebsresponse, name='ebsresponse'),
)
views.py
def ebspayment(request, app_id):
app = get_object_or_404(App, pk=campaign_id)
form = PaymentForm()
# string = settings.EBS_SECRET_KEY+"|"+form.cleaned_data['account_id']+"|"
# +form.cleaned_data['amount']+"|"+form.cleaned_data['reference_no'] +"|"
# +form.cleaned_data['return_url']+"|"+form.cleaned_data['mode']
string = settings.EBS_SECRET_KEY+"|"+'5880'+"|"+'1.00'+"|"+'223'+"|"+settings.EBS_RETURN_URL+"|"+"TEST"
secure_hash = hashlib.md5(string).hexdigest()
return render_to_response('ebspayment/payment_form.html', {'form': form,
'app_obj' : app,
'ebs_url': settings.EBS_ACTION_URL,
'secure_hash' : secure_hash},
context_instance=RequestContext(request))
payment_form.html
{% block content %}
<h1>Enter Card Details</h1>
<form class="form-horizontal" action="{{ ebs_url }}" method="POST" name="frmTransaction" id="frmTransaction" onSubmit="return validate()">
{{form.as_p}}
<input type='hidden' name='secure_hash' value='{{secure_hash}}'>
<button type="submit" value="submit" class="btn btn-primary" >Submit</button>
</form>
{% endblock %}
forms.py
#Transaction Modes
MODES = (
('TEST', 'TEST'),
('LIVE', 'LIVE'),
)
#EBS Payment Form
class PaymentForm(forms.Form):
account_id = forms.IntegerField(initial=settings.EBS_ACCOUNT_ID, required=True)
reference_no = forms.IntegerField(required=True, initial="223")
amount = forms.DecimalField(max_digits=10, decimal_places=2, required=True, initial='1.00')
name = forms.CharField(max_length=255, required=True, initial="Sheeba")
email = forms.EmailField(max_length=70, required=True, initial="xyz@ebs.in")
address = forms.CharField(required=True, initial="Kodambakkam")
city = forms.CharField(max_length=60, required=True, initial="Chennai")
state = forms.CharField(max_length=60, required=True, initial="Tamil Nadu")
country = CountryField()
postal_code = forms.IntegerField(required=True, initial="600098")
phone = forms.IntegerField(required=True, initial="044123456")
return_url = forms.URLField(label="Return URL", required=True, initial=settings.EBS_RETURN_URL+'?DR={DR}')
description = forms.CharField(required=True, initial="Testing EBS-Django")
mode = forms.ChoiceField(choices=MODES)
因此,从上面的代码中,我将显示 Payment form 并将所有输入的详细信息(包括 secure_hash 变量数据)提交到 URL http://127.0.0.1:8000/ebs/ebspayment/response。
但是即使在提交哈希字符串之后,我在重定向到这个 url 后得到Error! SecureHash validation failed,所以我在上面的代码中做错了什么
- 实际上有没有满足
EBS支付网关与django集成的模块/代码/包? - 为了集成,我们肯定需要
EBS merchant account吗?因为对于 authorize.net 等其他支付网关,需要一个可用于集成目的的沙盒帐户 - 在上面的代码中,我对创建哈希的字符串值进行了硬编码,但实际上它需要在验证后来自表单,但在这种情况下不知道如何验证表单,因为如所示我们正在发布到另一个 url像
http://127.0.0.1:8000/ebs/ebspayment/response一样,因此我们无法通过视图验证表单吗?(我们可以通过 javascript 进行验证:)) - 所以最后谁能指出我正确的方向,以便将 django 应用程序与 EBS 支付网关集成
- 还有谁能告诉我将 django 应用程序与 EBS 网关集成所需的要求吗?
- 请告诉我如何处理上述代码以避免
secure validation error?
【问题讨论】:
-
我可以知道您是如何在您的 django 应用程序中安装 ebspayment 应用程序的吗?对我有很大帮助
标签: python django forms hash ebs-payment