source: WAeUP_SRP/trunk/skins/waeup_aaua/interswitch_cb2.py @ 5182

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

fix logging message

  • Property svn:keywords set to Id
File size: 4.4 KB
Line 
1## Script (Python) "interswitch_cb2"
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_cb2.py 5182 2010-04-30 14:12:57Z 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_cb2')
21from AccessControl import Unauthorized
22import DateTime
23
24if context.portal_membership.isAnonymousUser():
25    return None
26
27request = context.REQUEST
28students = context.portal_url.getPortalObject().campus.students
29wftool = context.portal_workflow
30mtool = context.portal_membership
31member = mtool.getAuthenticatedMember()
32member_id = str(member)
33#student_id = context.getStudentId()
34access_info = context.waeup_tool.getAccessInfo(context)
35student_id = access_info['student_id']
36if not context.isSectionOfficer() and (student_id is None or student_id != member_id):
37    logger.info('%s tried to access payment object of %s' % (member_id,student_id))
38    referer = request.get('HTTP_REFERER','none')
39    logger.info('%s:%s illegal access, referer = %s' % (member_id,student_id,referer))
40    real_ip = request.get('HTTP_X_REAL_IP',"none")
41    logger.info('%s:%s illegal access, real_x_ip = %s' % (member_id,student_id,real_ip))
42    return context.REQUEST.RESPONSE.redirect("%s/srp_anonymous_view" % context.portal_url())
43
44referer = request.get('HTTP_REFERER','none')
45real_ip = request.get('HTTP_X_REAL_IP',"none") 
46logger.info('%s, callback referer = %s, IP = %s' % (student_id,referer,real_ip))
47
48if not 'webpay.interswitchng.com' in referer and not 'waeup.org' in referer:
49    logger.info('%s, wrong callback referer %s, callback rejected, IP = %s' % (student_id,referer,real_ip))
50    return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
51
52student = getattr(students,student_id)
53resp_codes = (("desc","resp_desc"),
54              ("resp","resp_code"),
55              ("txnRef","pay_reference"),
56              ("payRef","resp_pay_reference"),
57              ("retRef","retRef"),
58              ("cardNum","resp_card_num"),
59              ("apprAmt","resp_approved_amount"),
60              )
61pd = {}
62for rc,pdk in resp_codes:
63    pd[pdk] = request.get(rc,'')
64
65## for testing purposes
66#pd['resp_desc'] = 'Simulated Callback'
67#pd['resp_pay_reference'] = 'XXXX'
68#pd['resp_code'] = '00'
69#pd['resp_card_num'] = '0000'
70#pd['resp_approved_amount'] = '99999999999999'
71
72if pd['resp_code'] == '00' and len(pd['resp_approved_amount']) > 4:
73    pd['resp_approved_amount'] = pd['resp_approved_amount'][:-2]
74    pd['status'] = 'paid'
75else:
76    pd['resp_approved_amount'] = '0'
77    pd['status'] = 'failed'
78
79review_state = wftool.getInfoFor(context,'review_state',None)
80if pd['resp_code'] == '':
81    logger.info('%s requeried payment %s for %s and got empty response' % (member,context.getId(),student_id))
82    return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
83if access_info['is_student'] and review_state == 'closed':
84    wftool.doActionFor(context,'open')
85pay_doc = context.getContent()
86resp = pd['resp_code'] 
87
88if  resp == '00':
89    try:
90        amount = int(getattr(pay_doc,'amount',0))
91        surcharge = int(getattr(pay_doc,'surcharge',0))
92        resp_approved_amount = int(pd['resp_approved_amount'])
93        #set_trace()
94        if amount + surcharge != resp_approved_amount:
95            logger.info('Warning: %s, approved amount %s and authorized amount %s are different for payment %s of %s' % (member,resp_approved_amount,amount+surcharge,context.getId(),student_id))
96            pd['status'] = 'failed'
97            pd['resp_desc'] = 'Warning: approved amount in callback does not match!'
98            resp = ''
99        else:
100            pass
101    except:
102        logger.info('%s: approved amount could not be verified for payment %s of %s' % (member,context.getId(),student_id))
103        pd['status'] = 'failed'
104        pd['resp_desc'] = 'Warning: approved amount could not be verified!'
105        resp = ''   
106
107pay_doc.edit(mapping = pd)
108
109if  resp == '00':
110    logger.info('%s received valid callback' % student_id)
111    logger.info('%s paid second instalment' % student_id)
112else:
113    logger.info('%s received unsuccessful callback: %s' % (student_id,pd['resp_desc']))
114
115review_state = wftool.getInfoFor(context,'review_state',None)
116if review_state == 'opened':
117    wftool.doActionFor(context,'close')
118
119return request.RESPONSE.redirect("%s/waeup_document_view" % context.absolute_url())
120
Note: See TracBrowser for help on using the repository browser.