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}
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)
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'))
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()
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 setUp(self): self.signature = Signature('secretkey') self.params = {'c': 'a', 'b': 'v', 'a': 'z'}