public void OnPurchaseClicked(string productId, PayInfoModel infoModel, LuaFunction Success, LuaFunction failure) { this.infoModel = infoModel; this.mSuccess = Success; this.mfailure = failure; controller.InitiatePurchase(productId); }
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); } }
//支付宝支付 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)); }
//微信支付 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)); }
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 }); } } }
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); }
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>()); }
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; } }
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"); }