示例#1
0
        /// <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);
        }
示例#2
0
        /// <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
            {
            }
        }
示例#3
0
        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;
            }
        }
示例#4
0
        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;
            }
        }
示例#5
0
        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;
            }
        }
示例#6
0
        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);
        }
示例#7
0
        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;
            }
        }
示例#8
0
        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;
            }
        }
示例#9
0
        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;
            }
        }
示例#10
0
        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;
            }
        }
示例#11
0
        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;
            }
        }
示例#12
0
        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;
            }
        }
示例#13
0
        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);
        }
示例#15
0
        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;
            }
        }
示例#16
0
        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;
            }
        }
示例#17
0
        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);
        }
示例#19
0
 public void AlipayRefund_Test()
 {
     var pay    = PayFactory.CreatePay(PayInterfaceType.AlipayBarcode);
     var result = pay.Refund(new RefundParameter()
     {
         Amount  = 0.01,
         TradeID = "5a0d7698e94f475c9e4113fc9dea9b4b",
     });
 }
示例#20
0
        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);
        }
示例#21
0
        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}");
        }
示例#22
0
 /// <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
     {
     }
 }
示例#23
0
 /// <summary>
 /// 检查订单状态
 /// </summary>
 public virtual void CheckPayState(PayParameter parameter)
 {
     try
     {
         WxPayConfig config = new WxPayAPI.WxPayConfig(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.WeiXinBarcode, parameter.TradeID));
         checkPayStateByConfig(parameter, config);
     }
     catch
     {
     }
 }
示例#24
0
        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);
        }
示例#25
0
        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);
        }
示例#26
0
        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());
                }
            }
        }
示例#27
0
        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,
            });
        }
示例#28
0
        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);
        }
示例#29
0
        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);
        }