public void OnPurchaseClicked(string productId, PayInfoModel infoModel, LuaFunction Success,
                               LuaFunction failure)
 {
     this.infoModel = infoModel;
     this.mSuccess  = Success;
     this.mfailure  = failure;
     controller.InitiatePurchase(productId);
 }
Exemple #2
0
    public void Pay(string productId,
                    string token        = "",
                    string PayTypes     = "",
                    LuaFunction Success = null,
                    LuaFunction failure = null)
    {
        PayInfoModel infoModel = new PayInfoModel();

        infoModel.token = token;
#if UNITY_EDITOR
        infoModel.osType = (int)PayTypePlatformType.ios + "";
        // Debug.Log("支付请在手机上运行");
        // return;
#elif UNITY_IPHONE
        infoModel.osType = (int)PayTypePlatformType.ios + "";
#elif UNITY_ANDROID
        infoModel.osType = (int)PayTypePlatformType.android + "";
#endif

        infoModel.payType = PayTypes;

        infoModel.productId = productId;

        mSuccess = Success;
        mfailure = failure;
        if (infoModel == null)
        {
            Debug.Log("付款信息对象不能为空");
            return;
        }
        Debug.Log("C#中执行pay =" + infoModel.osType);
        if (infoModel.osType == (int)PayTypePlatformType.android + "")
        {
            //平台支付

            if (PayfromInt(infoModel.payType) == PayType.Wechat)
            {
                //微信支付
                //androind  微信支付
                WeChatPay(infoModel);
            }
            else if (PayfromInt(infoModel.payType) == PayType.AliPay)
            {
                //支付宝
                Alipay(infoModel);
            }
        }
        else
        {
            Debug.Log("C#中执行pay2");
            //ios 内购
            iosPurcjase.OnPurchaseClicked(infoModel.productId, infoModel, mSuccess, mfailure);
        }
    }
Exemple #3
0
    //支付宝支付
    private void Alipay(PayInfoModel infoModel)
    {
        WWWForm form = new WWWForm();

        form.AddField("token", infoModel.token);
        form.AddField("productId", infoModel.productId);
        form.AddField("osType", infoModel.osType);
        form.AddField("Com_Ver", 1);
        form.AddField("Com_GamePt", 1);

        StartCoroutine(SendPostALiPay(URL_Domain + ZfbRecharge, form));
    }
Exemple #4
0
    //微信支付
    private void WeChatPay(PayInfoModel infoModel)
    {
        WWWForm form = new WWWForm();

        form.AddField("token", infoModel.token);
        form.AddField("productId", infoModel.productId);
        form.AddField("osType", infoModel.osType);
        Debug.Log("商品信息 请求发起 :");

        form.AddField("Com_Ver", 1);
        form.AddField("Com_GamePt", 1);

        StartCoroutine(SendPostWeChatPay(URL_Domain + WXRecharge, form));
    }
Exemple #5
0
        public async Task <OutputModel <PayRequestResponseModel> > RequestPay(PayInfoModel model)
        {
            if (_token == null || _tokenExpiration < DateTime.Now)
            {
                await FillToken();
            }
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(_baseUrl);
                client.DefaultRequestHeaders
                .Accept
                .Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _token);

                string serializedModel = JsonConvert.SerializeObject(model);
                var    content         = new StringContent(serializedModel,
                                                           Encoding.UTF8,
                                                           "application/json");

                var response = await client.PostAsync("/api/PayInfo/RequestPay", content);

                if (response.IsSuccessStatusCode)
                {
                    var res = await response.Content.ReadAsStringAsync();

                    var resModel = JsonConvert.DeserializeObject <PayRequestResponseModel>(res);
                    return(new OutputModel <PayRequestResponseModel>
                    {
                        Body = resModel,
                        Status = Enum.ApiStatusCodeEnum.Success
                    });
                }
                else if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized)
                {
                    return(new OutputModel <PayRequestResponseModel>
                    {
                        Status = Enum.ApiStatusCodeEnum.InvalidPublicKey
                    });
                }
                else
                {
                    return(new OutputModel <PayRequestResponseModel>
                    {
                        Status = Enum.ApiStatusCodeEnum.BadRequest
                    });
                }
            }
        }
Exemple #6
0
        public void Update(PayInfoModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }
            using (var db = new BaseDatabaseContext())
            {
                var oldEntity = db.PayInfos.Find(model.Id);

                if (oldEntity == null)
                {
                    throw new Exception("oldEntity is null");
                }
                oldEntity = model.ToEntity(db.PayInfos.Find(model.Id));
                db.SaveChanges();
            }
        }
        public async Task <IActionResult> GotoBankPage(int id)
        {
            var currentBaseUrl = string.Format("{0}://{1}", Request.Scheme, Request.Host);
            var model          = new PayInfoModel
            {
                Amount      = 1000,
                BankCode    = (BankCodeEnum)id,
                CallbackUrl = currentBaseUrl + "/Home/Callback",
                Mobile      = 989354762696,
                PriceUnit   = PriceUnitEnum.Rial,
                TrackCode   = DateTime.Now.ToString("hhmmssfff")
            };
            var response = await client.RequestPay(model);

            if (response.Status == ApiStatusCodeEnum.Success)
            {
                return(Redirect(response.Body.Url));
            }
            throw new Exception(response.Status + ":" + response.Body);
        }
Exemple #8
0
        public async Task <IActionResult> RequestPay([FromBody] PayInfoModel model)
        {
            try
            {
                var application = await GetApplicationAsync();

                if (application == null || application.Status != 0)
                {
                    return(Unauthorized());
                }
                switch (model.PriceUnit)
                {
                case PriceUnitEnum.Toman:
                    model.Amount *= 10;
                    break;

                case PriceUnitEnum.Dollar:
                    throw new NotImplementedException("Dollar not supported yet");
                }

                var bank = await _bankRepository.GetFirstBy(x => x.Code == (byte)model.BankCode);

                var transaction = new Transaction
                {
                    Amount         = model.Amount,
                    ApplicationId  = application.Id,
                    BankId         = bank.Id,
                    CreatedBy      = 1,
                    Mobile         = model.Mobile,
                    UserTrackCode  = model.TrackCode,
                    CreationDate   = DateTime.Now,
                    Status         = (byte)TransactionStatusEnum.Initial,
                    CallbackUrl    = model.CallbackUrl,
                    ExpirationTime = model.ExpirationTime
                };
                await _transactionRepository.Add(transaction);

                var currentBaseUrl = $"{Request.Scheme}://{Request.Host}";

                switch (model.BankCode)
                {
                case BankCodeEnum.Parsian:
                    transaction.BankRedirectUrl = $"{currentBaseUrl}/Parsian/Callback?token={model.TrackCode}&SecondTrackCode={transaction.Id}";
                    break;

                case BankCodeEnum.Mellat:
                    transaction.BankRedirectUrl = $"{currentBaseUrl}/Mellat/Callback?token={model.TrackCode}&SecondTrackCode={transaction.Id}";
                    break;

                case BankCodeEnum.Efarda:
                    transaction.BankRedirectUrl = $"{currentBaseUrl}/Efarda/Callback?token={model.TrackCode}&SecondTrackCode={transaction.Id}";
                    break;

                case BankCodeEnum.Pasargad:
                    transaction.BankRedirectUrl = $"{currentBaseUrl}/Pasargad/Callback?token={model.TrackCode}&SecondTrackCode={transaction.Id}";
                    break;

                case BankCodeEnum.Saman:
                default:
                    transaction.BankRedirectUrl = $"{currentBaseUrl}/Saman/Callback?token={model.TrackCode}&SecondTrackCode={transaction.Id}";
                    break;
                }

                await _transactionRepository.Update(transaction);

                return(Ok(
                           new PayRequestResponseModel
                {
                    Code = transaction.Id,
                    Url = currentBaseUrl + "/Pay/" + transaction.Id
                }));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                if (ex.InnerException != null)
                {
                    _logger.LogError(ex.InnerException.Message);
                }
                throw;
            }
        }
 public static PayInfo ToEntity(this PayInfoModel model, PayInfo destination)
 {
     return(model.MapTo(destination));
 }
 public static PayInfo ToEntity(this PayInfoModel model)
 {
     return(model.MapTo <PayInfoModel, PayInfo>());
 }
Exemple #11
0
        public APIResult BeginRechange([FromBody] BeginRechangeArgsModel args)
        {
            //if (args.TotalFee <= 0) throw new Exception("充值金额需要大于0");
            if (args.ShopFlag == null)
            {
                throw new ArgumentNullException("ShopFlag");
            }
            if (!args.ConglomerationOrderId.HasValue)
            {
                throw new ArgumentNullException("ConglomerationOrderId");
            }
            var memberId = GetMemberId();
            ConglomerationOrder conglomerationOrder = shopDb.GetSingle <ConglomerationOrder>(args.ConglomerationOrderId.Value);

            if (conglomerationOrder == null)
            {
                throw new Exception("订单不存在");
            }
            ShopPayInfo shopPayInfo = shopDb.Query <ShopPayInfo>()
                                      .Where(m => !m.IsDel)
                                      .Where(m => m.ShopFlag == args.ShopFlag)
                                      .Where(m => m.ShopFlag == args.ShopFlag && m.IsEnable)
                                      .FirstOrDefault();

            if (shopPayInfo == null)
            {
                throw new Exception("当前商铺没有设置好支付信息。");
            }
            if (shopPayInfo.PayWay == PayWay.Wechat)
            {
                throw new Exception("拼团功能暂不支持,请联系商户修改支付模式");
            }
            PayProxyBase payProxy  = proxyFactory.GetProxy(shopPayInfo);
            var          tradeNo   = "SP" + DateTime.Now.Ticks + CommonUtil.CreateNoncestr(5);
            var          tradeDate = DateTime.Now.ToString("yyyyMMddHHmmss");
            var          model     = new MemberTradeForRechange()
            {
                AddIP                 = GetIp(),
                AddTime               = DateTime.Now,
                AddUser               = GetUsername(),
                MemberId              = memberId,
                Detail                = "拼团订单支付" + conglomerationOrder.Payment.Value + "分",
                OutBank               = "",
                PayChannel            = payProxy.PayChannel,
                Status                = MemberTradeForRechangeStatus.未完成,
                TimeExpire            = DateTime.Now,
                TimeStart             = DateTime.Now,
                Title                 = "拼团订单支付",
                TotalFee              = conglomerationOrder.Payment.Value,
                ConglomerationOrderId = args.ConglomerationOrderId.Value,
                MoneyOffRuleId        = 0,
                TradeNo               = tradeNo,
                OrderType             = OrderType.拼团订单,
                OrderId               = args.ConglomerationOrderId.Value,
                ShopOrderId           = 0,
                PayWay                = (int)shopPayInfo.PayWay,
                ShopId                = shopPayInfo.ShopId
            };

            db.AddToMemberTradeForRechange(model);
            var openId  = GetOpenId();
            var payInfo = payProxy.GetPayInfo(model, openId);

            db.SaveChanges();
            if (shopPayInfo.PayWay == PayWay.Wechat)
            {
                new PayOrRefundUtil <object>(LogDbContext).PayAction("Pay"
                                                                     , BLL.Log.PayOrRefundType.支付, args.ConglomerationOrderId.Value, OrderType.拼团订单, model, payInfo);
                return(Success(new
                {
                    payInfo,
                    TradeNo = tradeNo
                }));
            }
            else
            {
                PayInfoModel infoModel = new PayInfoModel();
                var          payinfo   = JsonConvert.DeserializeObject <PayInfo>(payInfo.ToString());
                infoModel.payInfo = payinfo;
                new PayOrRefundUtil <object>(LogDbContext).PayAction("Pay"
                                                                     , BLL.Log.PayOrRefundType.支付, args.ConglomerationOrderId.Value, OrderType.拼团订单, model, payInfo);
                return(Success(
                           infoModel
                           ));
            }
        }
        public async Task <IActionResult> RequestPay([FromBody] PayInfoModel model)
        {
            try
            {
                var application = await GetApplicationAsync();

                if (application == null || application.Status != 0)
                {
                    return(Unauthorized());
                }
                if (model.PriceUnit == PriceUnitEnum.Toman)
                {
                    model.Amount = model.Amount * 10;
                }
                if (model.PriceUnit == PriceUnitEnum.Dollar)
                {
                    throw new NotImplementedException("Dollar not supported yet");
                }

                //Todo: Find Best Bank For User
                Bank bank = await _bankRepository.GetFirstBy(x => x.Code == (byte)model.BankCode);

                var transaction = new Transaction()
                {
                    Amount         = model.Amount,
                    ApplicationId  = application.Id,
                    BankId         = bank.Id,
                    CreatedBy      = 1,
                    Mobile         = model.Mobile,
                    UserTrackCode  = model.TrackCode,
                    CreationDate   = DateTime.Now,
                    Status         = (byte)TransactionStatusEnum.Initial,
                    CallbackUrl    = model.CallbackUrl,
                    ExpirationTime = model.ExpirationTime
                };
                await _transactionRepository.Add(transaction);

                var applicationBank = await _applicationBankRepository.GetFirstBy(x => x.ApplicationId == application.Id && x.BankId == bank.Id);

                var currentBaseUrl = string.Format("{0}://{1}", Request.Scheme, Request.Host);

                switch (model.BankCode)
                {
                case BankCodeEnum.Parsian:
                    var parsianRedirectUrl = string.Format("{0}/Parsian/Callback?token={1}&SecondTrackCode={2}", currentBaseUrl, model.TrackCode, transaction.Id);
                    transaction.BankRedirectUrl = parsianRedirectUrl;
                    await _transactionRepository.Update(transaction);

                    return(Ok(
                               new PayRequestResponseModel
                    {
                        Code = transaction.Id,
                        Url = currentBaseUrl + "/Pay/" + transaction.Id
                    }));

                case BankCodeEnum.Mellat:
                    var mellatRedirectUrl = string.Format("{0}/Mellat/Callback?token={1}&SecondTrackCode={2}", currentBaseUrl, model.TrackCode, transaction.Id);
                    transaction.BankRedirectUrl = mellatRedirectUrl;
                    await _transactionRepository.Update(transaction);

                    return(Ok(
                               new PayRequestResponseModel
                    {
                        Code = transaction.Id,
                        Url = currentBaseUrl + "/Pay/" + transaction.Id
                    }));

                case BankCodeEnum.Saman:
                default:
                    var redirectUrl = string.Format("{0}/Saman/Callback?token={1}&SecondTrackCode={2}", currentBaseUrl, model.TrackCode, transaction.Id);
                    transaction.BankRedirectUrl = redirectUrl;
                    await _transactionRepository.Update(transaction);

                    return(Ok(
                               new PayRequestResponseModel
                    {
                        Code = transaction.Id,
                        Url = currentBaseUrl + "/Pay/" + transaction.Id
                    }));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                if (ex.InnerException != null)
                {
                    _logger.LogError(ex.InnerException.Message);
                }
                throw;
            }
        }
Exemple #13
0
        public APIResult BeginRechange([FromBody] BeginRechangeArgsModel args)
        {
            try
            {
                if (args.ShopFlag == null)
                {
                    throw new ArgumentNullException("ShopFlag");
                }
                if (!args.ShopOrderId.HasValue)
                {
                    throw new ArgumentNullException("ShopOrderId");
                }
                var       memberId  = GetMemberId();
                ShopOrder shopOrder = shopDb.GetSingle <ShopOrder>(args.ShopOrderId.Value);
                if (shopOrder == null)
                {
                    throw new Exception("订单不存在");
                }
                ShopPayInfo shopPayInfo = shopDb.Query <ShopPayInfo>()
                                          .Where(m => !m.IsDel)
                                          .Where(m => m.ShopFlag == args.ShopFlag && m.IsEnable)
                                          .FirstOrDefault();
                if (shopPayInfo == null)
                {
                    throw new Exception("当前商铺没有设置好支付信息。");
                }


                //排除扫码 自助点餐
                var checkThirdResult = CheckThird(shopOrder, shopOrder.ShopId);
                if (!checkThirdResult.Success)
                {
                    throw new Exception(checkThirdResult.Message);
                }

                PayProxyBase payProxy  = proxyFactory.GetProxy(shopPayInfo);
                var          tradeNo   = "SP" + DateTime.Now.Ticks + CommonUtil.CreateNoncestr(5);
                var          tradeDate = DateTime.Now.ToString("yyyyMMddHHmmss");
                var          model     = new MemberTradeForRechange()
                {
                    AddIP          = GetIp(),
                    AddTime        = DateTime.Now,
                    AddUser        = GetUsername(),
                    MemberId       = memberId,
                    Detail         = "用户支付" + shopOrder.Payment.Value + "分",
                    OutBank        = "",
                    PayChannel     = payProxy.PayChannel,
                    Status         = MemberTradeForRechangeStatus.未完成,
                    TimeExpire     = DateTime.Now,
                    TimeStart      = DateTime.Now,
                    Title          = "用户支付",
                    TotalFee       = shopOrder.Payment.Value,
                    ShopOrderId    = args.ShopOrderId.Value,
                    MoneyOffRuleId = shopOrder.MoneyOffRuleId,
                    TradeNo        = tradeNo,
                    PayWay         = (int)shopPayInfo.PayWay,
                    //ShopType = shopOrder
                    RowVersion            = DateTime.Now,
                    OrderType             = OrderType.普通订单,
                    OrderId               = args.ShopOrderId.Value,
                    ConglomerationOrderId = 0,
                    ShopId = shopPayInfo.ShopId
                };
                finaceDb.AddToMemberTradeForRechange(model);
                // var openId = "oYBBo5PUP3TF37pUNiVvc7j5gJ6k"; //"oYBBo5PUP3TF37pUNiVvc7j5gJ6k";//
                var openId  = GetOpenId(); //"oYBBo5PUP3TF37pUNiVvc7j5gJ6k";//
                var payInfo = payProxy.GetPayInfo(model, openId);
                finaceDb.SaveChanges();
                if (shopPayInfo.PayWay == PayWay.Wechat)
                {
                    new PayOrRefundUtil <object>(LogDbContext).PayAction("Pay"
                                                                         , BLL.Log.PayOrRefundType.支付, args.ShopOrderId.Value, OrderType.普通订单, model, payInfo);
                    return(Success(new
                    {
                        payInfo,
                        TradeNo = tradeNo
                    }));
                }
                else
                {
                    PayInfoModel infoModel = new PayInfoModel();
                    var          payinfo   = JsonConvert.DeserializeObject <ZRui.Web.Core.Finance.WechatPay.PayAPIModels.PayInfo>(payInfo.ToString());
                    infoModel.payInfo = payinfo;
                    new PayOrRefundUtil <object>(LogDbContext).PayAction("Pay"
                                                                         , BLL.Log.PayOrRefundType.支付, args.ShopOrderId.Value, OrderType.普通订单, model, payInfo);
                    return(Success(
                               infoModel
                               ));
                }
            }
            catch (Exception ex)
            {
                new PayOrRefundUtil <object>(LogDbContext).PayAction("Pay"
                                                                     , BLL.Log.PayOrRefundType.支付, args.ShopOrderId.Value, OrderType.普通订单, null, null, ex.Message + "【StackTrace】" + ex.StackTrace);
                throw new Exception(ex.Message);
            }
            //if (args.TotalFee <= 0) throw new Exception("充值金额需要大于0");
        }