Example #1
0
    def get_order(self, order_id):
        # Method to get order
        request = OrdersGetRequest(order_id)
        # 3. Call PayPal to get the transaction
        response = self.client.execute(request)

        return response
Example #2
0
 def get_order(self, order_id):
     """Method to get order"""
     request = OrdersGetRequest(order_id)
     # 3. Call PayPal to get the transaction
     response = self.client.execute(request)
     # 4. Save the transaction in your database. Implement logic to save transaction to your database for future reference.
     return response
Example #3
0
    def get_order(self, order_id):
        """Method to get order"""
        request = OrdersGetRequest(order_id)
        # 3. Call PayPal to get the transaction

        # TODO: error handling on paypal check.
        response = self.client.execute(request)
        # 4. Save the transaction in your database. Implement logic to save transaction to your database for future reference.
        print('Status Code: ', response.status_code)
        print('Status: ', response.result.status)
        print('Order ID: ', response.result.id)
        print('Intent: ', response.result.intent)

        print('Gross Amount: {} {}'.format(
            response.result.purchase_units[0].amount.currency_code,
            response.result.purchase_units[0].amount.value))

        return (
            response.result.purchase_units[0].amount,  # amount
            response.result.purchase_units[0].reference_id,  # buy order id
            response.result.purchase_units[0].
            description,  # seller id / sell order id
            response.result.purchase_units[0].payments.
            captures[0],  # payment detail status
            response.result)
Example #4
0
    def testOrderGetRequestTest(self):
        response = create_order(self.client)

        request = OrdersGetRequest(response.result.id)
        response = self.client.execute(request)

        self.assertEqual(200, response.status_code)
        self.assertIsNotNone(response.result)

        self.assertIsNotNone(response.result.id)
        self.assertIsNotNone(response.result.purchase_units)
        self.assertEqual(1, len(response.result.purchase_units))

        first_purchase_unit = response.result.purchase_units[0]
        self.assertEqual("test_ref_id1", first_purchase_unit.reference_id)
        self.assertEqual("USD", first_purchase_unit.amount.currency_code)
        self.assertEqual("100.00", first_purchase_unit.amount.value)

        self.assertIsNotNone(response.result.create_time)

        self.assertIsNotNone(response.result.links)

        found_approve = False
        for link in response.result.links:
            if "approve" == link.rel:
                found_approve = True
                self.assertIsNotNone(link.href)
                self.assertEqual("GET", link.method)
        self.assertTrue(found_approve)

        self.assertEqual("CREATED", response.result.status)
Example #5
0
def get_paypal_order(token) -> dict:
    request = OrdersGetRequest(token)
    response = client.execute(request)
    
    return {
        'buyer_email' : response.result.payer['email_address'],
        'payment_status' : response.result.status
    }
Example #6
0
    def get(self, request, orderID):
        try:
            # Get paypal request
            requestPaypal = OrdersGetRequest(orderID)
            response = PayPalClient().client.execute(requestPaypal)

            # check payment status
            if response.result.status == "COMPLETED":
                amount = response.result.purchase_units[0].amount.value

                # check if exists the "OrderID" in the orders
                if Order.objects.filter(
                        PayPalOrderId=response.result.id).exists():
                    return render(request, "payment.html",
                                  {"successMessage": "Successful Payment"})
                else:
                    try:
                        order = Order.objects.get(User=request.user,
                                                  Ordered=False)

                        # verify if "payment amount" and "order.Total" are equal
                        if float(amount) == float(order.Total):
                            # save the payment data
                            order.Ordered = True
                            order.PayPalOrderId = response.result.id
                            order.Date = datetime.now()

                            OrderItem.objects.filter(
                                id__in=order.Items.all()).update(Ordered=True)

                            order.save()

                            # remove all books from the cart
                            clearCart(request)

                            return render(
                                request, "payment.html",
                                {"successMessage": "Successful Payment"})
                        else:
                            return render(
                                request, "payment.html", {
                                    "errorMessage":
                                    "The payment amount not match with the server"
                                })

                    except ObjectDoesNotExist:
                        try:
                            order = Order.objects.get(
                                PayPalOrderId=response.result.id, Ordered=True)
                            return render(
                                request, "payment.html",
                                {"successMessage": "Successful Payment"})
                        except ObjectDoesNotExist:
                            return render(
                                request, "payment.html",
                                {"errorMessage": "Server Internal Error"})
        except Exception:
            return redirect("core:home")
Example #7
0
 def confirm_payment(self):
     try:
         order_id = self.details['id']
     except KeyError:
         order_id = None
     if order_id:
         request = OrdersGetRequest(order_id)
         response = self.client.execute(request)
         return response.result.id
Example #8
0
 def get_order_and_update(self, order_id, user):
     request = OrdersGetRequest(order_id)
     response = self.client.execute(request)
     current_amount = PaymentsApp.models.AvailableAmount.objects.get(
         user=user)
     PaymentsApp.models.AvailableAmount.objects.filter(
         user=user).update(available_amount=float(
             response.result.purchase_units[0].amount.value) +
                           getattr(current_amount, 'available_amount'))
Example #9
0
    def get_payment(self, order_id: str) -> HttpResponse:
        """
        Retrieve details for a PayPal payment

        :param order_id: ID of the PayPal payment
        :return: The response of the API call to PayPal
        """
        request = OrdersGetRequest(order_id)
        return self.client.execute(request)
Example #10
0
 def __order_get_request(self, token):
     request = OrdersGetRequest(token)
     response = self.paypal.execute(request)
     print(f"查询 {token} 订单数据")
     self.__print_paypal_response(response)
     _pid = response.result.id
     _purchase_units = response.result.purchase_units[0]
     _status = response.result.status
     _sid = _purchase_units['invoice_id']
     return _sid, _pid, _status
Example #11
0
 def get_order(self, order_id):
     request = OrdersGetRequest(order_id)
     response = self.client.execute(request)
     print('Status Code: ', response.status_code)
     print('Status: ', response.result.status)
     print('Order ID: ', response.result.id)
     print('Intent: ', response.result.intent)
     print('Links:')
     for link in response.result.links:
         print('\t{}: {}\tCall Type: {}'.format(link.rel, link.href,
                                                link.method))
         print('Gross Amount: {} {}'.format(
             response.result.purchase_units[0].amount.currency_code,
             response.result.purchase_units[0].amount.value))
Example #12
0
    def get_order(self, order_id):
        """Query the PayPal api for information about the order. Return the
        amount of the payment (in cents) upon success or 0 otherwise

        """

        try:
            request = OrdersGetRequest(order_id)
            response = self.client.execute(request)
        except HttpError as e:
            logger.error('HttpError while fetching PayPal order: {}'.format(e))
            return '', 0

        try:
            assert response.result.intent == 'CAPTURE', 'bad payment intent'
            assert response.status_code == 200, 'bad http response code'
            assert response.result.status == 'COMPLETED', 'tx not completex'
            assert response.result.id == order_id, 'order id does not match'

            purchase = response.result.purchase_units[0]
            srb = purchase.payments.captures[0].seller_receivable_breakdown

            assert srb.paypal_fee.currency_code == 'USD', 'foreign currency'
            assert srb.net_amount.currency_code == 'USD', 'foreign currency'
            assert srb.gross_amount.currency_code == 'USD', 'foreign currency'

            parts = srb.paypal_fee.value.split('.')
            fee = int(parts[0]) * 100 + int(parts[1])
            assert fee > 0, 'invalid fee amount'

            parts = srb.net_amount.value.split('.')
            net = int(parts[0]) * 100 + int(parts[1])
            assert fee > 0, 'invalid net amount'

            parts = srb.gross_amount.value.split('.')
            gross = int(parts[0]) * 100 + int(parts[1])
            assert fee > 0, 'invalid gross amount'

            assert fee + net == gross, 'conversion error'

            payment_id = purchase.payments.captures[0].id
            assert payment_id, 'missing paypal TransactionID'

        except AssertionError as e:
            logger.error(
                'AssertionError while fetching PayPal order: {}'.format(e))
            return '', 0

        return payment_id, net, fee
Example #13
0
 def get_order(self, order_id):
   """Method to get order"""
   request = OrdersGetRequest(order_id)
   #3. Call PayPal to get the transaction
   response = self.client.execute(request)
   #4. Save the transaction in your database. Implement logic to save transaction to your database for future reference.
   print ('Status Code: ', response.status_code)
   print ('Status: ', response.result.status)
   print ('Order ID: ', response.result.id)
   print ('Intent: ', response.result.intent)
   print ('Links:')
   for link in response.result.links:
     print('\t{}: {}\tCall Type: {}'.format(link.rel, link.href, link.method))
   print ('Gross Amount: {} {}'.format(response.result.purchase_units[0].amount.currency_code,
                      response.result.purchase_units[0].amount.value))
Example #14
0
 def get_order(self, order_id):
     """Method to get order"""
     request = OrdersGetRequest(order_id)
     response = self.client.execute(request)
     print 'Status Code: ', response.status_code
     print 'Status: ', response.result.status
     print 'Order ID: ', response.result.id
     print 'Intent: ', response.result.intent
     print 'Links:'
     for link in response.result.links:
         print('\t{}: {}\tCall Type: {}'.format(link.rel, link.href,
                                                link.method))
     print 'Gross Amount: {} {}'.format(
         response.result.purchase_units[0].amount.currency_code,
         response.result.purchase_units[0].amount.value)
     json_data = self.object_to_json(response.result)
     print "json_data: ", json.dumps(json_data, indent=4)
Example #15
0
 def patch_order(self, order_id):
     """Method to patch order"""
     request = OrdersPatchRequest(order_id)
     request.request_body(self.build_request_body())
     self.client.execute(request)
     response = self.client.execute(OrdersGetRequest(order.id))
     print('Order ID: ', response.result.id)
     print('Intent: ', response.result.intent)
     print('Links:')
     for link in response.result.links:
         print('\t{}: {}\tCall Type: {}'.format(link.rel, link.href,
                                                link.method))
     print('Gross Amount: {} {}'.format(
         response.result.purchase_units[0].amount.currency_code,
         response.result.purchase_units[0].amount.value))
     json_data = self.object_to_json(response.result)
     print("json_data: ", json.dumps(json_data, indent=4))
Example #16
0
	def get_order(self, order_id):
		"""Method to get order"""
		request = OrdersGetRequest(order_id)
		#3. Call PayPal to get the transaction
		response = self.client.execute(request)
		#print(json.dumps(str(response.result.__dict__["_dict"]), indent=4).replace("},", "},\n"))
		#print("Purcase Units")
		#print(json.loads(json.dumps(str(response.result.purchase_units[0].__dict__), indent=4)))
		#4. Save the transaction in your database. Implement logic to save transaction to your database for future reference.
		#print(f'Status Code: {response.status_code}')
		#print(f'Status: {response.result.status}')
		#print(f'Order ID: {response.result.id}')
		#print(f'Intent: {response.result.intent}')
		#print('Links:')
		#for link in response.result.links:
		#	print('\t{}: {}\tCall Type: {}'.format(link.rel, link.href, link.method))
		#print('Gross Amount: {} {}'.format(response.result.purchase_units[0].amount.currency_code,
		#					response.result.purchase_units[0].amount.value))
		return response.result.__dict__["_dict"]
Example #17
0
async def capture_transaction(
    transaction_body: CaptureTransactionModel,
    identity: Optional[str] = Depends(get_jwt_identity_optional)):
    try:
        orderResponse = paypal_client.client.execute(
            OrdersGetRequest(transaction_body.orderID))
        order = Order.objects.get(
            id=orderResponse.result.purchase_units[0].custom_id)
        if not price_service.remove_stock(order):
            raise OutOfStockError
        response = paypal_client.client.execute(
            OrdersCaptureRequest(transaction_body.orderID))
        order.paypalCaptureID = response.result.purchase_units[
            0].payments.captures[0].id
        order.orderStatus = 'placed'
        order.save()
        return orderResponse.result.purchase_units[0].custom_id
    except OutOfStockError:
        raise OutOfStockError().http_exception
    except Exception as e:
        raise e
def payment_complete(request):
    PPClient = PayPalClient()

    body = json.loads(request.body)
    data = body["orderID"]
    user_id = request.user.id

    requestorder = OrdersGetRequest(data)
    response = PPClient.client.execute(requestorder)

    total_paid = response.result.purchase_units[0].amount.value

    basket = Basket(request)
    order = Order.objects.create(
        user_id=user_id,
        full_name=response.result.purchase_units[0].shipping.name.full_name,
        email=response.result.payer.email_address,
        address1=response.result.purchase_units[0].shipping.address.
        address_line_1,
        address2=response.result.purchase_units[0].shipping.address.
        admin_area_2,
        postal_code=response.result.purchase_units[0].shipping.address.
        postal_code,
        country_code=response.result.purchase_units[0].shipping.address.
        country_code,
        total_paid=response.result.purchase_units[0].amount.value,
        order_key=response.result.id,
        payment_option="paypal",
        billing_status=True,
    )
    order_id = order.pk

    for item in basket:
        OrderItem.objects.create(order_id=order_id,
                                 product=item["product"],
                                 price=item["price"],
                                 quantity=item["qty"])

    return JsonResponse("Payment completed!", safe=False)
Example #19
0
    def request_refund(self, data: BaseRequestRefund) -> bool:

        request = OrdersGetRequest(data.pid)
        response = self.paypal.execute(request)
        capture_id = response.result.purchase_units[0].payments.captures[0].id
        print(f"退款数据 {capture_id}")
        self.__print_paypal_response(response)

        request = CapturesRefundRequest(capture_id)
        request.prefer("return=representation")
        _post_data = {
            "amount": {
                "value": f"{data.price}",
                "currency_code": self.config['currency_code']
            }
        }

        request.request_body(_post_data)
        try:
            response = self.paypal.execute(request)
            return True
        except Exception as e:
            print(e)
            return False
Example #20
0
 def get_order(self, token):
     request = OrdersGetRequest(token)
     response = self.client.execute(request)
     return response.result
Example #21
0
 def query_order(self, data: BaseOrderId) -> dict:
     request = OrdersGetRequest(data.pid)
     response = self.paypal.execute(request)
     json_data = PayPalResultFormatUtil.object_to_json(response.result)
     return json_data
Example #22
0
 def get_order_price(self, order_id):
     request = OrdersGetRequest(order_id)
     response = self.client.execute(request)
     return response.result.purchase_units[0].amount.value
Example #23
0
    def get_order(self, order_id, addressDetails, request):
        """Method to get order"""

        addressDetails = json.loads(addressDetails)

        if request.user.is_anonymous:
            user = None

        else:
            user = request.user

        if 'fullname' in addressDetails:
            name = addressDetails['fullname']
        else:
            name = request.user.get_full_name()

        total = getTotal(request)
        cart = request.COOKIES.get('cart')
        address = getAddress(addressDetails, request)

        print(address, cart, total)

        request = OrdersGetRequest(order_id)
        #3. Call PayPal to get the transaction
        response = self.client.execute(request)
        #4. Save the transaction in your database. Implement logic to save transaction to your database for future reference.

        print('Status Code: ', response)
        print('Status: ', response.result)
        print('Order ID: ', response.result.id)
        print('Intent: ', response.result.intent)
        print('Links:')
        for link in response.result.links:
            print('\t{}: {}\tCall Type: {}'.format(link.rel, link.href,
                                                   link.method))
        print('Gross Amount: {} {}'.format(
            response.result.purchase_units[0].amount.currency_code,
            response.result.purchase_units[0].amount.value))

        print(
            float(total) == float(
                response.result.purchase_units[0].amount.value))

        if not address or not cart or not total:
            return 5

        if response.status_code != 200:
            return 4

        if float(total) != float(
                response.result.purchase_units[0].amount.value):
            return 1

        if response.result.purchase_units[0].amount.currency_code != 'USD':
            return 3

        order = Order(address=address,
                      status='Order Confirmed',
                      total=total,
                      name=name,
                      user=user,
                      items=cart)
        order.save()

        return 0
Example #24
0
    def form_valid(self, form):
        """
        Getting the request and then:

        - get the order from paypal
        - Get the request
        """
        request = OrdersGetRequest(form.cleaned_data['order_id'])
        # Call PayPal to get the transaction
        response = self.client.execute(request)
        # load the registration request id from the paypal order
        self.kwargs[
            'registration_request_id'] = response.result.purchase_units[
                0].custom_id
        # update the request status and add the order id
        event_reg_request = RegistrationRequest.objects.get(
            pk=self.kwargs['registration_request_id'])
        event_reg_request.paypal_order_id = form.cleaned_data['order_id']
        event_reg_request.status = COMPLETE
        event_reg_request.save()
        # Create the event registration for each of the events that the
        # event_reg_request.eventregistrationitem is attached to.
        # create an email message for each registration
        email_connection = mail.get_connection()
        # create the list of messages
        email_messages = []
        for event in event_reg_request.event_registration_item.events.all():
            registration = Registration(
                player=self.request.user.player,
                event=event,
                vehicle_make=event_reg_request.vehicle_make,
                vehicle_model=event_reg_request.vehicle_model,
                vehicle_color=event_reg_request.vehicle_color,
                vehicle_registration=event_reg_request.vehicle_registration,
                local_contact=event_reg_request.local_contact,
                registration_request=event_reg_request)
            registration.save()
            # send an email to staff with a link to the registration
            # send email using the self.cleaned_data dictionary
            message = """
            Hello!

            {} {} has a new registration for event {}.

            See it here:
            {}

            --ToV MechCrow
            """.format(
                self.request.user.first_name, self.request.user.last_name,
                event.name,
                self.request.build_absolute_uri(
                    reverse("registration:detail",
                            kwargs={'pk': registration.id})))
            email_message = mail.EmailMessage(
                "Registration for {} {}".format(self.request.user.first_name,
                                                self.request.user.last_name),
                message, settings.DEFAULT_FROM_EMAIL,
                ["*****@*****.**", "*****@*****.**"])
            email_messages.append(email_message)
        # send an email to each of them.
        email_connection.send_messages(email_messages)
        # close the connection to the email server
        email_connection.close()

        return super().form_valid(form)
Example #25
0
 def get_order(self, order_id):
     request = OrdersGetRequest(order_id)
     response = self.client.execute(request)
     return response
Example #26
0
    def initGatewayByReturn(request):
        # a get param named 'token' contains the order_id
        paypalSettings = getPayPalSettings()
        client = PayPalHttpClient(paypalSettings.environment)
        donation_id = None
        subscription_obj = {}
        kwargs = {}

        if request.GET.get('subscription_id', None):
            # recurring payment
            subscription_obj = getSubscriptionDetails(
                request.session, request.GET.get('subscription_id'))
            kwargs['subscription_obj'] = subscription_obj
            if 'custom_id' in subscription_obj:
                donation_id = subscription_obj['custom_id']
            else:
                raise ValueError(
                    _('Missing custom_id(donation_id) in curlPaypal-returned subscription'
                      ))
        elif request.GET.get('token', None):
            # onetime payment
            req = OrdersGetRequest(request.GET.get('token'))
            # might throw IOError
            response = client.execute(req)
            _debug('PayPal: Returns from Gateway')
            _debug('PayPal: Order status: ' + response.result.status)
            donation_id = response.result.purchase_units[0].custom_id
            kwargs['order_id'] = request.GET.get('token')
            kwargs['order_status'] = response.result.status
            if not donation_id:
                raise ValueError(
                    _("Missing donation_id in purchase_units custom_id attribute"
                      ))
        else:
            raise ValueError(_("Missing token from PayPal request"))

        try:
            donation = Donation.objects.get(pk=donation_id)

            if request.GET.get('subscription_id', None):
                # raise error if paypal_subscription_id already found in DonationPaymentMeta
                dpm = DonationPaymentMeta.objects.filter(
                    donation=donation,
                    field_key='paypal_subscription_id',
                    field_value=request.GET.get('subscription_id'))
                if len(dpm) >= 1:
                    raise ValueError(
                        _("PayPal subscription id found. Return request from PayPal is already invalid."
                          ))
                else:
                    dpm = DonationPaymentMeta(
                        donation=donation,
                        field_key='paypal_subscription_id',
                        field_value=request.GET.get('subscription_id'))
                    dpm.save()
            elif request.GET.get('token', None):
                # raise error if paypal_token already found in DonationPaymentMeta
                dpm = DonationPaymentMeta.objects.filter(
                    donation=donation,
                    field_key='paypal_token',
                    field_value=request.GET.get('token'))
                if len(dpm) >= 1:
                    raise ValueError(
                        _("PayPal token found. Return request from PayPal is already invalid."
                          ))
                else:
                    dpm = DonationPaymentMeta(
                        donation=donation,
                        field_key='paypal_token',
                        field_value=request.GET.get('token'))
                    dpm.save()
            return Factory_Paypal.initGateway(request, donation, None,
                                              **kwargs)
        except Donation.DoesNotExist:
            raise ValueError(
                _("Donation object not found by id: ") + str(donation_id))
Example #27
0
def GetOrder(order_id):
    """You can use this function to retrieve an order by passing order ID as an argument"""
    """Method to get order"""
    request = OrdersGetRequest(order_id)
    response = client.execute(request)
    return response.result.__dict__["_dict"]
Example #28
0
    def pay(self, orderID, authorizationID, order):
        orderTotal = order.get_total()
        payPalOrder = OrdersGetRequest(orderID)

        responseOrderDetails = self.client.execute(payPalOrder)
        if ((float(responseOrderDetails.result.purchase_units[0].amount.value)
             == orderTotal) &
            (responseOrderDetails.result.purchase_units[0].amount.currency_code
             == "USD")):
            payPalCaptureRequest = AuthorizationsCaptureRequest(
                authorizationID)
            responsePayPalCapture = self.client.execute(payPalCaptureRequest)
            status = responsePayPalCapture.status_code
            if (status == 200) | (status == 201):
                dabaBundle = {'status': 'Nice'}
                order.ordered = True
                try:
                    user_profile = UserProfile.objects.create(
                        user=order.user,
                        email=responseOrderDetails.result.payer.email_address,
                        provincia=responseOrderDetails.result.
                        purchase_units[0].shipping.address.admin_area_1,
                        canton=responseOrderDetails.result.purchase_units[0].
                        shipping.address.admin_area_2,
                        address=responseOrderDetails.result.purchase_units[0].
                        shipping.address.address_line_1,
                        distrito=responseOrderDetails.result.purchase_units[0].
                        shipping.address.address_line_2)
                except AttributeError:
                    user_profile = UserProfile.objects.create(
                        user=order.user,
                        email=responseOrderDetails.result.payer.email_address,
                        provincia=responseOrderDetails.result.
                        purchase_units[0].shipping.address.admin_area_1,
                        canton=responseOrderDetails.result.purchase_units[0].
                        shipping.address.admin_area_2,
                        address=responseOrderDetails.result.purchase_units[0].
                        shipping.address.address_line_1)

                order.user_profile = user_profile
                order.save()

                return JsonResponse({
                    "scc": "true",
                    "dataBundle": dabaBundle
                },
                                    status=200)
            else:
                dabaBundle = {'status': 'PaypalCaptureError'}
                return JsonResponse({
                    "scc": "false",
                    "dataBundle": dabaBundle
                },
                                    status=400)
        else:
            voidRequest = AuthorizationsVoidRequest(authorizationID)
            responsePayPalVoid = self.client.execute(voidRequest)
            dabaBundle = {'status': 'AttemptedFraud'}
            return JsonResponse({
                "scc": "false",
                "dataBundle": dabaBundle
            },
                                status=400)