public static function buyProduct($user, $product, $requestId, $paymentId, $signedReq, $status, $currency, $amount, $quantity, $type, $time)
 {
     if (empty($time)) {
         $time = time();
     }
     $result = new FunctionResult();
     $result->success = false;
     if (!empty($user)) {
         if (!empty($product)) {
             if ($status == "completed") {
                 Queue::addUserCoinLog($user->userId, $product->coinCount, $product->coinCount, $time, GameUserXpLog::$CONSTANT_LOG_TYPE_BUY_PRODUCT, 1, null, $requestId . "_" . $product->id . "_" . $product->fbId . "_" . $product->coinCount . "_" . $product->coinCount, null);
                 Queue::addUserLeaderBoard($user->userId, $product->coinCount, $time);
                 $coin = $user->coins + $product->coinCount * $quantity;
                 $user->setCoins($coin);
                 $user->updateToDatabase(DBUtils::getConnection());
             }
             //if product campaign
             if ($product->type == GameFbProducts::$TYPE_CAMPAIGN && !empty($product->products)) {
                 try {
                     $products = json_decode($product->products);
                     if (!empty($products)) {
                         foreach ($products as $pro) {
                             if (!empty($pro) && !empty($pro->itemId)) {
                                 ItemUtils::buyCampaignItem($user, $pro->itemId, $pro->count, $time);
                             }
                         }
                     }
                 } catch (Exception $exc) {
                     error_log($exc->getMessage());
                     error_log($exc->getTraceAsString());
                 }
             }
             //if product campaign
             $userProductLog = new GameUserFbProductLog();
             $userProductLog->setAmount($amount);
             $userProductLog->setCoinCount($product->coinCount);
             $userProductLog->setCurrency($currency);
             $userProductLog->setPaymentId($paymentId);
             $userProductLog->setProdudctId($product->id);
             $userProductLog->setQuantity($quantity);
             $userProductLog->setRequestId($requestId);
             $userProductLog->setSignedReq($signedReq);
             $userProductLog->setStatus($status);
             $userProductLog->setTime($time);
             $userProductLog->setType($type);
             $userProductLog->setUserId($user->userId);
             $userProductLog->setUserLevel($user->userLevelNumber);
             $userProductLog->setUserCoin($user->coins);
             try {
                 $userProductLog->insertIntoDatabase(DBUtils::getConnection());
             } catch (Exception $exc) {
                 error_log($exc->getMessage());
                 error_log($exc->getTraceAsString());
             }
             $result->success = true;
             $result->data = new stdClass();
             $result->data->user = $user;
             return $result;
         } else {
             $result->result = LanguageUtils::getText("LANG_API_TO_ITEM_EMPTY");
             return $result;
         }
     } else {
         $result->result = LanguageUtils::getText("LANG_API_USER_EMPTY");
         return $result;
     }
 }