hash = hmac.new(MERCHANT_KEY, s).hexdigest() if request.POST.get('HASH', '') != hash: flag = 'Invalid hash %s. Hash string \n%s' % (request.POST.get( 'HASH', ''), s) else: if ipn.is_valid(): try: #When commit = False, object is returned without saving to DB. ipn_obj = ipn.save(commit=False) except Exception, e: flag = "Exception while processing. (%s)" % e else: flag = "Invalid form. (%s)" % ipn.errors if ipn_obj is None: ipn_obj = PayUIPN() #Set query params and sender's IP address ipn_obj.initialize(request) if flag is not None: #We save errors in the flag field ipn_obj.set_flag(flag) ipn_obj.save() ipn_obj.send_signals() date = datetime.now(pytz.UTC).strftime('%Y%m%d%H%M%S') hash = hmac.new(MERCHANT_KEY, '00014%s' % date).hexdigest() return HttpResponse('<EPAYMENT>%s|%s</EPAYMENT>' % (date, hash))
def test_payu_model_flag(flag_info, extra_info): model = PayUIPN(flag_info=flag_info) model.set_flag(extra_info) assert model.flag_info == flag_info + extra_info assert model.flag
def test_payu_model_order_status(order, authorized, completed): model = PayUIPN(ORDERSTATUS=order) assert model.is_authorized == authorized assert model.is_completed == completed
model = G(PayUIPN, flag=True) mock_flagged.send.assert_called_once_with(sender=model) @pytest.mark.parametrize('payload, merchant_key, signature', [ ({'a': '1'}, '1', '1be4474db26a37bd5660ca396b5a9160'), ({}, '0', '477f91ddbcc6839b9950045977da3530'), ({'MERCHANT': '1', 'ORDER_REF': 1, 'ORDER_AMOUNT': 1, 'ORDER_CURRENCY': 'RON'}, '0', 'f05323c0b185b5264c49c8bae8ffc2d1'), ]) def test_idn_signature(payload, merchant_key, signature): assert PayUIDN.signature(payload, merchant_key) == signature @pytest.mark.parametrize('payu_idn, merchant, merchant_key, now, expected_payload', [ (PayUIPN(REFNO=1, IPN_TOTALGENERAL=1, CURRENCY='USD'), '123', '1', 1, { 'MERCHANT': '123', 'ORDER_REF': 1, 'ORDER_AMOUNT': 1, 'ORDER_CURRENCY': 'USD', 'IDN_DATE': 1, 'ORDER_HASH': '5d275f182089bab5a5351613067b95dc' }), (PayUIPN(), '123', '1', 1, { 'MERCHANT': '123', 'ORDER_REF': -1, 'ORDER_AMOUNT': 0, 'ORDER_CURRENCY': 'RON', 'IDN_DATE': 1,