     
 }
 
+// MARK: - PurchaseTracking
+
+extension mParticle: PurchaseTracking {
+
+    /// Tracks a purchase event.
+    ///
+    /// - parameter products:        The products.
+    /// - parameter eventProperties: The event properties.
+    ///
+    /// - returns: A tracking result.
+    public func trackPurchaseEvent<T : SimcoeProductConvertible>(products: [T], eventProperties: Properties?) -> TrackingResult {
+        let mPProducts = products.map { MPProduct(product: $0) }
+        let event = MPCommerceEvent(eventType: .Purchase,
+                                    products: mPProducts,
+                                    eventProperties: eventProperties)
+
+        MParticle.sharedInstance().logCommerceEvent(event)
+
+        return .Success
+    }
+    
+}
+
 // MARK: - UserAttributeTracking
 
 extension mParticle: UserAttributeTracking {


        let event: MPEvent
        do {
            event = try toEvent(usingData: eventProperties)
        } catch let error as MPEventGenerationError {
            return .Error(message: error.description)
        } catch {


        let event: MPEvent
        do {
            event = try MPEvent.toEvent(usingData: properties)
        } catch let error as MPEventGenerationError {
            return .Error(message: error.description)
        } catch {
