Package Tracking

Server-side configuration

Important
Your integration may be impacted by upcoming certificate changes. Visit our best practices guide to learn more.

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

2. 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.

3. 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.

If you accept cookies, we’ll use them to improve and customize your experience and enable our partners to show you personalized PayPal ads when you visit other sites. Manage cookies and learn more