/// <summary> /// 处理 /// </summary> /// <returns></returns> public override PaylineEntity Process() { var sPara = GetResponse(); bool isVerify = VerifyProcess(sPara); var number = sPara.ContainsKey("out_trade_no") ? sPara["out_trade_no"] : ""; var info = GetPayline(number); if (info == null || info.Amount != sPara["total_amount"].Convert <decimal>()) { return(null); } info.OutNumber = sPara["trade_no"]; info.Status = isVerify ? PaylineStatusType.Success : PaylineStatusType.Failure; info.SetProperty(it => it.OutNumber); info.SetProperty(it => it.Status); info.SaveType = SaveType.Modify; LogHelper.AddEcho(new EchoEntity { Method = "Beeant.Repository.Services.Finance.AliPaylineRepository.Process", Request = "", Response = sPara.SerializeJson(), Remark = "", Url = HttpContext.Current.Request.Url.ToString(), Key = number, SaveType = SaveType.Add }); return(info); }
/// <summary> /// 创建 /// </summary> /// <param name="info"></param> /// <returns></returns> public override bool Create(PaylineEntity info) { var resParams = CreateWechatOrder(info); if (resParams == null || !resParams.ContainsKey("appid") || !resParams.ContainsKey("prepay_id") || string.IsNullOrEmpty(resParams["appid"]) || string.IsNullOrEmpty(resParams["prepay_id"])) { return(false); } var paraTemp = new SortedDictionary <string, string> { { "appId", resParams["appid"] }, { "timeStamp", (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds.Convert <long>().ToString() }, { "nonceStr", Guid.NewGuid().ToString().Replace("-", "") }, { "package", string.Format("prepay_id={0}", resParams["prepay_id"]) }, { "signType", "MD5" } }; paraTemp.Add("paySign", MakeSign(paraTemp, MchKey)); info.Forms = paraTemp; info.OutNumber = resParams["prepay_id"]; info.Status = PaylineStatusType.Waiting; info.Request = GetRequest(info, resParams); LogHelper.AddEcho(new EchoEntity { Method = "Beeant.Repository.Services.Finance.WechatPaylineRepository.Create", Request = info.Request, Response = "", Remark = "", Url = HttpContext.Current.Request.Url.ToString(), Key = info.Number, SaveType = SaveType.Add }); return(true); }
public override bool Refund(PaylineEntity info) { var builder = new StringBuilder("{"); //订单支付时传入的商户订单号,不能和 trade_no同时为空。 builder.AppendFormat("\"out_trade_no\":\"{0}\",", info.Number); //支付宝交易号,和商户订单号不能同时为空 2017开头 builder.AppendFormat("\"trade_no\":\"{0}\",", info.OutNumber); //需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数 builder.AppendFormat("\"refund_amount\":\"{0}\",", 0 - info.Amount); // 退款的原因说明 builder.AppendFormat("\"refund_reason\":\"{0}\",", "测试退款"); // 标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传。 builder.AppendFormat("\"out_request_no\":\"{0}\"", info.Number); ////商户的操作员编号 //builder.AppendFormat("\"operator_id\":\"{0}\"", "FAST_INSTANT_TRADE_PAY"); //// 商户的门店编号 //builder.AppendFormat("\"store_id\":\"{0}\"", "FAST_INSTANT_TRADE_PAY"); ////商户的终端编号 //builder.AppendFormat("\"terminal_id\":\"{0}\"", "FAST_INSTANT_TRADE_PAY"); builder.Append("}"); AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); request.BizContent = builder.ToString(); AlipayTradeRefundResponse response = AopClient.Execute(request); info.Request = response.Body; LogHelper.AddEcho(new EchoEntity { Method = "Beeant.Repository.Services.Finance.AliPaylineRepository.Refund", Request = request.BizContent, Response = response.Body, Remark = "", Url = HttpContext.Current.Request.Url.ToString(), Key = info.Number, SaveType = SaveType.Add }); if (response.Msg == "Success") { info.OutNumber = response.TradeNo; info.Status = PaylineStatusType.Success; return(true); } return(false); }
/// <summary> /// 处理 /// </summary> /// <returns></returns> public override PaylineEntity Process() { var sPara = GetResponse(); var number = sPara.ContainsKey("number") ? sPara["number"] : sPara.ContainsKey("out_trade_no") ? sPara["out_trade_no"] : ""; if (string.IsNullOrWhiteSpace(number)) { return(null); } var result = GetProcessResult(sPara, number); if (result == null || !result.ContainsKey("trade_state") || result["trade_state"] != "SUCCESS") { return(null); } var info = GetPayline(sPara["number"]); if (info == null || info.Status != PaylineStatusType.Waiting) { return(info); } info.Status = result["trade_state"] == "SUCCESS" ? PaylineStatusType.Success : PaylineStatusType.Failure; info.OutNumber = result.ContainsKey("transaction_id") ? result["transaction_id"] : ""; info.SetProperty(it => it.Status); info.SetProperty(it => it.OutNumber); info.SaveType = SaveType.Modify; LogHelper.AddEcho(new EchoEntity { Method = "Beeant.Repository.Services.Finance.WechatPaylineRepository.Process", Request = "", Response = sPara.SerializeJson(), Remark = "", Url = HttpContext.Current.Request.Url.ToString(), Key = info.Number, SaveType = SaveType.Add }); return(info); }
/// <summary> /// 创建 /// </summary> /// <param name="info"></param> /// <returns></returns> public override bool Create(PaylineEntity info) { var rev = false; switch (info.ChannelType) { case Domain.Entities.ChannelType.Mobile: rev = CreateByWap(info); break; case Domain.Entities.ChannelType.Website: rev = CreateByPage(info); break; } LogHelper.AddEcho(new EchoEntity { Method = "Beeant.Repository.Services.Finance.AliPaylineRepository.Create", Request = info.Request, Response = "", Remark = "", Url = HttpContext.Current.Request.Url.ToString(), Key = info.Number, SaveType = SaveType.Add }); return(rev); }
/// <summary> /// 退款 /// </summary> /// <param name="info"></param> /// <returns></returns> public override bool Refund(PaylineEntity info) { string url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; var requsetParams = new SortedDictionary <string, string>(); requsetParams.Add("total_fee", Math.Abs(info.Amount * 100).Convert <int>().ToString()); requsetParams.Add("refund_fee", Math.Abs(info.Amount * 100).Convert <int>().ToString()); requsetParams.Add("out_refund_no", info.Number); requsetParams.Add("transaction_id", info.OutNumber); requsetParams.Add("appid", AppId); requsetParams.Add("mch_id", MchId); requsetParams.Add("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));//随机字符串 requsetParams.Add("sign", MakeSign(requsetParams, MchKey)); string xml = ToRequestXml(requsetParams); var webRequest = (HttpWebRequest)WebRequestHelper.CreateWebRequestWithCertificate(url, CertPath, MchId); string response = WebRequestHelper.SendPostRequest(webRequest, Encoding.UTF8, xml); var result = FromResponseXml(response); LogHelper.AddEcho(new EchoEntity { Method = "Beeant.Repository.Services.Finance.WechatPaylineRepository.Refund", Request = xml, Response = result.SerializeJson(), Remark = "", Url = HttpContext.Current.Request.Url.ToString(), Key = info.Number, SaveType = SaveType.Add }); if (result == null || !result.ContainsKey("return_code") || result["return_code"] != "SUCCESS") { return(false); } info.Status = PaylineStatusType.Success; info.OutNumber = result.ContainsKey("refund_id") ? result["refund_id"] : ""; return(true); }