Package Tracking

Server-side configurationanchor

  1. Place transaction
  1. Ruby
result = gateway.transaction.sale(
          amount: "10.00",
          payment_method_nonce: params[:payment_method_nonce],
          device_data: params[:device_data],
          order_id: "Mapped to PayPal Invoice Number",
          options: { 
            submit_for_settlement: true,
            paypal: {
              custom_field: "PayPal custom field",
              description: "Description for PayPal email receipt",
            },
          },
          line_items: [{
            quantity: 1,
            name: "name",
            kind: "debit",
            unit_amount: "10.00",
            total_amount: "10.00",
            upc_code: "01234567891", # new field
            upc_type: "UPC-A", # new field
            url: "https://example.com", # new field
            image_url: "https://example.com/product1.jpeg" # new field
          }]
        )

        if result.success?
          # Assuming you have a method to create tracking for the transaction
          create_tracking(result.transaction.id)
          "Success ID: #{result.transaction.id}"
        else
          result.message
        end

        # Method to create tracking for the transaction
        def create_tracking(transaction_id)
          # Your implementation here
        end
  1. Create tracking for transaction after submitting for settlement:
  1. Ruby
# Send the package tracking request for the transaction
        packageResult = Braintree::Transaction.package_tracking(
          transactionId,
          # Create a Package Tracking request with optional line items
          {
            carrier: "UPS",
            notify_payer: true,
            tracking_number: "tracking_number_1",
            line_items: [
              # Optionally create line items
              {
                product_code: "ABC 01",
                name: "Product Name",
                quantity: "1",
                description: "Product Description",
                upc_code: "01234567891", # new field
                upc_type: "UPC-A", # new field
                url: "https://example.com", # new field
                image_url: "https://example.com/product1.jpeg", # new field
              },
              {
                product_code: "ABC 01",
                name: "Product Name",
                quantity: "1",
                description: "Product Description",
              },
            ],
          }
        )

        packages = packageResult.transaction.packages
        id = packages[0].id
        tracking_number = packages[0].tracking_number
        carrier = packages[0].carrier

        # The PayPal tracker ID will not be immediately available in response to
        # package_tracking(). But it should be there when the merchant does a findTransaction
        # request at a later stage.
  1. Retrieve transactions with package trackers:
  1. Ruby
# Get more details of the individual packages like so,         # replace 0 with the element index :

        transaction = Braintree::Transaction.find(transactionId)
        id = transaction.packages[0].id;
        tracking_number = transaction.packages[0].tracking_number;
        carrier = transaction.packages[0].carrier;
        paypal_tracker_id = transaction.packages[0].paypal_tracker_id;

        # The PayPal tracker ID will not be immediately available in response to         # package_tracking(). But should be there when merchant does a findTransaction         # request at a later stage.