source: WAeUP_SRP/trunk/skins/waeup_futminna/pay_interswitch.py @ 17072

Last change on this file since 17072 was 5819, checked in by Henrik Bettermann, 14 years ago

The surcharge attribute in the payment object must be set zero. Otherwise interswitch_cb will output a warning.

File size: 7.7 KB
Line 
1## Script (Python) "pay_interswitch"
2##bind container=container
3##bind context=context
4##bind namespace=
5##bind script=script
6##bind subpath=traverse_subpath
7##parameters=
8##title=
9##
10# $Id: pay_interswitch.py 2619 2007-11-10 17:39:36Z henrik $
11"""
12pay online
13"""
14from urllib import urlencode
15import logging
16logger = logging.getLogger('Skins.pay_interswitch')
17import DateTime
18
19if context.portal_membership.isAnonymousUser():
20    return None
21
22try:
23    from Products.zdb import set_trace
24except:
25    def set_trace():
26        pass
27request = context.REQUEST
28wftool = context.portal_workflow
29students = context.portal_url.getPortalObject().campus.students
30
31
32student_id = context.getStudentId()
33student = getattr(students,student_id)
34
35student_record = context.students_catalog.getRecordByKey(student_id)
36#amount,description = context.getSchoolFee(student_record.faculty,student_record.session,student_record.course)
37info = {}
38info['student'] = student_record
39info['payment_possible'] = False
40info['amount'] = '0'
41info['bank'] = ''
42info['type_description'] = ''
43info['pay_bill_to'] = ''
44fee_dict = context.getSchoolFee(student_record)
45fulltime = student_record.mode.endswith('_ft')
46
47if not fee_dict:
48    return context.interswitch_form(info=info)
49
50info['site_id'] = '117'
51info['currency_id'] = '566'
52
53if student_record.mode in ('pg_ft'):
54    pay_item_id = "11703"
55elif student_record.review_state == 'cleared_and_validated' and student_record.level in ('100'):
56    pay_item_id = "11700"
57elif student_record.review_state == 'cleared_and_validated' and student_record.level in ('200'):
58    pay_item_id = "11701" 
59elif student_record.review_state == 'cleared_and_validated' and student_record.level in ('300'):
60    pay_item_id = "11702"   
61elif student_record.review_state == 'returning' and student_record.level in ('100','110'):
62    pay_item_id = "11701"
63elif student_record.review_state == 'returning' and student_record.level in ('200','210'):
64    pay_item_id = "11702"
65elif student_record.review_state == 'returning' and student_record.level in ('300','310'):
66    pay_item_id = "11703"
67elif student_record.review_state == 'returning' and student_record.level in ('400','410','500','510','600'):
68    pay_item_id = "11704"
69else:
70    pay_item_id = ""
71   
72info['bank'] = ''
73info['payment_possible'] = True
74info['type_description'] = fee_dict['description']
75info['pay_bill_to'] = student_record.name
76info['student_id'] = student_id
77info['student_name'] = student_record.name
78info['type'] = 'online'
79info['status'] = 'started'
80info['session_id'] = fee_dict['next_session_id']
81info['item'] = student_record.course
82info['category'] = 'schoolfee'
83info['student_email'] = student_record.email
84now = DateTime.DateTime()
85info['date'] = now
86info['pay_ship_to'] = "Federal University of Technology, Minna, Nigeria"
87timestamp = "%d" % int(now.timeTime()*1000)
88info['order_id'] = "%s%s" % (student_id[1:],timestamp)
89p_id = "p%s" % timestamp
90
91
92# students don't have to pay the Interswitch surcharge, FUT is paying for them 
93info['surcharge'] = 0
94info['lrf'] = fee_dict['lrf']
95info['fee'] = fee_dict['all']
96info['amount'] = amount = info['fee'] + info['lrf']
97total_amount = 100*int(amount)
98
99
100if student_id is None:
101    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
102
103if True:
104    info['action'] = "https://webpay.interswitchng.com/paydirect/webpay/pay.aspx"
105else:
106    info['action'] = "%s/payments/%s/simulate_callback" % (student.absolute_url(),p_id)
107
108
109if "payments" not in student.objectIds():
110    student.invokeFactory('PaymentsFolder','payments')
111    payments = getattr(student,'payments')
112    d = {}
113    d['Title'] = 'Payments'
114    payments.getContent().edit(mapping=d)
115    wftool.doActionFor(payments,'open')
116else:
117    payments = getattr(student,'payments')
118if request.has_key('epayment'):
119    return context.interswitch_form(info=info)
120
121
122payments.invokeFactory('Payment', p_id)
123payment = getattr(payments,p_id)
124wftool.doActionFor(payment,'open')
125d = {}
126d.update(info)
127payment.getContent().edit(mapping=d)
128
129
130info['callback_url'] = "%s/payments/%s/interswitch_cb?echo=%s" % (student.absolute_url(),
131                                                                  p_id,
132                                                                  p_id)
133
134logger.info('%(student_id)s initiated online school fee payment with order_id %(order_id)s and callback url %(callback_url)s' % info)
135payment_fields = (('product_id','site_id'),
136                  ('site_redirect_url','callback_url'),
137                  ('Currency','currency_id'),
138                  ('cust_id','student_id'),
139                  ('cust_id_desc','type_description'),
140                  ('cust_name','student_name'),
141                  ('txn_ref','order_id'),
142                  ('Amount','amount'),
143                  )
144args = {}
145for arg,field in payment_fields:
146    args[arg] = info[field]
147
148bt_amount = 1500
149interswitch_amount = 300
150#fut_split = 0000 #not appicable
151fut_amount = amount - bt_amount - interswitch_amount
152
153xmldict = {}
154xmldict['detail_ref'] = args['txn_ref']
155xmldict['department'] = student_record.department
156xmldict['level'] = student_record.level
157xmldict['faculty'] = student_record.faculty
158xmldict['fut_amount'] = "%d" % int(100*fut_amount)
159xmldict['bt_amount'] = "%d" % int(100*bt_amount)
160#xmldict['fut_split'] = "%d" % int(100*fut_split)
161
162#students at all levels pay their school fees to different banks
163
164if student_record.mode == 'jm_ft':
165    xmldict['fut_acct'] = "000000000000"
166    xmldict['bank_id'] = '0'
167elif student_record.mode in ('pg_ft'):
168    xmldict['fut_acct'] = "2522040000134"
169    xmldict['bank_id'] = '8'
170elif student_record.review_state == 'cleared_and_validated' and student_record.level in ('100'):
171    xmldict['fut_acct'] = "0030001000017110"
172    xmldict['bank_id'] = '89'
173elif student_record.review_state == 'cleared_and_validated' and student_record.level in ('200'):
174    xmldict['fut_acct'] = "0591201005146"
175    xmldict['bank_id'] = '101'
176elif student_record.review_state == 'cleared_and_validated' and student_record.level in ('300'):
177    xmldict['fut_acct'] = "6013803345"
178    xmldict['bank_id'] = '117'
179elif student_record.review_state == 'returning' and student_record.level in ('100','110'):   
180    xmldict['fut_acct'] = "0591201005146"
181    xmldict['bank_id'] = '101'
182elif student_record.level in ('200','210'):
183    xmldict['fut_acct'] = "6013803345"
184    xmldict['bank_id'] = '117' 
185elif student_record.level in ('300','310'):
186    xmldict['fut_acct'] = "2522040000134"
187    xmldict['bank_id'] = '8' 
188#Change of acct from UBA to GTBank
189elif student_record.level in ('400','410','500','510','600'):
190    xmldict['fut_acct'] = "3713516838111"
191    xmldict['bank_id'] = '10'   
192#remedial students
193#elif student_record.level in ('000'):
194    #xmldict['fut_acct'] = "00000000000"
195    #xmldict['bank_id'] = '0'     
196else:
197    xmldict['fut_acct'] = "0000000000000"
198    xmldict['bank_id'] = '0'
199
200
201xmltext = """<payment_item_detail>
202<item_details detail_ref="%(detail_ref)s" college="FUT Minna" department="%(department)s" faculty="%(faculty)s">
203<item_detail item_id="1" item_name="FUT Minna School Fee" item_amt="%(fut_amount)s" bank_id="%(bank_id)s" acct_num="%(fut_acct)s" />
204<item_detail item_id="2" item_name="BT" item_amt="%(bt_amount)s" bank_id="89" acct_num="0061001000021095" />
205</item_details>
206</payment_item_detail>""" % xmldict
207
208info['xml_data'] = """<input type="hidden" name="xml_data" value='%s'  />""" % xmltext
209
210args['Amount'] = "%d" % (total_amount)
211args['site_name'] = "futminna.waeup.org"
212args['cust_name_desc'] = "Student Name"
213args['pay_item_id'] = pay_item_id
214args['pay_item_name'] = "FUT Minna Tuition Payments"
215args['payment_params'] = 'college_split'
216#args['xml_data'] = ''
217#args['xml_data'] = xmltext   # info['xml_data']can be used instead
218info['args'] = args
219
220return context.goto_interswitch_form(info=info)
221
Note: See TracBrowser for help on using the repository browser.