Esempio n. 1
0
def rent_notification(request, venue_id, user_id):
    if request.method != "POST":
        return HttpResponseNotAllowed(['POST'])

    user = get_object_or_404(User, pk=user_id)
    venue = get_object_or_404(Venue, pk=venue_id)
    rent_venue = RentVenue.objects.get(venue=venue)

    parsed_status = parse_ipn_notification_request(request)
    parsed_status.transaction_type = 'Venue'
    parsed_status.transaction_entity_id = venue_id
    parsed_status.transaction_user = user
    parsed_status.save()

    if parsed_status.transactionStatus not in [IPNTransactionStatus.SUCCESS, IPNTransactionStatus.PENDING]:  # ERROR
        rent_venue.state = DonationState.TERMINATED
        rent_venue.status_code = AmazonActionStatus.PE
        rent_venue.error_message = parsed_status.statusMessage
        rent_venue.save()

        venue.sponsor = None
        venue.save()

        message_body = render_to_string('spuddercern/pages/rent_venue_rent_error.html', {
            'venue': venue,
            'error_message': rent_venue.error_message,
            'venue_url': '%s/venues/view/%s' % (settings.SPUDMART_BASE_URL, venue.id)
        })

        send_email(settings.SERVER_EMAIL, user.email, 'Venue renting payment error', message_body)

    return HttpResponse('OK')
Esempio n. 2
0
    def test_parse_ipn_notification_request(self):
        request_mock = MockedRequest()
        request_mock.POST = {
            'operation': 'PAY',
            'transactionDate': '1402841022',
            'notificationType': 'TransactionStatus',
            'certificateUrl':
            'https://fps.sandbox.amazonaws.com/certs/110713/PKICert.pem?requestId=15n5tlqv8hc05gibjv6xxu82cyev9lxqdzc4d2y5801qfcl',
            'recipientEmail': '*****@*****.**',
            'signatureMethod': 'RSA-SHA1',
            'signatureVersion': '2',
            'callerReference': '5b220133-7c1c-491c-b31a-f53768215158',
            'buyerName': 'Test Business',
            'signature':
            'n78E5YHKt+dzq+WSTZ9y0Sox1UCTz+02tlUjco7VdamZEtPCdctLC7InWHCiL9ECtu7BswF+EquU\nruKpbg9pjtuYFz5MGPejTLvQW8hJBPSee7qoQMmZt8AevgJ2OEIQC2GGd9wTIgsrNBJRJ686qTQY\nEq5TaZTDwgGebSjKgBwiUYbTcUmn+mxnTQ+J/5dqSVviYlms6RxhlVPjkIuLsVCX1aouFsNCnapo\nnggyUmu9hcNPGermFZjzcOLJfMcltmVHe40puhUyj2DCpCuywehbBICP1uf6e9tp/hNFZW2hlLS2\n7te5HRJukoju9hiSs6dkQeu8RaAW9FZyDCh1mw==',
            'recipientName': 'Test Business',
            'transactionId': '214Z2841Z228Z34FJCTDO4CKE2AAUJVNI5L',
            'transactionStatus': 'SUCCESS',
            'paymentMethod': 'ABT',
            'transactionAmount': 'USD 10.00',
            'statusMessage':
            'The transaction was successful and the payment instrument was charged.',
            'statusCode': 'Success'
        }

        progress_status = parse_ipn_notification_request(request_mock)

        self.assertEquals(progress_status.operation, 'PAY')
        self.assertEquals(progress_status.transactionDate,
                          datetime.datetime.fromtimestamp(1402841022))
        self.assertEquals(progress_status.notificationType,
                          'TransactionStatus')
        self.assertEquals(progress_status.recipientEmail, '*****@*****.**')
        self.assertEquals(progress_status.signatureMethod, 'RSA-SHA1')
        self.assertEquals(progress_status.signatureVersion, '2')
        self.assertEquals(progress_status.callerReference,
                          '5b220133-7c1c-491c-b31a-f53768215158')
        self.assertEquals(progress_status.buyerName, 'Test Business')
        self.assertEquals(progress_status.recipientName, 'Test Business')
        self.assertEquals(progress_status.transactionId,
                          '214Z2841Z228Z34FJCTDO4CKE2AAUJVNI5L')
        self.assertEquals(progress_status.transactionStatus, 'SUCCESS')
        self.assertEquals(progress_status.paymentMethod, 'ABT')
        self.assertEquals(progress_status.transactionAmount, 'USD 10.00')
        self.assertEquals(
            progress_status.statusMessage,
            'The transaction was successful and the payment instrument was charged.'
        )
        self.assertEquals(progress_status.statusCode, 'Success')

        self.assertEquals(progress_status.transaction_type, '')
        self.assertEquals(progress_status.transaction_entity_id, '')
        self.assertIsNone(progress_status.transaction_user)
Esempio n. 3
0
    def test_parse_ipn_notification_request(self):
        request_mock = MockedRequest()
        request_mock.POST = {
            'operation': 'PAY',
            'transactionDate': '1402841022',
            'notificationType': 'TransactionStatus',
            'certificateUrl': 'https://fps.sandbox.amazonaws.com/certs/110713/PKICert.pem?requestId=15n5tlqv8hc05gibjv6xxu82cyev9lxqdzc4d2y5801qfcl',
            'recipientEmail': '*****@*****.**',
            'signatureMethod': 'RSA-SHA1',
            'signatureVersion': '2',
            'callerReference': '5b220133-7c1c-491c-b31a-f53768215158',
            'buyerName': 'Test Business',
            'signature': 'n78E5YHKt+dzq+WSTZ9y0Sox1UCTz+02tlUjco7VdamZEtPCdctLC7InWHCiL9ECtu7BswF+EquU\nruKpbg9pjtuYFz5MGPejTLvQW8hJBPSee7qoQMmZt8AevgJ2OEIQC2GGd9wTIgsrNBJRJ686qTQY\nEq5TaZTDwgGebSjKgBwiUYbTcUmn+mxnTQ+J/5dqSVviYlms6RxhlVPjkIuLsVCX1aouFsNCnapo\nnggyUmu9hcNPGermFZjzcOLJfMcltmVHe40puhUyj2DCpCuywehbBICP1uf6e9tp/hNFZW2hlLS2\n7te5HRJukoju9hiSs6dkQeu8RaAW9FZyDCh1mw==',
            'recipientName': 'Test Business',
            'transactionId': '214Z2841Z228Z34FJCTDO4CKE2AAUJVNI5L',
            'transactionStatus': 'SUCCESS',
            'paymentMethod': 'ABT',
            'transactionAmount': 'USD 10.00',
            'statusMessage': 'The transaction was successful and the payment instrument was charged.',
            'statusCode': 'Success'
        }

        progress_status = parse_ipn_notification_request(request_mock)

        self.assertEquals(progress_status.operation, 'PAY')
        self.assertEquals(progress_status.transactionDate, datetime.datetime.fromtimestamp(1402841022))
        self.assertEquals(progress_status.notificationType, 'TransactionStatus')
        self.assertEquals(progress_status.recipientEmail, '*****@*****.**')
        self.assertEquals(progress_status.signatureMethod, 'RSA-SHA1')
        self.assertEquals(progress_status.signatureVersion, '2')
        self.assertEquals(progress_status.callerReference, '5b220133-7c1c-491c-b31a-f53768215158')
        self.assertEquals(progress_status.buyerName, 'Test Business')
        self.assertEquals(progress_status.recipientName, 'Test Business')
        self.assertEquals(progress_status.transactionId, '214Z2841Z228Z34FJCTDO4CKE2AAUJVNI5L')
        self.assertEquals(progress_status.transactionStatus, 'SUCCESS')
        self.assertEquals(progress_status.paymentMethod, 'ABT')
        self.assertEquals(progress_status.transactionAmount, 'USD 10.00')
        self.assertEquals(progress_status.statusMessage, 'The transaction was successful and the payment instrument was charged.')
        self.assertEquals(progress_status.statusCode, 'Success')

        self.assertEquals(progress_status.transaction_type, '')
        self.assertEquals(progress_status.transaction_entity_id, '')
        self.assertIsNone(progress_status.transaction_user)
Esempio n. 4
0
def rent_notification(request, venue_id, user_id):
    if request.method != "POST":
        return HttpResponseNotAllowed(['POST'])

    user = get_object_or_404(User, pk=user_id)
    venue = get_object_or_404(Venue, pk=venue_id)
    rent_venue = RentVenue.objects.get(venue=venue)

    parsed_status = parse_ipn_notification_request(request)
    parsed_status.transaction_type = 'Venue'
    parsed_status.transaction_entity_id = venue_id
    parsed_status.transaction_user = user
    parsed_status.save()

    if parsed_status.transactionStatus not in [
            IPNTransactionStatus.SUCCESS, IPNTransactionStatus.PENDING
    ]:  # ERROR
        rent_venue.state = DonationState.TERMINATED
        rent_venue.status_code = AmazonActionStatus.PE
        rent_venue.error_message = parsed_status.statusMessage
        rent_venue.save()

        venue.sponsor = None
        venue.save()

        message_body = render_to_string(
            'spuddercern/pages/rent_venue_rent_error.html', {
                'venue':
                venue,
                'error_message':
                rent_venue.error_message,
                'venue_url':
                '%s/venues/view/%s' % (settings.SPUDMART_BASE_URL, venue.id)
            })

        send_email(settings.SERVER_EMAIL, user.email,
                   'Venue renting payment error', message_body)

    return HttpResponse('OK')