/// <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 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 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 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"]}"); }
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 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 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_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_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 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 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 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; } }
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); }
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 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 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}"); }
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); }
/// <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); }
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 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)); }
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); }
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); }
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); }
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")); }
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); }