Ejemplo n.º 1
0
class MMPayment(BaseHandler, BasePayment):
    COUNT_FIELD = 'service_id'
    PRICE_FIELD = 'mailiki_price'

    def __init__(self, name, goods, secret, callback):
        BaseHandler.__init__(self, goods)
        BasePayment.__init__(self, goods)

        self.signature = Signature(secret)
        self.callback = callback
        self.order = MMOrder(name, callback)

    def check_price(self, name, item_id, price):
        if self.price(self.get_good(name), item_id) != price:
            raise InvalidCountError

    def request(self, args):
        try:
            self.signature.try_check(args)
            item_id, name, count = self.get_name_count(args[self.COUNT_FIELD])
            price = int(args[self.PRICE_FIELD])
            self.check_price(name, item_id, price)
            return self.order(args['uid'], args['transaction_id'], name,
                              item_id)
        except SignatureError:
            return {'status': 0, 'error_code': 700}
        except InvalidCountError:
            return {'status': 0, 'error_code': 703}
Ejemplo n.º 2
0
    def __init__(self, name, goods, secret, callback):
        BaseHandler.__init__(self, goods)
        BasePayment.__init__(self, goods)

        self.signature = Signature(secret)
        self.callback = callback
        self.order = MMOrder(name, callback)
Ejemplo n.º 3
0
class SignatureTest(VKBaseTest):

    def setUp(self):
        self.signature = Signature('secretkey')
        self.params = {'c': 'a', 'b': 'v', 'a': 'z'}

    def test_string(self):
        self.eq(self.signature.string(self.params),
                'a=zb=vc=a' + self.signature.key)

    def test_md5(self):
        self.eq(self.signature.md5(self.params),
                md5(self.signature.string(self.params)).hexdigest())

    def test_check(self):
        self.true(self.signature.check(self.params,
                                       self.signature.md5(self.params)))
        self.false(self.signature.check(self.params, 'qwe'))
Ejemplo n.º 4
0
class VKPayment(BasePayment):

    def __init__(self, name, goods, secret, callback):
        self.signature = Signature(secret)
        self.info = Info(goods)
        self.order = VKOrder(name, callback)
        super(VKPayment, self).__init__(goods)

    def request(self, args):
        notification_type = args.get('notification_type')
        try:
            if not self.signature.check(args, args.pop('sig')):
                raise SignatureError()

            item_id, name, count = self.get_name_count(args['item'])

            if notification_type.startswith(GET_ITEM):
                return self.info(name, item_id)
            if notification_type.startswith(ORDER):
                return self.order(args['order_id'], args['receiver_id'],
                                  name, item_id, args['status'])
        except (ItemFormatError, UnknownItemError, InvalidCountError,
                CallbackError, SignatureError) as error:
            return error.response()
Ejemplo n.º 5
0
 def __init__(self, name, goods, secret, callback):
     self.signature = Signature(secret)
     self.info = Info(goods)
     self.order = VKOrder(name, callback)
     super(VKPayment, self).__init__(goods)
Ejemplo n.º 6
0
 def setUp(self):
     self.signature = Signature('secretkey')
     self.params = {'c': 'a', 'b': 'v', 'a': 'z'}