[gen] Ogone field: bugfixes.

This commit is contained in:
Gaetan Delannay 2012-08-07 17:38:54 +02:00
parent 256f6acb55
commit 3393effd7b
2 changed files with 14 additions and 8 deletions

View file

@ -930,7 +930,7 @@ class BaseMixin:
stateName = self.State(name=True, initial=True) stateName = self.State(name=True, initial=True)
self.addHistoryEvent(None, review_state=stateName) self.addHistoryEvent(None, review_state=stateName)
state = self.State(name=False, initial=True) state = self.State(name=False, initial=True)
self.log('Wrong workflow info for a "%s"; is not in state "%s".' % \ self.log('Wrong workflow info for a "%s"; is now in state "%s".' % \
(self.meta_type, stateName)) (self.meta_type, stateName))
# Update permission attributes on the object if required # Update permission attributes on the object if required
updated = state.updatePermissions(wf, self) updated = state.updatePermissions(wf, self)

View file

@ -46,13 +46,15 @@ class Ogone(Type):
# * amount An integer representing the price for this order, # * amount An integer representing the price for this order,
# multiplied by 100 (no floating point value, no commas # multiplied by 100 (no floating point value, no commas
# are tolerated. Dont't forget to multiply the amount by # are tolerated. Dont't forget to multiply the amount by
# 100 !! # 100!
self.orderMethod = orderMethod self.orderMethod = orderMethod
# responseMethod must contain a method accepting one param, let's call # responseMethod must contain a method accepting one param, let's call
# it "response". The response method will be called when we will get # it "response". The response method will be called when we will get
# Ogone's response about the status of the payment. Param "response" is # Ogone's response about the status of the payment. Param "response" is
# an object whose attributes correspond to all parameters that you have # an object whose attributes correspond to all parameters that you have
# chosen to receive in your Ogone merchant account. # chosen to receive in your Ogone merchant account. After the payment,
# the user will be redirected to the object's view page, excepted if
# your method returns an alternatve URL.
self.responseMethod = responseMethod self.responseMethod = responseMethod
noShaInKeys = ('env',) noShaInKeys = ('env',)
@ -74,7 +76,6 @@ class Ogone(Type):
shaList.append('%s=%s' % (k, shaRes[k])) shaList.append('%s=%s' % (k, shaRes[k]))
shaObject = sha.new(passphrase.join(shaList) + passphrase) shaObject = sha.new(passphrase.join(shaList) + passphrase)
res = shaObject.hexdigest() res = shaObject.hexdigest()
print 'DIGEST', res
return res return res
def getValue(self, obj): def getValue(self, obj):
@ -121,19 +122,24 @@ class Ogone(Type):
shaKey = obj.getProductConfig().ogone['shaOutKey'] shaKey = obj.getProductConfig().ogone['shaOutKey']
digest = self.createShaDigest(response, shaKey, digest = self.createShaDigest(response, shaKey,
keysToIgnore=self.noShaOutKeys) keysToIgnore=self.noShaOutKeys)
return digest.lower() != response['SHASIGN'].lower() return digest.lower() == response['SHASIGN'].lower()
def process(self, obj): def process(self, obj):
'''Processes a response from Ogone.''' '''Processes a response from Ogone.'''
# Call the response method defined in this Ogone field. # Call the response method defined in this Ogone field.
if not self.ogoneResponseOk(obj): if not self.ogoneResponseOk(obj):
obj.log('Ogone response SHA failed. REQUEST: ' % \ obj.log('Ogone response SHA failed. REQUEST: %s' % \
str(obj.REQUEST.form)) str(obj.REQUEST.form))
raise Exception('Failure, possible fraud detection, an ' \ raise Exception('Failure, possible fraud detection, an ' \
'administrator has been contacted.') 'administrator has been contacted.')
# Create a nice object from the form. # Create a nice object from the form.
response = Object() response = Object()
for k, v in obj.REQUEST.form.iterkeys(): for k, v in obj.REQUEST.form.iteritems():
setattr(response, k, v) setattr(response, k, v)
self.responseMethod(obj.appy(), response) # Call the field method that handles the response received from Ogone.
url = self.responseMethod(obj.appy(), response)
# Redirect the user to the correct page. If the field method returns
# some URL, use it. Else, use the view page of p_obj.
if not url: url = obj.absolute_url()
obj.goto(url)
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------