public async Task <PayOutput> Pay(PayInput input) { var orderInfo = _sellAppService.GetOrderInfo(input.OrderId); if (orderInfo == null) { throw new LotteryDataException("下单失败,请稍后重试"); } if (!orderInfo.OrderCost.Equals(input.Price)) { throw new LotteryDataException("订单金额错误,请核对订单信息"); } if (input.IsType != PayType.AliPay && input.IsType != PayType.Wechat) { throw new LotteryDataException("请选择支付方式"); } var paysApiInfo = _sellAppService.GetPaysApiInfo(); var payInfo = new PayOrderDto() { Uid = paysApiInfo.Uid, Price = input.Price.ToString("#0.00"), Istype = (int)input.IsType, // Goodsname = input.GoodsName, Notify_url = paysApiInfo.NotifyUrl, Return_url = paysApiInfo.ReturnUrl, Orderid = input.OrderId, Orderuid = _lotterySession.UserName, }; payInfo.Key = GetPayKey(payInfo, paysApiInfo.Token); return(_sellAppService.GetPayOrderInfo(payInfo, paysApiInfo.PaysApi)); }
public ResultMessage <string> ClientCompleteServiceOrder(PayOrderDto payOrder) { string msg = string.Empty; var result = _rechargeService.ClientCompleteServiceOrder(payOrder.MapTo <CompleteServiceOrder>(), out msg); try { if (result) { return(new ResultMessage <string>(msg, "Success")); } return(new ResultMessage <string>(ResultCode.Fail, "FAIL", msg)); } catch (Exception e) { return(new ResultMessage <string>(ResultCode.Fail, "FAIL", e.Message)); } }
public ResultMessage <string> ClientCompleteServiceOrder(PayOrderDto payOrder) { var result = _purchaseService.ClientCompleteServiceOrder(payOrder.MapTo <CompleteServiceOrder>()); string msg = string.Empty; if (result == 0) { msg = "服务购买成功!您可以重新登录App后,享受我们提供的服务!"; return(new ResultMessage <string>(msg)); } switch (result) { case -1: msg = "异常失败"; break; case -2: msg = "订单不存在"; break; case -3: msg = "金额不一致"; break; case 1: msg = "订单之前已处理过,无需重复处理 "; break; case 2: msg = "客户已有更高授权"; break; case 3: msg = "客户已有此版本的终身授权"; break; default: msg = "未知原因,购买失败!"; break; } return(new ResultMessage <string>(ResultCode.Fail, "FAIL", msg)); }
private string GetPayKey(PayOrderDto payInfo, string token) { var keyLine = string.Empty; // payInfo.Goodsname + payInfo.Istype + payInfo.Notify_url + payInfo.Orderid + payInfo.Orderuid //+ payInfo.Price + payInfo.Return_url + token + payInfo.Uid; if (!payInfo.Goodsname.IsNullOrEmpty()) { keyLine += payInfo.Goodsname; } keyLine += payInfo.Istype; if (!payInfo.Notify_url.IsNullOrEmpty()) { keyLine += payInfo.Notify_url; } if (!payInfo.Orderid.IsNullOrEmpty()) { keyLine += payInfo.Orderid; } if (!payInfo.Orderuid.IsNullOrEmpty()) { keyLine += payInfo.Orderuid; } keyLine += payInfo.Price; if (!payInfo.Return_url.IsNullOrEmpty()) { keyLine += payInfo.Return_url; } keyLine += token; if (!payInfo.Uid.IsNullOrEmpty()) { keyLine += payInfo.Uid; } return(EncryptHelper.Md5(keyLine)); }
public PayOutput GetPayOrderInfo(PayOrderDto payInfo, string payApi) { var formData = new Dictionary <string, object>(); formData.Add("uid", payInfo.Uid); formData.Add("price", payInfo.Price); formData.Add("istype", payInfo.Istype); formData.Add("notify_url", payInfo.Notify_url); formData.Add("return_url", payInfo.Return_url); formData.Add("orderid", payInfo.Orderid); formData.Add("orderuid", payInfo.Orderuid); formData.Add("goodsname", payInfo.Goodsname); formData.Add("key", payInfo.Key); dynamic result; try { var response = _httpClient.Post(payApi, formData, null, new { format = "json" }); result = response.RawText.ToObject(); } catch (Exception e) { _logger.Error(e); string payType = string.Empty; string recommendPaytype = string.Empty; if (payInfo.Istype == 1) { payType = "支付宝"; recommendPaytype = "微信"; } else { payType = "微信"; recommendPaytype = "支付宝"; } throw new LotteryException(string.Format("{0}支付系统异常,推荐使用{1}支付,或稍后重试", payType, recommendPaytype)); } string qrcodeLink = result.data.qrcode.ToString(); if (qrcodeLink.IsNullOrEmpty()) { string payType = string.Empty; string recommendPaytype = string.Empty; if (payInfo.Istype == 1) { payType = "支付宝"; recommendPaytype = "微信"; } else { payType = "微信"; recommendPaytype = "支付宝"; } throw new LotteryException(string.Format("{0}支付系统异常,推荐使用{1}支付,或稍后重试", payType, recommendPaytype)); } var output = new PayOutput() { IsType = result.data.istype, Msg = payInfo.Goodsname, QrCodeImageAddress = string.Format(LotteryConstants.QrCodeUrl, result.data.qrcode), QrCode = result.data.qrcode, RealPrice = result.data.realprice }; return(output); }