Ignore:
Timestamp:
19 Mar 2012, 07:01:48 (13 years ago)
Author:
Henrik Bettermann
Message:

Implement OnlinePaymentRequestWebservicePage?. OnlinePaymentCallbackPage? can be removed later.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.custom/trunk/src/waeup/custom/interswitch/browser.py

    r7898 r7919  
    107107            'redirectURL':site_redirect_url}
    108108        return QUERY_URL + '?%s' % urllib.urlencode(args)
     109
     110# Alternative preferred solution
     111class InterswitchRequestWebserviceActionButton(RequestCallbackActionButton):
     112    grok.order(4)
     113    icon = 'actionicon_call.png'
     114    text = _('Request CollegePAY webservice')
     115    target = 'request_webservice'
     116
    109117
    110118class InterswitchPage(KofaPage):
     
    183191        query = self.request.form
    184192        # Should be logged instead of printed
    185         print query
     193        write_log_message(self,'callback received: %s' % query)
    186194        if query.get('resp', None) != '00':
    187195            self.flash(_('Unsuccessful callback: ${a}',
    188196                mapping = {'a': query.get('desc', _('Incomplete query string.'))}))
    189             write_log_message(self,'invalid callback: %s' % self.context.p_id)
     197            write_log_message(self,'unsuccessful callback: %s' % self.context.p_id)
    190198            self.context.r_card_num = query.get('cardNum', None)
    191199            self.context.r_code = query.get('resp', None)
     
    195203        if query.get('apprAmt', None) != str(self.context.amount_auth):
    196204            self.flash(_('Wrong amount'))
    197             write_log_message(self,'wrong amount: %s' % self.context.p_id)
     205            write_log_message(self,'successful but wrong amount: %s' % self.context.p_id)
    198206            self.context.r_card_num = query.get('cardNum', None)
    199207            self.context.r_code = query.get('resp', None)
     
    247255        self.redirect(self.url(self.context, '@@index'))
    248256        return
     257
     258# Alternative solution, replaces OnlinePaymentCallbackPage
     259class OnlinePaymentRequestWebservicePage(UtilityView, grok.View):
     260    """ Request webservice view for the CollegePAY gateway
     261    """
     262    grok.context(IStudentOnlinePayment)
     263    grok.name('request_webservice')
     264    grok.require('waeup.payStudent')
     265
     266    def update(self):
     267        if self.context.p_state == 'paid':
     268            self.flash(_('This ticket has already been paid.'))
     269            return
     270        student = self.context.getStudent()
     271        sr = get_SOAP_response(PRODUCT_ID, self.context.p_id)
     272        write_log_message(self,'callback received: %s' % sr)
     273        wlist = sr.split(':')
     274        if len(wlist) != 7:
     275            self.flash(_('Invalid callback: ${a}',
     276                mapping = {'a': wlist}))
     277            write_log_message(self,'invalid callback: %s' % self.context.p_id)
     278            return
     279        self.context.r_code = wlist[0]
     280        self.context.r_desc = wlist[1]
     281        self.context.r_amount_approved = int(wlist[2])
     282        self.context.r_card_num = wlist[3]
     283        self.context.r_pay_reference = wlist[5]
     284       
     285        if wlist[0] != '00':
     286            self.flash(_('Unsuccessful callback: ${a}',
     287                mapping = {'a': wlist[1]}))
     288            write_log_message(self,'unsuccessful callback: %s' % self.context.p_id)
     289            self.context.p_state = 'failed'
     290            return
     291
     292        if wlist[2] != str(self.context.amount_auth):
     293            self.flash(_('Wrong amount'))
     294            write_log_message(self,'successful callback but wrong amount: %s' % self.context.p_id)
     295            self.context.p_state = 'failed'
     296            return
     297
     298        if wlist[5] != self.context.p_id:
     299            self.flash(_('Wrong transaction id'))
     300            write_log_message(self,'successful callback but wrong transaction id: %s' % self.context.p_id)
     301            self.context.p_state = 'failed'
     302            return
     303
     304        write_log_message(self,'successful callback: %s' % self.context.p_id)
     305
     306        self.context.p_state = 'paid'
     307        self.context.payment_date = datetime.now()
     308
     309        if self.context.p_category == 'clearance':
     310            # Create CLR access code
     311            pin, error = create_accesscode('CLR',0,student.student_id)
     312            if error:
     313                self.flash(_('Valid callback received. ${a}',
     314                    mapping = {'a':error}))
     315                return
     316            self.context.ac = pin
     317        elif self.context.p_category == 'schoolfee':
     318            # Create SFE access code
     319            pin, error = create_accesscode('SFE',0,student.student_id)
     320            if error:
     321                self.flash(_('Valid callback received. ${a}',
     322                    mapping = {'a':error}))
     323                return
     324            self.context.ac = pin
     325        elif self.context.p_category == 'bed_allocation':
     326            # Create HOS access code
     327            pin, error = create_accesscode('HOS',0,student.student_id)
     328            if error:
     329                self.flash(_('Valid callback received. ${a}',
     330                    mapping = {'a':error}))
     331                return
     332            self.context.ac = pin
     333        self.flash(_('Valid callback received.'))
     334        return
     335
     336    def render(self):
     337        self.redirect(self.url(self.context, '@@index'))
     338        return
Note: See TracChangeset for help on using the changeset viewer.