/// <summary> /// 创建支付 /// </summary> /// <returns>返回二维码内容</returns> public override string StartPay(PayParameter parameter) { if (parameter.TradeID.IsNullOrEmpty()) { throw new Exception("交易编号为空"); } Config config = new Alipay.Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.AlipayScanQRCode, parameter.TradeID)); IAlipayTradeService serviceClient = config.AppConfig.CreateClientInstance(); AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(config, parameter); string out_trade_no = builder.out_trade_no; //回掉通知页面 string notifyUrl = string.Format("http://{0}/{1}", HttpContext.Current.Request.Url.Authority, Alipay_ScanPay_HttpModule.NotifyPageName); AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notifyUrl); PayFactory.OnLog(parameter.TradeID, precreateResult.response.Body); if (precreateResult.response.QrCode.IsNullOrEmpty()) { //如果没有生成二维码内容,认为失败 throw new Exception(precreateResult.response.SubMsg); } if (precreateResult.Status == ResultEnum.FAILED) { throw new Exception(precreateResult.response.SubMsg); } return(precreateResult.response.QrCode); }
/// <summary> /// 检查支付状态 /// </summary> public override void CheckPayState(PayParameter parameter) { try { WxPayConfig config = new WxPayAPI.WxPayConfig(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.WeiXinScanQRCode, parameter.TradeID)); WxPayData queryOrderInput = new WxPayData(); queryOrderInput.SetValue("out_trade_no", parameter.TradeID); WxPayData result = WxPayApi.OrderQuery(queryOrderInput, config); string xml = result.ToXml(); PayFactory.OnLog(parameter.TradeID, xml); if (result.GetValue("return_code").ToString() == "SUCCESS" && result.GetValue("result_code").ToString() == "SUCCESS") { //支付成功 if (result.GetValue("trade_state").ToString() == "SUCCESS") { //触发回调函数 PayFactory.OnPaySuccessed(parameter.TradeID, xml); return; } else if (result.GetValue("trade_state").ToString() == "NOTPAY") { //这是一开始生成二维码后,会是这个状态 return; } } } catch { } }
public void Bboqi_WeixinBarcode() { var pay = PayFactory.CreatePay(PayInterfaceType.BboqiWeiXinBarcode); var parameter = new PayParameter() { Amount = 0.01, Description = "测试交易", TradeID = Guid.NewGuid().ToString("N"), TradeName = "myTradeName", AuthCode = "135138355822429035",//客户出示的二维码 Timeout = 30, }; try { pay.BeginPay(parameter); Thread.Sleep(10000); } catch (PayServerReportException) { } catch { throw; } }
public void AlipayBarcode_Test() { var pay = PayFactory.CreatePay(PayInterfaceType.AlipayBarcode); var parameter = new PayParameter() { Amount = 0.01, Description = "测试交易", TradeID = Guid.NewGuid().ToString("N"), TradeName = "myTradeName", AuthCode = "283996484850531686",//客户出示的二维码 Timeout = 30, StoreId = "897", }; parameter.GoodsDetails.Add(new GoodsDetail() { GoodsId = "P001", GoodsName = "测试商品01", Quantity = 1, Price = 0.01 }); try { pay.BeginPay(parameter); pay.CheckPayState(parameter); } catch (PayServerReportException) { } catch { throw; } }
public void IPaysoon_WeiXinBarcode_Test() { var pay = PayFactory.CreatePay(PayInterfaceType.IPaysoonWeiXinBarcode); var parameter = new PayParameter() { Amount = 0.01, Description = "测试交易", TradeID = Guid.NewGuid().ToString("N"), TradeName = "myTradeName", AuthCode = "134548413943541106",//客户出示的二维码 Timeout = 30, }; try { pay.BeginPay(parameter); //pay.CheckPayState(parameter); } catch (PayServerReportException) { } catch { throw; } }
public virtual RefoundResult Refound(RefoundParameter parameter) { WxPayConfig config = new WxPayAPI.WxPayConfig(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.WeiXinBarcode, parameter.TradeID)); WxPayData data = new WxPayData(); data.SetValue("out_trade_no", parameter.TradeID); data.SetValue("total_fee", (int)(parameter.TotalAmount * 100)); //订单总金额 data.SetValue("refund_fee", (int)(parameter.Amount * 100)); //退款金额 data.SetValue("out_refund_no", Guid.NewGuid().ToString()); //随机生成商户退款单号 data.SetValue("op_user_id", config.MCHID); //操作员,默认为商户号 WxPayData result = WxPayApi.Refund(data, config); //提交退款申请给API,接收返回数据 string err = result.GetValue("err_code_des") as string; RefoundResult finallyResult = new RefoundResult(); if (result.GetValue("return_code").ToString() == "SUCCESS" && result.GetValue("result_code").ToString() == "SUCCESS") { //退款成功 finallyResult.Result = RefoundResult.ResultEnum.SUCCESS; } else { finallyResult.Result = RefoundResult.ResultEnum.FAIL; } finallyResult.Error = err; finallyResult.ServerMessage = result.ToXml(); return(finallyResult); }
public void IPaysoon_WeiXinScanQRCode_Test() { var pay = PayFactory.CreatePay(PayInterfaceType.IPaysoonWeiXinScanQRCode); var parameter = new PayParameter() { Amount = 0.01, Description = "测试交易", TradeID = Guid.NewGuid().ToString("N"), TradeName = "myTradeName", Timeout = 30, }; try { var url = pay.BeginPay(parameter); //pay.CheckPayState(parameter); } catch (PayServerReportException) { } catch (Exception ex) { throw ex; } }
public void Bboqi_CheckPayState() { var pay = PayFactory.CreatePay(PayInterfaceType.BboqiWeiXinBarcode); var parameter = new PayParameter() { Amount = 0.01, Description = "测试交易", TradeID = "4fbc6cbcb0be4600802d566564ebc443", TradeName = "myTradeName", AuthCode = "134580297422568560",//客户出示的二维码 Timeout = 30, }; try { pay.CheckPayState(parameter); } catch (PayServerReportException) { } catch { throw; } }
public void IPaysoon_AlipayBarcode_Test() { var pay = PayFactory.CreatePay(PayInterfaceType.IPaysoonAlipayBarcode); var parameter = new PayParameter() { Amount = 0.03, Description = "测试交易", TradeID = Guid.NewGuid().ToString("N"), TradeName = "myTradeName", AuthCode = "283829134783524951" + "",//客户出示的二维码 Timeout = 30, }; parameter.GoodsDetails.Add(new GoodsDetail() { GoodsId = "P002", GoodsName = "测试商品A1", Price = 0.03, Quantity = 1 }); try { pay.BeginPay(parameter); //pay.CheckPayState(parameter); } catch (PayServerReportException) { } catch { throw; } }
public void IPaysoon_WeiXinJSApi_Test() { var pay = PayFactory.CreatePay(PayInterfaceType.IPaysoonWeiXinJSApi); var parameter = new PayParameter() { Amount = 0.01, Description = "测试交易", TradeID = Guid.NewGuid().ToString("N"), TradeName = "myTradeName", AuthCode = "oysxe0Y95B27OyL1b1OLOuRAXyks",//openid NotifyDomain = "http://tan.xododo.com", ReturnUrl = "http://test" }; try { var url = pay.BeginPay(parameter); } catch (PayServerReportException) { } catch { throw; } }
public void LianTuo_WeixinBarcode() { var pay = PayFactory.CreatePay(PayInterfaceType.LianTuoWeixinBarcode); var parameter = new PayParameter() { Amount = 0.01, Description = "测试交易", TradeID = Guid.NewGuid().ToString("N"), TradeName = "myTradeName", AuthCode = "134731850825699894",//客户出示的二维码 Timeout = 15, }; try { pay.BeginPay(parameter); Thread.Sleep(10000); } catch (PayServerReportException) { } catch { throw; } }
public void LianTuo_WeixinJSApi() { var pay = PayFactory.CreatePay(PayInterfaceType.LianTuoWeixinJSApi); var parameter = new PayParameter() { Amount = 0.01, Description = "测试交易", TradeID = Guid.NewGuid().ToString("N"), TradeName = "myTradeName", AuthCode = "oLNmRjrZe5hqTd0eXMvZQTUBjR94",//open id Timeout = 15, }; try { pay.BeginPay(parameter); Thread.Sleep(10000); } catch (PayServerReportException) { } catch { throw; } }
public TaskStatus Handle(IHttpProxy httpProxy) { using (Log log = new Log("CailutongGateway.Notify_RequestHandler")) { try { string json = httpProxy.ReadRequestBody(); log.Log(json); SortedDictionary <string, object> dict = Newtonsoft.Json.JsonConvert.DeserializeObject <SortedDictionary <string, object> >(json); string outTradeNo = (string)dict["outTradeNo"]; var config = new Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.CailutongBTC, outTradeNo)); if (Cailutong_Helper.Sign(dict, config.Secret) != (string)dict["sign"]) { throw new Exception("校验失败"); } var status = Convert.ToInt32(dict["status"]); if (status == 2) { PayFactory.OnPaySuccessed(outTradeNo, Convert.ToDouble(dict["payedAmount"]), null, json); } httpProxy.ResponseWrite("{\"status\":\"success\"}"); } catch (Exception ex) { log.Log(ex.ToString()); } } return(TaskStatus.Completed); }
public TaskStatus Handle(IHttpProxy httpProxy) { var json = httpProxy.Form["request"]; try { using (CLog log = new CLog("IPaysoonNotify Notify")) { log.Log(json); var result = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(json); if (result["resultCode"].ToString() == "0000" && result["statusId"].ToString() == "14") { var tradid = result["merchantGenCode"].ToString(); var charge = Convert.ToDouble(result["charge"].ToString()) / 100.0; var amount = Convert.ToDouble(result["amount"].ToString()) / 100.0; log.Log("tradid:{0} charge:{1} amount:{2}", tradid, charge, amount); log.Log("excute OnPaySuccessed"); PayFactory.OnPaySuccessed(tradid, amount - charge, null, json); } httpProxy.ResponseWrite("SUCCESS"); } } catch (Exception ex) { using (CLog log = new CLog("IPaysoon Notify error ")) { log.Log(ex.ToString()); } } return(TaskStatus.Completed); }
public void AlipayWeb_Test() { var pay = PayFactory.CreatePay(PayInterfaceType.AlipayWeb); var parameter = new PayParameter() { Amount = 0.01, Description = "测试交易", TradeID = Guid.NewGuid().ToString("N"), TradeName = "myTradeName", Timeout = 30, }; try { var code = pay.BeginPay(parameter); pay.CheckPayState(parameter); } catch (PayServerReportException) { } catch { throw; } }
public void WeiXinH5_Test() { var pay = PayFactory.CreatePay(PayInterfaceType.WeiXinH5); var parameter = new PayParameter() { Amount = 0.01, Description = "测试交易", TradeID = Guid.NewGuid().ToString("N"), TradeName = "myTradeName", Timeout = 30, AuthCode = "20.168.3.8",//客户端ip }; try { var url = pay.BeginPay(parameter); pay.CheckPayState(parameter); } catch (PayServerReportException) { } catch { throw; } }
public override string BeginPay(PayParameter parameter) { var config = PayFactory.GetConfig <Config>(this.GetType(), parameter.TradeID); var head = new Dictionary <string, object>(); head["service"] = ServiceType; var body = new Dictionary <string, object>(); body["merchant_no"] = config.merchant_id; body["channel_type"] = ChannelType; body["out_trade_no"] = parameter.TradeID; body["total_amount"] = parameter.Amount.ToString(); body["subject"] = parameter.TradeName; body["spbill_create_ip"] = "8.8.8.8"; body["auth_code"] = parameter.AuthCode; var strResult = LianTuo_Helper.PostJsonReturnString(config, URL, head, body, parameter.RequestTimeout); PayFactory.OnLog(parameter.TradeID, LogEventType.ReceivePayResult, strResult); var responseObj = Newtonsoft.Json.JsonConvert.DeserializeObject <ResponseObject>(strResult); string serverSign = responseObj.head["sign"].ToString(); if (LianTuo_Helper.Sign(config.key, responseObj.head, responseObj.body) != serverSign) { throw new Exception("服务器返回信息签名检验失败"); } if ((string)responseObj.body["is_success"] == "S") { double?receipt_amount = null; try { if (responseObj.body["receipt_amount"] != null) { receipt_amount = Convert.ToDouble(responseObj.body["receipt_amount"]); } } catch { } PayFactory.OnPaySuccessed(parameter.TradeID, receipt_amount, null, strResult); } else if ((string)responseObj.body["is_success"] == "F") { throw new Exception((string)responseObj.body["message"]); } else if ((string)responseObj.body["is_success"] == "P") { new Thread(() => { CheckPayStateInLoop(parameter); }).Start(); } return(null); }
public override bool CheckPayState(PayParameter parameter) { var attrs = this.GetType().GetCustomAttributes(typeof(PayInterfaceAttribute), false); //获取当前接口类型 var myInterfaceType = ((PayInterfaceAttribute)attrs[0]).InterfaceType; var config = new Config(PayFactory.GetInterfaceXmlConfig(myInterfaceType, parameter.TradeID)); Dictionary <string, object> postDict = new Dictionary <string, object>(); postDict["merchantCode"] = config.merchantCode; postDict["operatorCode"] = config.operatorCode; postDict["businessCode"] = this.BusinessCode; var detail = new Dictionary <string, string> { { "merchantGenCode", parameter.TradeID }, { "operatorCode", config.operatorCode }, }; postDict["detail"] = new object[] { detail }; string json = Newtonsoft.Json.JsonConvert.SerializeObject(postDict); string queryStr = $"request={WebUtility.UrlEncode(json)}"; var result = Helper.PostQueryString(QueryUrl, queryStr, parameter.RequestTimeout); var resultDict = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(result); if (resultDict["resultCode"].ToString() == "0000") { var resultDetail = (Newtonsoft.Json.Linq.JArray)resultDict["detail"]; if (resultDetail[0]["statusId"].ToString() == "14") { var charge = Convert.ToDouble(resultDetail[0]["charge"].ToString()) / 100.0; var amount = Convert.ToDouble(resultDetail[0]["charge"].ToString()) / 100.0; PayFactory.OnPaySuccessed(parameter.TradeID, amount - charge, null, result); return(true); } else if (resultDetail[0]["statusId"].ToString() == "3") { PayFactory.OnPayFailed(parameter.TradeID, "订单已打回", result); return(true); } else if (resultDetail[0]["statusId"].ToString() == "12") { PayFactory.OnPayFailed(parameter.TradeID, "通道提交失败", result); return(true); } else if (resultDetail[0]["statusId"].ToString() == "15") { PayFactory.OnPayFailed(parameter.TradeID, "处理失败", result); return(true); } } return(false); }
public void AlipayRefund_Test() { var pay = PayFactory.CreatePay(PayInterfaceType.AlipayBarcode); var result = pay.Refund(new RefundParameter() { Amount = 0.01, TradeID = "5a0d7698e94f475c9e4113fc9dea9b4b", }); }
public override bool CheckPayState(PayParameter parameter) { var config = PayFactory.GetConfig <Config>(this.GetType(), parameter.TradeID); var head = new Dictionary <string, object>(); head["service"] = "front.query"; var body = new Dictionary <string, object>(); body["out_trade_no"] = parameter.TradeID; var strResult = LianTuo_Helper.PostJsonReturnString(config, URL, head, body, parameter.RequestTimeout); var responseObj = Newtonsoft.Json.JsonConvert.DeserializeObject <ResponseObject>(strResult); string serverSign = responseObj.head["sign"].ToString(); if (LianTuo_Helper.Sign(config.key, responseObj.head, responseObj.body) != serverSign) { throw new Exception("服务器返回信息签名检验失败"); } if ((string)responseObj.body["is_success"] == "S") { if ((string)responseObj.body["trade_status"] == "success") { double?receipt_amount = null; try { if (responseObj.body["receipt_amount"] != null) { receipt_amount = Convert.ToDouble(responseObj.body["receipt_amount"]); } } catch { } PayFactory.OnPaySuccessed(parameter.TradeID, receipt_amount, null, strResult); return(true); } else if ((string)responseObj.body["trade_status"] == "fail") { PayFactory.OnPayFailed(parameter.TradeID, (string)responseObj.body["trade_error_msg"], strResult); return(true); } else if ((string)responseObj.body["trade_status"] == "closed") { throw new Exception("订单已关闭"); } else if ((string)responseObj.body["trade_status"] == "cancel") { throw new Exception("订单已取消"); } } return(false); }
public override string BeginPay(PayParameter parameter) { var config = new Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.AlipayWeb, parameter.TradeID)); SortedDictionary <string, string> postDict = new SortedDictionary <string, string>(); postDict["app_id"] = config.appid; postDict["method"] = Method; postDict["charset"] = "utf-8"; postDict["sign_type"] = "RSA"; postDict["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); postDict["version"] = "1.0"; if (string.IsNullOrEmpty(parameter.NotifyDomain) == false) { if (!string.IsNullOrEmpty(parameter.ReturnUrl)) { postDict["return_url"] = $"{parameter.NotifyDomain}/{AlipayReturn_RequestHandler.ReturnPageName}?returnUrl={System.Web.HttpUtility.UrlEncode(parameter.ReturnUrl)}"; } postDict["notify_url"] = $"{parameter.NotifyDomain}/{AlipayNotify_RequestHandler.NotifyPageName}"; } var bizParameters = new SortedDictionary <string, string> { { "out_trade_no", parameter.TradeID }, { "subject", parameter.TradeName }, { "body", parameter.Description }, { "total_amount", parameter.Amount.ToString("0.00") }, { "undiscountable_amount", "0" }, { "timeout_express", Math.Max(1, parameter.Timeout / 60) + "m" }, { "product_code", "FAST_INSTANT_TRADE_PAY" }, }; postDict["biz_content"] = Newtonsoft.Json.JsonConvert.SerializeObject(bizParameters); //获取签名的内容 var signContent = Helper.GetUrlString(postDict); var rsa = Way.Lib.RSA.CreateRsaFromPrivateKey(config.merchantPrivateKey, Way.Lib.RSAKeyType.PKCS1); rsa.KeySize = 1024; var signatureBytes = rsa.SignData(Encoding.UTF8.GetBytes(signContent), HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); // 把密文加入提交的参数列表中 postDict["sign"] = Convert.ToBase64String(signatureBytes); //var result = Helper.PostQueryString(ServerUrl, Helper.BuildQuery(postDict), parameter.RequestTimeout ); var body = BuildHtmlFormRequest(postDict, "POST"); //先把jsonStr保存成一个临时文件 string tranid = Guid.NewGuid().ToString("N"); string tempFile = $"{Helper.GetSaveFilePath()}\\{tranid}.txt"; System.IO.File.WriteAllText(tempFile, body, Encoding.UTF8); return($"{parameter.NotifyDomain}/{AlipayPostPage_RequestHandler.PageName}?tranId={tranid}"); }
/// <summary> /// 根据TradeID检查支付状态 /// </summary> public virtual void CheckPayState(PayParameter parameter) { try { Config config = new Alipay.Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.AlipayBarcode, parameter.TradeID)); checkPayStateByConfig(parameter, config); } catch { } }
/// <summary> /// 检查订单状态 /// </summary> public virtual void CheckPayState(PayParameter parameter) { try { WxPayConfig config = new WxPayAPI.WxPayConfig(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.WeiXinBarcode, parameter.TradeID)); checkPayStateByConfig(parameter, config); } catch { } }
public override string BeginPay(PayParameter parameter) { var config = new Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.WeiXinBarcode, parameter.TradeID)); SortedDictionary <string, string> postDict = new SortedDictionary <string, string>(); postDict["appid"] = config.AppID; postDict["mch_id"] = config.MchID; postDict["nonce_str"] = Guid.NewGuid().ToString().Replace("-", ""); //随机字符串 postDict["body"] = parameter.Description; //商品描述 postDict["out_trade_no"] = parameter.TradeID; postDict["total_fee"] = ((int)(parameter.Amount * 100)).ToString(); //单位:分 postDict["spbill_create_ip"] = "8.8.8.8"; //终端ip postDict["auth_code"] = parameter.AuthCode; postDict["sign_type"] = "MD5"; postDict["sign"] = Helper.GetMd5Hash(postDict, config.Key); var xml = ToXml(postDict); var result = Helper.PostXml(ServerUrl, xml, parameter.RequestTimeout); PayFactory.OnLog(parameter.TradeID, LogEventType.ReceivePayResult, result); XDocument xmldoc = XDocument.Parse(result); WeiXinScanQRCode.CheckSign(xmldoc, config); var return_code = xmldoc.Root.XPathSelectElement("return_code").Value; var return_msg = xmldoc.Root.XPathSelectElement("return_msg").Value; if (return_code == "FAIL") { throw new Exception(return_msg); } else if (return_code == "SUCCESS" && return_msg == "OK") { if (xmldoc.Root.XPathSelectElement("result_code").Value == "SUCCESS") { //确定付款成功 PayFactory.OnPaySuccessed(parameter.TradeID, null, null, result); } else if (xmldoc.Root.XPathSelectElement("err_code").Value != "USERPAYING" && xmldoc.Root.XPathSelectElement("result_code").Value == "FAIL" && xmldoc.Root.XPathSelectElement("err_code_des") != null) { throw new PayServerReportException(xmldoc.Root.XPathSelectElement("err_code_des").Value); } else { new Thread(() => { CheckPayStateInLoop(parameter); }).Start(); } } return(null); }
public virtual RefoundResult Refound(RefoundParameter parameter) { if (parameter.TradeID.IsNullOrEmpty()) { throw new Exception("TradeID is null"); } Config config = new Alipay.Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.AlipayBarcode, parameter.TradeID)); var serviceClient = config.AppConfig.CreateClientInstance(); AlipayTradeRefundContentBuilder builder = new AlipayTradeRefundContentBuilder(); //支付宝交易号与商户网站订单号不能同时为空 builder.out_trade_no = parameter.TradeID; //退款金额 builder.refund_amount = parameter.Amount.ToString(); builder.refund_reason = parameter.Reason; AlipayF2FRefundResult refundResult = serviceClient.tradeRefund(builder); RefoundResult finallyResult = new RefoundResult(); //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— switch (refundResult.Status) { case ResultEnum.SUCCESS: finallyResult.Result = RefoundResult.ResultEnum.SUCCESS; finallyResult.ServerMessage = refundResult.response.Body; break; case ResultEnum.FAILED: finallyResult.Result = RefoundResult.ResultEnum.FAIL; finallyResult.ServerMessage = refundResult.response.Body; finallyResult.Error = refundResult.response.SubMsg; break; case ResultEnum.UNKNOWN: finallyResult.Result = RefoundResult.ResultEnum.FAIL; if (refundResult.response == null) { finallyResult.Error = "配置或网络异常,请检查"; } else { finallyResult.Error = "系统异常,请走人工退款流程"; } break; } return(finallyResult); }
private void handleNotify() { using (CLog log = new CLog("weixin scan handleNotify ")) { WxPayData notifyData = GetNotifyData(); string json = notifyData.ToJson(); log.Log("xml:{0}", json); string out_trade_no = notifyData.GetValue("out_trade_no").ToString(); PayFactory.OnLog(out_trade_no, json); WxPayConfig config = new WxPayAPI.WxPayConfig(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.WeiXinScanQRCode, out_trade_no)); try { notifyData.CheckSign(config); } catch (WxPayException ex) { log.Log("签名错误"); //若签名错误,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", ex.Message); Response.Write(res.ToXml()); Response.End(); } string result_code = notifyData.GetValue("result_code").ToString(); string return_code = notifyData.GetValue("return_code").ToString(); //out_trade_no result_code return_code if (result_code == "SUCCESS" && return_code == "SUCCESS") { PayFactory.OnPaySuccessed(out_trade_no, json); WxPayData data = new WxPayData(); data.SetValue("return_code", "SUCCESS"); data.SetValue("return_msg", "OK"); data.SetValue("appid", config.APPID); data.SetValue("mch_id", config.MCHID); data.SetValue("result_code", "SUCCESS"); data.SetValue("err_code_des", "OK"); data.SetValue("sign", data.MakeSign(config)); //log.Log("write to weixin:{0}", data.ToJson()); Response.Write(data.ToXml()); } } }
public override RefundResult Refund(RefundParameter parameter) { var config = new Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.AlipayBarcode, parameter.TradeID)); SortedDictionary <string, string> postDict = new SortedDictionary <string, string>(); postDict["app_id"] = config.appid; postDict["method"] = "alipay.trade.refund"; postDict["charset"] = "utf-8"; postDict["sign_type"] = "RSA"; postDict["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); postDict["version"] = "1.0"; var bizParameters = new SortedDictionary <string, string> { { "out_trade_no", parameter.TradeID }, { "refund_amount", parameter.Amount.ToString("0.00") }, }; postDict["biz_content"] = Newtonsoft.Json.JsonConvert.SerializeObject(bizParameters); //获取签名的内容 var signContent = Helper.GetUrlString(postDict); var rsa = Way.Lib.RSA.CreateRsaFromPrivateKey(config.merchantPrivateKey, Way.Lib.RSAKeyType.PKCS1); rsa.KeySize = 1024; var signatureBytes = rsa.SignData(Encoding.UTF8.GetBytes(signContent), HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); // 把密文加入提交的参数列表中 postDict["sign"] = Convert.ToBase64String(signatureBytes); var result = Helper.PostQueryString(ServerUrl, Helper.BuildQuery(postDict), 15); // 把json结果转为对象 var refundResult = Newtonsoft.Json.JsonConvert.DeserializeObject <AlipayTradeRefundResult>(result); CheckSign(result, "alipay_trade_refund_response", refundResult.sign, config); if (refundResult.alipay_trade_refund_response.code == "10000") { return(new RefundResult() { Result = RefundResult.ResultEnum.SUCCESS, ServerMessage = result, }); } return(new RefundResult() { Result = RefundResult.ResultEnum.FAIL, ServerMessage = result, }); }
bool checkPayStateByConfig(PayParameter parameter, Config config) { IAlipayTradeService serviceClient = config.AppConfig.CreateClientInstance(); var result = serviceClient.tradeQuery(parameter.TradeID); PayFactory.OnLog(parameter.TradeID, result.response.Body); if (result.Status == ResultEnum.SUCCESS) { PayFactory.OnPaySuccessed(parameter.TradeID, result.response.Body); return(true); } return(false); }
public override bool CheckPayState(PayParameter parameter) { var config = new Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.AlipayBarcode, parameter.TradeID)); SortedDictionary <string, string> postDict = new SortedDictionary <string, string>(); postDict["app_id"] = config.appid; postDict["method"] = "alipay.trade.query"; postDict["charset"] = "utf-8"; postDict["sign_type"] = "RSA"; postDict["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); postDict["version"] = "1.0"; var bizParameters = new SortedDictionary <string, string> { { "out_trade_no", parameter.TradeID }, }; postDict["biz_content"] = Newtonsoft.Json.JsonConvert.SerializeObject(bizParameters); //获取签名的内容 var signContent = Helper.GetUrlString(postDict); var rsa = Way.Lib.RSA.CreateRsaFromPrivateKey(config.merchantPrivateKey, Way.Lib.RSAKeyType.PKCS1); rsa.KeySize = 1024; var signatureBytes = rsa.SignData(Encoding.UTF8.GetBytes(signContent), HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); // 把密文加入提交的参数列表中 postDict["sign"] = Convert.ToBase64String(signatureBytes); var result = Helper.PostQueryString(ServerUrl, Helper.BuildQuery(postDict), parameter.RequestTimeout); PayFactory.OnLog(parameter.TradeID, LogEventType.ReceivePayResult, result); // 把json结果转为对象 var payResult = Newtonsoft.Json.JsonConvert.DeserializeObject <AlipayTradeQueryResult>(result); CheckSign(result, "alipay_trade_query_response", payResult.sign, config); if (payResult.alipay_trade_query_response.code == "10000" && (payResult.alipay_trade_query_response.trade_status == "TRADE_SUCCESS" || payResult.alipay_trade_query_response.trade_status == "TRADE_FINISHED")) { //明确交易成功了 PayFactory.OnPaySuccessed(parameter.TradeID, payResult.alipay_trade_query_response.receipt_amount, null, result); return(true); } return(false); }
public TaskStatus Handle(IHttpProxy httpProxy) { try { var requestJson = httpProxy.Form["requestJson"]; if (!string.IsNullOrEmpty(requestJson)) { var responseObj = Newtonsoft.Json.JsonConvert.DeserializeObject <ResponseObject>(requestJson); var tradeId = responseObj.body["out_trade_no"].ToString(); var config = PayFactory.GetConfig <Config>(typeof(LianTuo_WeixinJsApi), tradeId); string serverSign = responseObj.head["sign"].ToString(); if (LianTuo_Helper.Sign(config.key, responseObj.head, responseObj.body) != serverSign) { throw new Exception("服务器返回信息签名检验失败"); } if ((string)responseObj.body["is_success"] == "S") { double?receipt_amount = null; try { if (responseObj.body["receipt_amount"] != null) { receipt_amount = Convert.ToDouble(responseObj.body["receipt_amount"]); } } catch { } PayFactory.OnPaySuccessed(tradeId, receipt_amount, null, requestJson); } else if ((string)responseObj.body["is_success"] == "F") { PayFactory.OnPayFailed(tradeId, (string)responseObj.body["message"], requestJson); } } httpProxy.ResponseWrite("success"); } catch (Exception ex) { using (Log log = new Log("Jack.Pay.LianTuo.WXJSApi.Result Error", false)) { log.Log(ex.ToString()); log.LogJson(httpProxy.Form); } } return(TaskStatus.Completed); }