         )
       )
     ],
-      
+
       ((err, results) =>
-        return @sendDatabaseError(res, err) if err 
+        return @sendDatabaseError(res, err) if err
         [payment, charge] = results
-  
+
         if not (payment or charge)
           # Proceed normally from the beginning
           @chargeStripe(req, res, payment, product)
-            
+
         else if charge and not payment
           # Initialized Payment. Start from charging.
           @recordStripeCharge(req, res, payment, product, charge)
-  
+
         else
           # Charged Stripe and recorded it. Recalculate gems to make sure credited the purchase.
           @recalculateGemsFor(req.user, (err) =>
               return @sendDatabaseError(res, err) if err
+              @sendPaymentHipChatMessage user: req.user, payment: payment
               @sendSuccess(res, @formatEntity(req, payment))
           )
       )
     )
 
-    
+
   chargeStripe: (req, res, payment, product) ->
     stripe.charges.create({
       amount: product.amount

        (err) =>
          return @sendDatabaseError(res, err)
      )
    
    else
      @beginStripePayment(req, res, timestamp, productID)
      

  beginStripePayment: (req, res, timestamp, productID) ->
    product = products[productID]

    }).then(
      # success case
      ((charge) => @recordStripeCharge(req, res, payment, product, charge)),

      # error case
      ((err) =>
        if err.type in ['StripeCardError', 'StripeInvalidRequestError']
