/// <summary> /// 验证商户 /// </summary> /// <param name="model"></param> /// <param name="merchant"></param> /// <param name="msg"></param> /// <returns></returns> private bool OrderVerify(string orderId, out PayOrder payOrder, out PayChannel payChannel, out string msg) { msg = ""; payChannel = null; payOrder = null; var order = this._payOrderService.Get(c => c.OrderId == orderId); payOrder = order; if (order.IsNull()) { msg = "订单不存在"; return(false); } var channel = this._payChannelService.Get(c => c.ChannelId == order.ChannelId); payChannel = channel; if (channel.IsNull()) { msg = "渠道不存在"; return(false); } return(true); }
/// <summary> /// 根据参数,读取通道信息 /// </summary> /// <param name="paymode">关联平台(1:安卓,2:ios,3:H5)</param> /// <param name="arid">风险配置表id</param> /// <param name="CacheTime">缓存时间</param> /// <param name="appid">应用id</param> /// <returns></returns> public override PayChannelAbstract LoadChannel(int paymode, int arid, int CacheTime, int appid) { PayChannel payc = new PayChannel(); payc.PassName = SelectPayChannel.SelectPass(7, paymode, arid, CacheTime, appid); return(payc); }
public ServiceResult Update(PayChannel model) { var result = new ServiceResult(); this._payChannelReps.Update(model); return(result.IsSucceed("编辑支付渠道成功")); }
public ServiceResult Add(PayChannel model) { var result = new ServiceResult(); this._payChannelReps.Add(model); return(result.IsSucceed("新增支付渠道成功")); }
public ActionResult AddForAjax(PayChannel model) { model.ChannelId = Guid.NewGuid().ToString(); model.CreateBy = CurrentSysUser.UserName; model.CreateTime = DateTime.Now; model.FeeRate = model.FeeRate / 100; return(Json(this._payChannelService.Add(model))); }
//занесение данных из объекта данных в контролы public void Build(PayChannel data) { Data = data; updating++; //включаем режим обновления tbNameChannel.Text = data.NameChannel; nudPriceHour.Value = data.PriceHour; updating--; //выключаем режим обновления }
public ActionResult EditForAjax(PayChannel model) { return(Json(this._payChannelService.Update(c => c.ChannelId == model.ChannelId, c => new PayChannel() { ChannelName = model.ChannelName, MerchantInfo = model.MerchantInfo, Remark = model.Remark, MinOrderAmount = model.MinOrderAmount, MaxOrderAmount = model.MaxOrderAmount, PaySite = model.PaySite, FeeRate = model.FeeRate / 100, Status = model.Status, UpdateBy = CurrentSysUser.UserName, UpdateTime = DateTime.Now }))); }
public override PayResult Notify(IDictionary <string, string> dicParams, PayChannel channel) { var payResult = PayResult.IsFailed(); if (dicParams["paystatus"].ToUpper() == "SUCCESS") { payResult.Success = true; payResult.MerchantOrderNo = dicParams["customerbillno"]; payResult.OrderAmount = dicParams["preorderamount"].TryDecimal(0).Value; payResult.OrderNo = dicParams["orderno"]; payResult.IsVerify = Verify(dicParams, channel); } else { payResult.Success = false; } return(payResult); }
public static string GetName(this PayChannel payChannel) { switch (payChannel) { case PayChannel.balance: return("余额"); case PayChannel.bank: return("银行转账"); case PayChannel.alipay: case PayChannel.alipay_wap: case PayChannel.alipay_pc_direct: case PayChannel.alipay_qr: return("支付宝"); case PayChannel.wx: case PayChannel.wx_pub: case PayChannel.wx_pub_qr: return("微信"); case PayChannel.upmp: case PayChannel.upacp: case PayChannel.upacp_wap: case PayChannel.upacp_pc: return("银联"); case PayChannel.bfb: case PayChannel.bfb_wap: return("百度钱包"); case PayChannel.yeepay_wap: return("易宝"); case PayChannel.jdpay_wap: return("京东钱包"); case PayChannel.apple_pay: return("苹果"); default: return("未知"); } }
private IDictionary <string, string> CreatePayRequest(PayOrder order, PayChannel channel) { var request = new Dictionary <string, string>(); request.Add("customerno", channel.MerchantNo); request.Add("channeltype", GetPayType(order.ChannelType)); request.Add("orderamount", order.OrderAmount.ToString("0.00")); request.Add("customerbillno", order.OrderNo); request.Add("customerbilltime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); request.Add("ip", order.Ip); request.Add("devicetype", order.DeviceType); request.Add("customeruser", order.MemberInfo.IsNullOrWhiteSpace() ? "ok" : "ok"); request.Add("notifyurl", order.NotifyUrl); //request.Add("returnurl", order.SuccessUrl); //if (type == PayType.OnlineBank) //{ // request.Add("bankcode", bankMapping[order.BankCode]); //} request = request.OrderBy(c => c.Key).ToDictionary(p => p.Key, o => o.Value); StringBuilder sb = new StringBuilder(); foreach (var item in request) { if (!string.IsNullOrWhiteSpace(item.Value) && item.Key != "sign") { sb.AppendFormat("&{0}={1}", item.Key.ToLower(), item.Value); } } string signStr = sb.ToString().Substring(1) + "&key=" + channel.MerchantKey; string md5Sign = signStr.EncToMD5(); request.Add("sign", md5Sign); return(request); }
private bool Verify(IDictionary <string, string> parameters, PayChannel channel) { try { StringBuilder sb = new StringBuilder(); parameters = parameters.OrderBy(c => c.Key).ToDictionary(p => p.Key, o => o.Value); foreach (var item in parameters) { if (!string.IsNullOrWhiteSpace(item.Value) && item.Key != "sign") { sb.AppendFormat("{0}={1}&", item.Key, item.Value); } } string signStr = sb.AppendFormat("key={0}", channel.MerchantKey).ToString(); return(signStr.EncToMD5() == parameters["sign"]); } catch (Exception ex) { return(false); } }
public ActionResult Index(string orderId) { var response = new BaseResponse(); BaseRequest baseRequest = new BaseRequest(); ServiceResult result = new ServiceResult(); var bizCode = string.Empty; string errMsg = ""; PayOrder order = null; PayChannel payChannel = null; if (orderId.IsNullOrWhiteSpace()) { return(Json(result.IsFailed("参数错误,orderid"))); } //订单校验 if (!OrderVerify(orderId, out order, out payChannel, out errMsg)) { return(Json(result.IsFailed(errMsg))); } baseRequest.Order = order; baseRequest.PayChannel = payChannel; bizCode = payChannel.ChannelCode; if (bizCode.IsNullOrWhiteSpace()) { return(Json(result.IsFailed("无效交易类型,ChannelCode为空"))); } if (!ProcessorUtil.BizCodeValid(bizCode)) { return(Json(result.IsFailed("支付标识和DescriptionAttribute不一致"))); } var processor = this.factory.Create(bizCode); //构建请求参数 var payParams = processor.CreatePayRequest(baseRequest); //如果是浏览器表单提交 if (processor.IsPostForm) { ViewData["url"] = processor.PayUrl; ViewData["method"] = processor.RequestMethod; return(View(payParams)); } //异步请求 PayResponse payResponse = processor.Process(payParams); if (!payResponse.Success) { return(Json(result.IsFailed(payResponse.Message))); } switch (processor.PayModel) { case PayModelEnum.无: break; case PayModelEnum.URL跳转: return(Redirect(payResponse.Data)); case PayModelEnum.扫码: break; case PayModelEnum.二维码生成: return(QRCode(payResponse.Data)); case PayModelEnum.HTML输出: return(Content(payResponse.Data, "text/html")); default: break; } return(View()); }
private PayOrder CreateOrder(Request10001 request, Merchant merchant, PayService payProduct, PayChannel payChannel, MerchantPayService merchantPayService) { PayOrder order = new PayOrder(); order.OrderId = Guid.NewGuid().ToString(); order.OrderNo = DateTime.Now.ToString("yyyyMMddHHmmssfff") + new Random().Next(1000, 9999); order.AgentNo = merchant.AgentNo; order.ChannelId = payChannel.ChannelId; order.ChannelName = payChannel.ChannelName; order.ChannelType = payChannel.ChannelType; order.CreateTime = DateTime.Now; order.DeviceType = request.DeviceType; order.ExtendField = request.ExtendField; order.FeeMode = payChannel.SettleMode.ToString(); order.SettleMode = payChannel.SettleMode.ToStr(); order.Ip = request.Ip; order.MemberInfo = "test"; order.MerchantId = merchant.MerchantId; order.MerchantOrderNo = request.MerchantOrderNo; order.MerchantOrderTime = request.MerchantOrderTime.TryDateTime(DateTime.Now).Value; order.NotifyUrl = request.NotifyUrl; order.OrderAmount = request.OrderAmount.TryDecimal(0).Value; order.OrderDescription = request.OrderDescription; order.PayStatus = (int)Max.Models.Payment.Common.Enums.PayStatus.未支付; order.PayTime = DateTime.Now; order.PreorderAmount = order.OrderAmount; order.ServiceFee = order.OrderAmount * merchantPayService.MerchantFeeRate; order.ServiceRate = merchantPayService.MerchantFeeRate; order.TransAmount = order.OrderAmount - order.ServiceFee; order.ServiceId = payProduct.ServiceId; this._payOrderService.Add(order); return(order); }
public BaseResponse Index([FromUri] RequestData model) { var watcher = new Stopwatch(); watcher.Start(); var response = new BaseResponse(); BaseResponse exResponse = null; var requestId = string.Empty; var requestDataJson = string.Empty; var userDataJson = string.Empty; var logMsg = new ApiLogMessage(); var bizCode = string.Empty; var urlEncodedUserData = string.Empty; var urlEncodedRequestData = string.Empty; var parmUserData = string.Empty; var parmRequestData = string.Empty; BaseRequest baseRequest = new BaseRequest(); PayOrder order = null; PayChannel payChannel = null; try { if (model.IsNull() || model.RequestId.IsNullOrWhiteSpace()) { return(BaseResponse.Create(ApiEnum.ResponseCode.处理失败, "无效请求", null, 0)); } //验证参数 var errMsg = ""; if (!ModelVerify(model, out errMsg)) { response = BaseResponse.Create(ApiEnum.ResponseCode.参数不正确, errMsg, null, 0); return(response); } //订单校验 if (!OrderVerify(model, out order, out payChannel, out errMsg)) { response = BaseResponse.Create(ApiEnum.ResponseCode.处理失败, errMsg, null, 0); return(response); } ////验证签名 //if (!VerifySign(baseRequest, merchant)) //{ // response = BaseResponse.Create(ApiEnum.ResponseCode.无效调用凭证, "签名不正确", null, 0); // return response; //} baseRequest.Order = order; baseRequest.PayChannel = payChannel; bizCode = payChannel.ChannelCode; if (bizCode.IsNullOrWhiteSpace()) { return(BaseResponse.Create(ApiEnum.ResponseCode.无效交易类型, "无效交易类型,ChannelCode为空", null, 0)); } if (!ProcessorUtil.BizCodeValid(bizCode)) { return(BaseResponse.Create(ApiEnum.ResponseCode.无效交易类型, "支付标识和DescriptionAttribute不一致", null, 0)); } var processor = this.factory.Create(bizCode); response = processor.Process(baseRequest); } catch (Exception ex) { log.Error(ex); response = BaseResponse.Create(ApiEnum.ResponseCode.系统内部错误, "不好意思,程序开小差,正在重启" + ex.ToString(), 0); exResponse = BaseResponse.Create(ApiEnum.ResponseCode.系统内部错误, ex.ToString(), 0); logMsg.IsError = true; } finally { //WriteRequestInfo(userData, requestData, requestId, bizCode); watcher.Stop(); var duration = watcher.Elapsed.TotalMilliseconds; var logStr = string.Empty; logStr += string.Format("【请求报文】RequestId:{0}", requestId) + Environment.NewLine; logStr += string.Format("UserData:{0}", urlEncodedUserData) + Environment.NewLine; logStr += string.Format("RequestData:{0}", urlEncodedRequestData) + Environment.NewLine; logStr += string.Format("【响应报文】{0}", response.ToJson()); logStr += string.Format("【耗时】{0}毫秒", duration); log.Info(logStr.ToString()); logMsg.UserDataStr = urlEncodedUserData; logMsg.RequestDataStr = urlEncodedRequestData; logMsg.RequestId = requestId; logMsg.LogTime = DateTime.Now; logMsg.RequestJson = requestDataJson; logMsg.Response = exResponse.IsNull() ? response.ToJson() : exResponse.ToJson(); logMsg.Duration = duration; if (AppConfig.LogType == LogType.MQ) { try { this.bus.Publish(logMsg); } catch (Exception ex) { log.Error("写入MQ失败,RequestId:{0}\r\n{1}".Fmt("", ex.ToString())); } } } return(response); }
public virtual PayResult Notify(IDictionary <string, string> dicParams, PayChannel channel) { return(PayResult.IsSuccess()); }