Ejemplo n.º 1
0
        private static Order CreateOrder()
        {
            var p1 = new Product {
                Id = 1, Description = "p1", Price = 9
            };
            var p2 = new Product {
                Id = 2, Description = "p2", Price = 6
            };

            var order = new VipOrder
            {
                Id          = 4,
                Description = "Order for John Doe",
                OrderLines  = new List <OrderLine>
                {
                    new OrderLine {
                        Id = 5, Amount = 1, Product = p1
                    },
                    new OrderLine {
                        Id = 6, Amount = 10, Product = p2
                    }
                }
            };

            return(order);
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            Order                order      = new Order();
            VipOrder             vipOrder   = new VipOrder();
            IDistribute <IOrder> distribute = new OrderDistribute();

            distribute.DistributeOrder(order);
            distribute.DistributeOrder(vipOrder);
            distribute.DistributeVipOrder(vipOrder);
            Console.ReadKey();
        }
Ejemplo n.º 3
0
        public IHttpActionResult SpgatewayNotify()
        {
            // 取法同SpgatewayResult
            var httpRequestBase = new HttpRequestWrapper(HttpContext.Current.Request);

            RazorExtensions.LogFormData(httpRequestBase, "SpgatewayNotify(支付完成)");
            // Status 回傳狀態
            // MerchantID 回傳訊息
            // TradeInfo 交易資料AES 加密
            // TradeSha 交易資料SHA256 加密
            // Version 串接程式版本
            NameValueCollection collection = HttpContext.Current.Request.Form;

            if (collection["MerchantID"] != null && string.Equals(collection["MerchantID"], _bankInfoModel.MerchantID) &&
                collection["TradeInfo"] != null && string.Equals(collection["TradeSha"], CryptoUtil.EncryptSHA256($"HashKey={_bankInfoModel.HashKey}&{collection["TradeInfo"]}&HashIV={_bankInfoModel.HashIV}")))
            {
                var decryptTradeInfo = CryptoUtil.DecryptAESHex(collection["TradeInfo"], _bankInfoModel.HashKey, _bankInfoModel.HashIV);

                // 取得回傳參數(ex:key1=value1&key2=value2),儲存為NameValueCollection
                NameValueCollection      decryptTradeCollection = HttpUtility.ParseQueryString(decryptTradeInfo);
                SpgatewayOutputDataModel convertModel           = LambdaUtil.DictionaryToObject <SpgatewayOutputDataModel>(decryptTradeCollection.AllKeys.ToDictionary(k => k, k => decryptTradeCollection[k]));

                //LogUtil.WriteLog(JsonConvert.SerializeObject(convertModel));

                // TODO 將回傳訊息寫入資料庫

                VipOrder pay = db.VipOrders.Find(Convert.ToInt32(convertModel.MerchantOrderNo));
                pay.Message = convertModel.Message;
                pay.Status  = convertModel.Status;
                db.VipOrders.Add(pay);
                // return Content(JsonConvert.SerializeObject(convertModel));

                if (pay.Status == "SUCCESS")
                {
                    //MerchantOrderNo = "O202009100034"
                    //convertModel.MerchantOrderNo
                    VipOrder vip = db.VipOrders.Find(pay.BrandId);
                    vip.Status = "已付款成功";

                    db.Entry(vip).State = EntityState.Modified;
                    db.SaveChanges();
                }
                else//付款失敗
                {
                }
                return(Ok());
            }
            else
            {
                //LogUtil.WriteLog("MerchantID/TradeSha驗證錯誤");
            }

            return(Ok());
        }
Ejemplo n.º 4
0
        static void Main(string[] args)
        {
            Order order = new Order();

            // 把Order类型转换成VipOrder
            // 1.未使用扩展方法
            VipOrder vipOrder = OrderHelper.ConvertToVipOrder(order);

            // 2.使用扩展方法
            VipOrder vipOrder2 = order.ConvertToVipOrder();
        }
Ejemplo n.º 5
0
        public void Order_MergeOrders_ThrowException()
        {
            // arrange
            MergeOrders <Order>   merge = new MergeOrders <Order>();
            OperationNormalPrices operationNoormalPrices = new OperationNormalPrices();
            VipOrder order1 = new VipOrder(operationNoormalPrices)
            {
            };
            VipOrder order2 = new VipOrder(operationNoormalPrices)
            {
            };

            // act

            IMergeOrderList <VipOrder> result  = merge.MergeNormal(order1, order2);
            IMergeOrderList <VipOrder> result2 = merge.MergeNormal <VipOrder>(order1, order2);

            // assert
            Assert.True(result.GetType().Name == typeof(MergeOrderList <VipOrder>).Name);
        }
Ejemplo n.º 6
0
        public IHttpActionResult SpgatewayPayBill(VipOrder vipOrder)
        {
            //var PayVip = db.VipOrders.Find(vipOrder.BrandId);
            //if (PayVip == null)
            //{
            //    return NotFound();
            //}

            string      token       = Request.Headers.Authorization.Parameter;
            JwtAuthUtil jwtAuthUtil = new JwtAuthUtil();
            int         id          = Convert.ToInt32(jwtAuthUtil.GetId(token));

            // var payBrand = db.Brands.Where(b => b.Id == id);
            vipOrder.BrandId = id;
            db.VipOrders.Add(new VipOrder
            {
                BrandId = id,
            });

            db.SaveChanges();

            string version = "1.5";

            // 目前時間轉換 +08:00, 防止傳入時間或Server時間時區不同造成錯誤
            DateTimeOffset taipeiStandardTimeOffset = DateTimeOffset.Now.ToOffset(new TimeSpan(8, 0, 0));

            TradeInfo tradeInfo = new TradeInfo()
            {
                // * 商店代號
                MerchantID = _bankInfoModel.MerchantID,
                // * 回傳格式
                RespondType = "String",
                // * TimeStamp
                TimeStamp = taipeiStandardTimeOffset.ToUnixTimeSeconds().ToString(),
                // * 串接程式版本
                Version = version,
                // * 商店訂單編號
                //MerchantOrderNo = $"T{DateTime.Now.ToString("yyyyMMddHHmm")}",
                MerchantOrderNo = vipOrder.BrandId.ToString(),
                // * 訂單金額
                Amt = 1200,
                // * 商品資訊
                ItemDesc = "數據分析功能" + vipOrder.BrandId.ToString(),
                // 繳費有效期限(適用於非即時交易)
                ExpireDate = null,
                // 支付完成 返回商店網址
                ReturnURL = _bankInfoModel.ReturnURL,
                // 支付通知網址
                NotifyURL = _bankInfoModel.NotifyURL,
                // 商店取號網址
                CustomerURL = _bankInfoModel.CustomerURL,
                // 支付取消 返回商店網址
                ClientBackURL = null,
                // * 付款人電子信箱
                Email = string.Empty,
                // 付款人電子信箱 是否開放修改(1=可修改 0=不可修改)
                EmailModify = 0,
                // 商店備註
                OrderComment = null,
                // 信用卡 一次付清啟用(1=啟用、0或者未有此參數=不啟用)
                CREDIT = null,
                // WEBATM啟用(1=啟用、0或者未有此參數,即代表不開啟)
                WEBATM = null,
                // ATM 轉帳啟用(1=啟用、0或者未有此參數,即代表不開啟)
                VACC = null,
                // 超商代碼繳費啟用(1=啟用、0或者未有此參數,即代表不開啟)(當該筆訂單金額小於 30 元或超過 2 萬元時,即使此參數設定為啟用,MPG 付款頁面仍不會顯示此支付方式選項。)
                CVS = null,
                // 超商條碼繳費啟用(1=啟用、0或者未有此參數,即代表不開啟)(當該筆訂單金額小於 20 元或超過 4 萬元時,即使此參數設定為啟用,MPG 付款頁面仍不會顯示此支付方式選項。)
                BARCODE = null
            };

            //暫定都信用卡
            tradeInfo.CREDIT = 1;
            //if (string.Equals(payType, "CREDIT"))
            //{
            //    tradeInfo.CREDIT = 1;
            //}
            //else if (string.Equals(payType, "WEBATM"))
            //{
            //    tradeInfo.WEBATM = 1;
            //}
            //else if (string.Equals(payType, "VACC"))
            //{
            //    // 設定繳費截止日期
            //    tradeInfo.ExpireDate = taipeiStandardTimeOffset.AddDays(1).ToString("yyyyMMdd");
            //    tradeInfo.VACC = 1;
            //}
            //else if (string.Equals(payType, "CVS"))
            //{
            //    // 設定繳費截止日期
            //    tradeInfo.ExpireDate = taipeiStandardTimeOffset.AddDays(1).ToString("yyyyMMdd");
            //    tradeInfo.CVS = 1;
            //}
            //else if (string.Equals(payType, "BARCODE"))
            //{
            //    // 設定繳費截止日期
            //    tradeInfo.ExpireDate = taipeiStandardTimeOffset.AddDays(1).ToString("yyyyMMdd");
            //    tradeInfo.BARCODE = 1;
            //}

            Atom <string> result = new Atom <string>()
            {
                IsSuccess = true
            };

            var inputModel = new SpgatewayInputModel
            {
                MerchantID = _bankInfoModel.MerchantID,
                Version    = version
            };

            // 將model 轉換為List<KeyValuePair<string, string>>, null值不轉
            List <KeyValuePair <string, string> > tradeData = LambdaUtil.ModelToKeyValuePairList <TradeInfo>(tradeInfo);
            // 將List<KeyValuePair<string, string>> 轉換為 key1=Value1&key2=Value2&key3=Value3...
            var tradeQueryPara = string.Join("&", tradeData.Select(x => $"{x.Key}={x.Value}"));

            // AES 加密
            inputModel.TradeInfo =
                CryptoUtil.EncryptAESHex(tradeQueryPara, _bankInfoModel.HashKey, _bankInfoModel.HashIV);
            // SHA256 加密
            inputModel.TradeSha =
                CryptoUtil.EncryptSHA256(
                    $"HashKey={_bankInfoModel.HashKey}&{inputModel.TradeInfo}&HashIV={_bankInfoModel.HashIV}");

            // 將model 轉換為List<KeyValuePair<string, string>>, null值不轉
            List <KeyValuePair <string, string> > postData =
                LambdaUtil.ModelToKeyValuePairList <SpgatewayInputModel>(inputModel);



            return(Ok(postData));
        }