source: WAeUP_SRP/trunk/skins/waeup_aaue/interswitch_request_cb.py @ 13040

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

fix request payment (completely untested)

  • Property svn:keywords set to Id
File size: 5.3 KB
RevLine 
[5190]1## Script (Python) "interswitch_cb"
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: interswitch_request_cb.py 5265 2010-07-14 14:56:06Z henrik $
11"""
12payment callback
13"""
14try:
15    from Products.zdb import set_trace
16except:
17    def set_trace():
18        pass
19import logging
20logger = logging.getLogger('Skins.interswitch_request_cb')
21from AccessControl import Unauthorized
22import DateTime
23
24now = DateTime.DateTime()
25
26if context.portal_membership.isAnonymousUser():
27    return None
28
29request = context.REQUEST
30students = context.portal_url.getPortalObject().campus.students
31wftool = context.portal_workflow
32mtool = context.portal_membership
33member = mtool.getAuthenticatedMember()
34member_id = str(member)
35#student_id = context.getStudentId()
36access_info = context.waeup_tool.getAccessInfo(context)
37student_id = access_info['student_id']
38if not context.isSectionOfficer() and (student_id is None or student_id != member_id):
39    logger.info('%s tried to access payment object of %s' % (member_id,student_id))
40    referer = request.get('HTTP_REFERER','none')
41    logger.info('%s:%s illegal access, referer = %s' % (member_id,student_id,referer))
42    real_ip = request.get('HTTP_X_REAL_IP',"none")
43    logger.info('%s:%s illegal access, real_x_ip = %s' % (member_id,student_id,real_ip))
44    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
45
46referer = request.get('HTTP_REFERER','none')
47real_ip = request.get('HTTP_X_REAL_IP',"none") 
48logger.info('%s, callback referer = %s, IP = %s' % (student_id,referer,real_ip))
49
50#if not 'webpay.interswitchng.com' in referer and not 'waeup.org' in referer:
51#    logger.info('%s, wrong callback referer %s, callback rejected, IP = %s' % (student_id,referer,real_ip))
52#    return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
53
54student = getattr(students,student_id)
55             
56resp_codes = (
57              #("desc","resp_desc"),
58              #("resp","resp_code"),
59              #("txnRef","pay_reference"),
60              ("pin","resp_pay_reference"),
61              #("retRef","retRef"),
62              #("cardNum","resp_card_num"),
63              ("appamt","resp_approved_amount"),
64              ("msg","msg"),
65              ("session","resp_session"),
66              ("feename","resp_feename"),       
67              ("studentnum","resp_studentnum"), 
68              ("txndate","resp_txndate"), 
69              ("studentname","resp_studentname"),
70              )             
71             
72pd = {}
73for rc,pdk in resp_codes:
74    pd[pdk] = request.get(rc,'')
75
76## for testing purposes
77#pd['resp_desc'] = 'Simulated Callback'
78#pd['resp_pay_reference'] = 'XXXX'
79#pd['resp_code'] = '00'
80#pd['resp_card_num'] = '0000'
81#pd['resp_approved_amount'] = '4680000'
82
83if pd['resp_approved_amount'] and len(pd['resp_approved_amount']) > 4:
84    pd['resp_approved_amount'] = pd['resp_approved_amount'][:-2]
85    pd['status'] = 'paid'
86    pd['resp_desc'] = pd['resp_feename'] + '|' + pd['resp_studentnum'] + '|' + pd['resp_studentname'] + '|' + pd['resp_txndate'] + '|' + pd['resp_session']
87    pd['resp_code'] = 'RP'
88    pd['date'] = now
89else:
90    pd['resp_approved_amount'] = '0'
91    pd['status'] = 'failed'
92    pd['resp_desc'] = pd['msg']
[5265]93    pd['resp_code'] = 'RP'
[5190]94    pd['date'] = now
95
96review_state = wftool.getInfoFor(context,'review_state',None)
97if access_info['is_student'] and review_state == 'closed':
98    wftool.doActionFor(context,'open')
99pay_doc = context.getContent()
100resp = pd['resp_approved_amount']
101
102pay_doc.edit(mapping = pd)
103s_brain = context.students_catalog(id=student_id)[0]
104session = s_brain.session
105
106next_info = context.getNextInfo(s_brain)
107next_session_id = next_info['next_session_id']
108next_session_str = next_info['next_session_str']
109next_level_id = next_info['next_level_id']
110next_transition = next_info['next_transition']
111next_verdict = next_info['next_verdict']
112next_previous_verdict = next_info['next_previous_verdict']
113
[5265]114if  resp != '0':
[5190]115    if pay_doc.category == 'schoolfee': 
116        if context.getStudentReviewState() == "school_fee_paid":
117            logger.info('%s paid school_fee in state school_fee_paid' % (student_id))
118        else:
119            study_course = getattr(student,'study_course')
120            try:
121                wftool.doActionFor(study_course,'open')
122            except:
123                pass
124            verdict = s_brain.verdict
125            if next_previous_verdict == 'N/A':
126                next_previous_verdict = ''
127            study_course.getContent().edit(mapping= {'current_level': next_level_id,
128                                                     'current_session': next_session_id,
129                                                     'current_verdict': next_verdict,
130                                                     'previous_verdict': next_previous_verdict,
131                                                     })
132            if next_transition:
133                wftool.doActionFor(student,next_transition)
134
135
136
137    logger.info('%s received valid callback' % student_id)
[5265]138    logger.info('%s paid first instalment' % student_id)
[5190]139
140else:
141    logger.info('%s received unsuccessful callback: %s' % (student_id,pd['resp_desc']))
142
143review_state = wftool.getInfoFor(context,'review_state',None)
144if review_state == 'opened':
145    wftool.doActionFor(context,'close')
146
147return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
148
Note: See TracBrowser for help on using the repository browser.