Пример #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 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;
            }
        }
Пример #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 override string BeginPay(PayParameter parameter)
        {
            var config = getConfig(parameter.TradeID);

            SortedDictionary <string, object> postDict = new SortedDictionary <string, object>();

            postDict["account"]    = config.Account;
            postDict["outTradeNo"] = parameter.TradeID;
            postDict["amount"]     = parameter.Amount;
            if (string.IsNullOrEmpty(parameter.NotifyDomain) == false)
            {
                postDict["notifyUrl"] = $"{parameter.NotifyDomain}/{Notify_RequestHandler.NotifyPageName}";
            }
            postDict["currency"] = "BTC";
            postDict["sign"]     = Cailutong_Helper.Sign(postDict, config.Secret);
            var result     = Helper.PostJsonString(Url, Newtonsoft.Json.JsonConvert.SerializeObject(postDict), 8000);
            var resultDict = Newtonsoft.Json.JsonConvert.DeserializeObject <SortedDictionary <string, object> >(result);

            if (Cailutong_Helper.Sign(resultDict, config.Secret) != (string)resultDict["sign"])
            {
                throw new Exception("服务器返回的数据校验失败");
            }

            if ((string)resultDict["status"] == "error")
            {
                throw new Exception((string)resultDict["errMsg"]);
            }

            return($"bitcoin:{resultDict["targetAddress"]}");
        }
Пример #6
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;
            }
        }
Пример #7
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;
            }
        }
Пример #8
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;
            }
        }
Пример #9
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;
            }
        }
Пример #10
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;
            }
        }
Пример #11
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;
            }
        }
Пример #12
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;
            }
        }
Пример #13
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;
            }
        }
Пример #14
0
        private AlipayTradePayContentBuilder BuildPayContent(Config config, PayParameter parameter)
        {
            AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder();

            builder.out_trade_no          = parameter.TradeID;
            builder.scene                 = "bar_code";
            builder.auth_code             = parameter.AuthCode;
            builder.total_amount          = parameter.Amount.ToString();
            builder.discountable_amount   = parameter.Amount.ToString();
            builder.undiscountable_amount = "0";
            builder.operator_id           = "test";
            builder.subject               = "条码支付";
            if (parameter.ExpireTime != DateTime.MinValue)
            {
                var minutes = Convert.ToInt32((parameter.ExpireTime - DateTime.Now).TotalMinutes);
                builder.timeout_express = Math.Max(1, minutes) + "m";
            }
            else
            {
                //默认2分钟
                builder.timeout_express = "2m";
            }
            builder.body      = parameter.TradeName == null ? parameter.Description : parameter.TradeName;
            builder.store_id  = "";                   //很重要的参数,可以用作之后的营销
            builder.seller_id = config.AppConfig.pid; //可以是具体的收款账号。

            builder.goods_detail = new List <Com.Alipay.Model.GoodsInfo>();
            //扩展参数
            //系统商接入可以填此参数用作返佣
            //ExtendParams exParam = new ExtendParams();
            //exParam.sysServiceProviderId = "20880000000000";
            //builder.extendParams = exParam;

            return(builder);
        }
Пример #15
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;
            }
        }
Пример #16
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);
        }
Пример #17
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);
        }
Пример #18
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}");
        }
        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);
        }
Пример #20
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
     {
     }
 }
Пример #21
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
     {
     }
 }
Пример #22
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);
        }
Пример #23
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);
        }
Пример #24
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);
        }
Пример #25
0
        public void test()
        {
            var request   = Request;
            var pay       = PayFactory.CreatePay(PayInterfaceType.LianTuoWeixinJSApi);
            var parameter = new PayParameter()
            {
                Amount      = 0.01,
                Description = "测试交易",
                TradeID     = Guid.NewGuid().ToString("N"),
                TradeName   = "myTradeName",
                AuthCode    = "oXenWt_-ULS1e5Mafl8pYpw1Y5j8",
                ReturnUrl   = "http://caiyun.xododo.net/home/weixinBack"
            };

            Response.Redirect(pay.BeginPay(parameter));
        }
Пример #26
0
        public void alipayWeb()
        {
            var pay       = PayFactory.CreatePay(PayInterfaceType.AlipayWeb);
            var parameter = new PayParameter()
            {
                Amount      = 0.01,
                Description = "测试交易",
                TradeID     = Guid.NewGuid().ToString("N"),
                TradeName   = "myTradeName",
                ReturnUrl   = "http://caiyun.xododo.net/home/weixinBack",
            };

            var url = pay.BeginPay(parameter);

            Response.Redirect(url);
        }
Пример #27
0
        public override bool CheckPayState(PayParameter parameter)
        {
            var config = new Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.WeiXinScanQRCode, parameter.TradeID));
            SortedDictionary <string, string> postDict = new SortedDictionary <string, string>();

            postDict["appid"]        = config.AppID;
            postDict["mch_id"]       = config.MchID;
            postDict["out_trade_no"] = parameter.TradeID;
            postDict["nonce_str"]    = Guid.NewGuid().ToString().Replace("-", "");//随机字符串
            postDict["sign_type"]    = "MD5";
            postDict["sign"]         = Helper.GetMd5Hash(postDict, config.Key);

            var xml = ToXml(postDict);

            var       result = Helper.PostXml(QueryUrl, xml, parameter.RequestTimeout);
            XDocument xmldoc = XDocument.Parse(result);

            CheckSign(xmldoc, config);

            var return_code = xmldoc.Root.XPathSelectElement("return_code").Value;
            var return_msg  = xmldoc.Root.XPathSelectElement("return_msg").Value;

            if (return_code == "SUCCESS" && return_msg == "OK")
            {
                if (xmldoc.Root.XPathSelectElement("err_code_des") != null)
                {
                    throw new PayServerReportException(xmldoc.Root.XPathSelectElement("err_code_des").Value);
                }

                var trade_state = xmldoc.Root.XPathSelectElement("trade_state").Value;
                if (trade_state == "SUCCESS")
                {
                    PayFactory.OnPaySuccessed(parameter.TradeID, null, null, result);
                    return(true);
                }
                else
                {
                    if (trade_state == "PAYERROR" || trade_state == "REVOKED")
                    {
                        var trade_state_desc = xmldoc.Root.XPathSelectElement("trade_state_desc").Value;
                        PayFactory.OnPayFailed(parameter.TradeID, trade_state_desc, result);
                        return(true);
                    }
                }
            }
            return(false);
        }
Пример #28
0
        public void bboqi_weixinTest()
        {
            var pay       = PayFactory.CreatePay(PayInterfaceType.BboqiWeiXinJSApi);
            var parameter = new PayParameter()
            {
                Amount      = 0.01,
                Description = "测试交易",
                TradeID     = Guid.NewGuid().ToString("N"),
                TradeName   = "myTradeName",
                AuthCode    = "oysxe0Y95B27OyL1b1OLOuRAXyks",//openid
                ReturnUrl   = "http://caiyun.xododo.net/home/weixinBack",
            };

            var url = pay.BeginPay(parameter);

            Response.Redirect(url);
        }
Пример #29
0
        public IActionResult WeixinH5()
        {
            var pay = PayFactory.CreatePay(PayInterfaceType.WeiXinH5);

            var parameter = new PayParameter()
            {
                Amount      = 0.01,
                Description = "测试交易",
                TradeID     = Guid.NewGuid().ToString("N"),
                TradeName   = "myTradeName",
                Timeout     = 180,
                AuthCode    = GetUserIp(Request.HttpContext),
            };
            var url = pay.BeginPay(parameter);

            return(Content("<script>location.href='" + url + "';</script>", "text/html"));
        }
Пример #30
0
        public void weixinTest()
        {
            var pay       = PayFactory.CreatePay(PayInterfaceType.WeiXinJSApi);
            var parameter = new PayParameter()
            {
                Amount      = 0.01,
                Description = "测试交易",
                TradeID     = Guid.NewGuid().ToString("N"),
                TradeName   = "myTradeName",
                AuthCode    = "oZX1SwBVE3Ee8KOrQRPfYlhk2OFc",//openid
                ReturnUrl   = "http://caiyun.xododo.net/home/weixinBack",
            };

            var url = pay.BeginPay(parameter);

            Response.Redirect(url);
        }