def sync(request): keys = RazorpayKeys.objects.first() payment = RazorpayPayments(keys.api_key, keys.api_secret) invoices = Invoice.objects.all() for invoice in invoices: if invoice.status != 'paid': invoice_details = payment.fetch_invoices(invoice.invoice_id) invoice.status = invoice_details['status'] invoice.save() if invoice.status == 'paid': orders = Order.objects.filter( order_id=invoice_details['order_id']) if len(orders) == 0: order_details = payment.fetch_orders( invoice_details['order_id']) payment.save_order(order_details) if invoice_details['payment_id']: payments = Payment.objects.filter( payment_id=invoice_details['payment_id']) if len(payments) == 0: payment_details = payment.fetch_payment( invoice_details['payment_id']) payment.save_payment(payment_details) return JsonResponse({"message": "synced"})
def webhook(request): if request.method == 'POST': data = json.loads(request.body) if 'payload' not in data or 'invoice' not in data['payload']: return JsonResponse({"message": "Invalid Data"}) invoice_entity = data['payload']['invoice']['entity'] order_entity = data['payload']['order']['entity'] payment_entity = data['payload']['payment']['entity'] invoice = Invoice.objects.get(invoice_id=invoice_entity['id']) invoice.status = invoice_entity['status'] invoice.save() RazorpayPayments.save_payment(payment_entity) RazorpayPayments.save_order(order_entity) return JsonResponse({"message": "Success"}) return JsonResponse({"message": "Method Not Allowed"})
def _initiate_payment(self, user, profile, title, description, amount): keys = self._get_keys() payment = RazorpayPayments(keys.api_key, keys.api_secret) fullname = '{} {}'.format(profile.first_name, profile.last_name) customer = { "email": user.email, "contact": profile.contact, "name": fullname } items = [{ "name": title, 'description': description, "amount": amount, "currency": "INR" }] invoice = payment.create_invoice(customer=customer, items=items) return invoice