def charge_paypal_order_payment(order, paypal_payer_id, paypal_payment_id): """ Charge the user through paypal. :param order: Order for which to charge for. :param paypal_payment_id: payment_id :param paypal_payer_id: payer_id :return: """ # save the paypal payment_id with the order order.paypal_token = paypal_payment_id save_to_db(order) # create the transaction. status, error = PayPalPaymentsManager.execute_payment( paypal_payer_id, paypal_payment_id ) if status: # successful transaction hence update the order details. order.paid_via = 'paypal' order.status = 'completed' order.transaction_id = paypal_payment_id order.completed_at = datetime.utcnow() save_to_db(order) # create tickets create_pdf_tickets_for_holder(order) # send email and notifications send_email_to_attendees(order, order.user_id) send_notif_to_attendees(order, order.user_id) order_url = make_frontend_url( path='/orders/{identifier}'.format(identifier=order.identifier) ) for organizer in order.event.organizers: send_notif_ticket_purchase_organizer( organizer, order.invoice_number, order_url, order.event.name, order.id ) if order.event.owner: send_notif_ticket_purchase_organizer( order.event.owner, order.invoice_number, order_url, order.event.name, order.id, ) return True, 'Charge successful' else: # payment failed hence expire the order order.status = 'expired' save_to_db(order) # delete related attendees to unlock the tickets delete_related_attendees_for_order(order) # return the error message from Paypal return False, error
def charge_paypal_payment_invoice(invoice_identifier): """ Create a paypal payment. :return: The payment id of the created payment. """ try: paypal_payment_id = request.json['data']['attributes'][ 'paypal_payment_id'] paypal_payer_id = request.json['data']['attributes']['paypal_payer_id'] except Exception as e: return BadRequestError({'source': e}, 'Bad Request Error').respond() event_invoice = safe_query(db, EventInvoice, 'identifier', invoice_identifier, 'identifier') # save the paypal payment_id with the order event_invoice.paypal_token = paypal_payment_id save_to_db(event_invoice) # execute the invoice transaction. status, error = PayPalPaymentsManager.execute_payment( paypal_payer_id, paypal_payment_id) if status: # successful transaction hence update the order details. event_invoice.paid_via = 'paypal' event_invoice.status = 'paid' event_invoice.transaction_id = paypal_payment_id event_invoice.completed_at = datetime.datetime.now() save_to_db(event_invoice) return jsonify(status="Charge Successful", payment_id=paypal_payment_id) else: # return the error message from Paypal return jsonify(status="Charge Unsuccessful", error=error)
def charge_paypal_order_payment(order, paypal_payer_id, paypal_payment_id): """ Charge the user through paypal. :param order: Order for which to charge for. :param paypal_payment_id: payment_id :param paypal_payer_id: payer_id :return: """ # save the paypal payment_id with the order order.paypal_token = paypal_payment_id save_to_db(order) # create the transaction. status, error = PayPalPaymentsManager.execute_payment( paypal_payer_id, paypal_payment_id ) if status: # successful transaction hence update the order details. order.paid_via = 'paypal' order.status = 'completed' order.transaction_id = paypal_payment_id order.completed_at = datetime.utcnow() save_to_db(order) on_order_completed(order) return True, 'Charge successful' # payment failed hence expire the order order.status = 'expired' save_to_db(order) # delete related attendees to unlock the tickets delete_related_attendees_for_order(order) # return the error message from Paypal return False, error