'Verifies an IPN and a PDT.
Checks for obvious signs of weirdness in the payment and flags appropriately.
Provide a callable that takes an instance of this class as a parameter and returns
a tuple (False, None) if the item is valid. Should return (True, "reason") if the
item isn\'t valid. Strange but backward compatible :) This function should check
that `mc_gross`, `mc_currency` `item_name` and `item_number` are all correct.'

def verify(self, item_check_callable=None):

    self.response = self._postback()
    self._verify_postback()
    if (not self.flag):
        if self.is_transaction():
            if (self.payment_status != 'Completed'):
                self.set_flag(('Invalid    payment_status.    (%s)' % self.payment_status))
            if duplicate_txn_id(self):
                self.set_flag(('Duplicate    txn_id.    (%s)' % self.txn_id))
            if (self.receiver_email != RECEIVER_EMAIL):
                self.set_flag(('Invalid    receiver_email.    (%s)' % self.receiver_email))
            if callable(item_check_callable):
                (flag, reason) = item_check_callable(self)
                if flag:
                    self.set_flag(reason)
        else:
            pass
    self.save()
    self.send_signals()
