public GatewayOrderInfoOM PrePay(string code, UserAccount account) { var codeEntity = QRCode.Deserialize(code); if (codeEntity.SystemPlatform != SystemPlatform.Gateway || codeEntity.QrCodeEnum != QRCodeEnum.GateWayPay) { throw new CommonException(ReasonCode.INVALID_QRCODE, MessageResources.InvalidQRCode); } var orderDetail = GetGatewayOrderDetail(codeEntity.QRCodeKey); if (orderDetail == null) { throw new CommonException(ReasonCode.INVALID_QRCODE, MessageResources.InvalidQRCode); } var cryptoCurrency = new CryptocurrencyDAC().GetByCode(orderDetail.Crypto); if (cryptoCurrency == null || cryptoCurrency?.Id == null) { throw new CommonException(ReasonCode.CRYPTO_NOT_EXISTS, "Error: Invalid Cryptocurrency"); } var goDAC = new GatewayOrderDAC(); var gatewayOrder = goDAC.GetByTradeNo(orderDetail.Id.ToString()); if (gatewayOrder != null) { if (gatewayOrder.Status != GatewayOrderStatus.Pending) { throw new CommonException(ReasonCode.ORDER_HAD_COMPLETE, MessageResources.OrderComplated); } } else { gatewayOrder = new GatewayOrder() { OrderNo = IdentityHelper.OrderNo(), TradeNo = orderDetail.Id.ToString(), Id = Guid.NewGuid(), CryptoId = cryptoCurrency.Id, MerchantAccountId = orderDetail.MerchantAccountId, FiatAmount = orderDetail.FiatAmount, MerchantName = orderDetail.MerchantName, UserAccountId = account.Id, CryptoAmount = orderDetail.CryptoAmount, ActualCryptoAmount = orderDetail.ActualCryptoAmount, FiatCurrency = orderDetail.FiatCurrency, Markup = orderDetail.MarkupRate, ActualFiatAmount = orderDetail.ActualFiatAmount, Status = GatewayOrderStatus.Pending, ExchangeRate = orderDetail.ExchangeRate, ExpiredTime = orderDetail.ExpiredTime, TransactionFee = orderDetail.TransactionFee, Timestamp = DateTime.UtcNow, Remark = orderDetail.Remark }; goDAC.Insert(gatewayOrder); } return(new GatewayOrderInfoOM() { Timestamp = DateTime.UtcNow.ToUnixTime().ToString(), OrderId = gatewayOrder.Id, MerchantName = gatewayOrder.MerchantName, CryptoCode = cryptoCurrency.Code, ActurlCryptoAmount = gatewayOrder.ActualCryptoAmount }); }