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')
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)
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)
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')