source: WAeUP_SRP/trunk/skins/waeup_aaue/interswitch_request_cb2.py @ 5255

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

implement split-request-payment

  • Property svn:keywords set to Id
File size: 4.1 KB
Line 
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_cb2.py 5193 2010-05-14 11:38:09Z 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_cb2')
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']
93    pd['date'] = now
94
95review_state = wftool.getInfoFor(context,'review_state',None)
96if not pd['resp_approved_amount']:
97    logger.info('%s requeried payment %s for %s and got empty response' % (member,context.getId(),student_id))
98    return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
99if access_info['is_student'] and review_state == 'closed':
100    wftool.doActionFor(context,'open')
101pay_doc = context.getContent()
102resp = pd['resp_approved_amount']
103
104pay_doc.edit(mapping = pd)
105
106if  resp:
107    logger.info('%s received valid callback' % student_id)
108    logger.info('%s paid second instalment' % student_id)
109else:
110    logger.info('%s received unsuccessful callback: %s' % (student_id,pd['resp_desc']))
111
112review_state = wftool.getInfoFor(context,'review_state',None)
113if review_state == 'opened':
114    wftool.doActionFor(context,'close')
115
116return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
117
Note: See TracBrowser for help on using the repository browser.