public IHttpActionResult transactionAdd([FromBody] ClsRequestTransaction body)
        {
            try
            {
                CFungsi fungsi = new CFungsi();

                /*
                 * {"token":"d0bdc5221da9ba6305a1e2c685c2f8bb0444d3db","created":"2019-09-26T15:11:11+07","user":"******",
                 * "store":"TB77","number_of_people":1,"invoice_number":"NTDL00UT10068701TB77190926104000000015",
                 * "stamps":3,"total_value":60000.0,
                 * "items":[{"product_name":"20072105","quantity":5,"price":20000.0}],"extra_data":[{"promo":"NTDL00UT"}]}
                 * */
                ClsResponseTransaction response = new ClsResponseTransaction();                //response ke merchant
                string bodyJson = JsonConvert.SerializeObject(body);
                fungsi.tracelog("TRANSACTION ADD MASUK : " + bodyJson);



                List <ReqCore_earning> earningCoreList = new List <ReqCore_earning>();              //request ke core

                // isi data earningCore
                ReqCore_earning earning = new ReqCore_earning();
                earning.add_time       = DateTime.Now;
                earning.card_num       = body.user;
                earning.invoice_number = body.invoice_number;
                earning.id_bucket      = body.token;      //token yang digunakan di stamps sekarang diisikan ke idbucket untuk nanti dikonversi jadi bucket
                earning.id_merchant    = "3";             //pantek ID MERCHANT SELALU 3 (INDOMARET) di core

                earning.id_toko     = body.store;
                earning.kode_cabang = body.store;
                earning.kode_promo  = body.extra_data[0].promo;
                earning.point       = body.stamps;
                earning.total_value = (int)body.total_value;

                for (int i = 0; i < body.items.Length; i++)
                {
                    cItem item = new cItem();
                    item.price        = body.items[i].price;
                    item.product_name = body.items[i].product_name;
                    item.quantity     = body.items[i].quantity;
                    earning.items.Add(item);
                }

                earningCoreList.Add(earning);
                string jsonRequest = JsonConvert.SerializeObject(earningCoreList);

                MyPoinCore.service2 service = new MyPoinCore.service2();
                fungsi.tracelog("TRANSACTION ADD REQUEST CORE " + service.Url + " --> " + jsonRequest);
                string[] JsonResponse = service.earning_point(jsonRequest);
                fungsi.tracelog("TRANSACTION ADD RESPONSE CORE : " + JsonResponse[0] + "//" + JsonResponse[1] + "//" + JsonResponse[2]);

                if (JsonResponse[0] == "0")                //balikan dari core sukses
                {
                    //response dari core
                    List <RespCore_earning> RespEarningCore = new List <RespCore_earning>();
                    RespEarningCore                = JsonConvert.DeserializeObject <List <RespCore_earning> >(JsonResponse[1]);
                    response.customer.balance      = RespEarningCore[0].customer.balance;
                    response.customer.id           = 1;          // RespEarningCore[0].customer.card_num;
                    response.customer.mobile_phone = RespEarningCore[0].customer.mobile_phone;
                    if (RespEarningCore[0].customer.stamps_remaining == 0)
                    {
                        response.customer.stamps_remaining = RespEarningCore[0].customer.point_remaining;
                    }
                    else
                    {
                        response.customer.stamps_remaining = RespEarningCore[0].customer.stamps_remaining;
                    }

                    response.customer.status = RespEarningCore[0].customer.status.ToString();

                    response.transaction.id = 1;                    //RespEarningCore[0].transaction.invoice_number;

                    if (RespEarningCore[0].transaction.stamps_earned == 0)
                    {
                        response.transaction.stamps_earned = RespEarningCore[0].transaction.point_earned;
                    }
                    else
                    {
                        response.transaction.stamps_earned = RespEarningCore[0].transaction.stamps_earned;
                    }
                    response.transaction.value = RespEarningCore[0].transaction.total_value;


                    string returnResponse = JsonConvert.SerializeObject(response);
                    fungsi.tracelog("TRANSACTION ADD RETURN " + returnResponse);
                    return(Json(response));
                }
                else
                {
                    fungsi.tracelog("TRANSACTION ADD RETURN " + JsonResponse[1]);

                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, JsonResponse[1])));
                    //kalo balikan dari core error
                }
            }
            catch (Exception ex)
            {
                CFungsi fungsi = new CFungsi();
                fungsi.tracelog("error at transaction add " + ex.Message + " -- " + ex.StackTrace);
                return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message)));
            }
        }