public TradeResult PayQuery(TradeQueryRequest tradequeryreq) { //////////////////////////////////////////////////////////////////////////////////////////////// //把请求参数打包成数组 SortedDictionary <string, string> sParaTemp = new SortedDictionary <string, string>(); sParaTemp.Add("partner", Config.Partner); sParaTemp.Add("_input_charset", Config.Input_charset.ToLower()); sParaTemp.Add("service", "single_trade_query"); sParaTemp.Add("trade_no", null); sParaTemp.Add("out_trade_no", tradequeryreq.TradeNO); //建立请求 string sHtmlText = Submit.BuildRequest(sParaTemp); //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(sHtmlText); string strXmlResponse = xmlDoc.SelectSingleNode("/alipay").InnerText; logger.Debug(strXmlResponse); string successstr = xmlDoc.SelectSingleNode("/alipay/is_success").InnerText; var paystatus = successstr.ToUpper() == "T" ? PayStatus.Paid : PayStatus.UnPaid; string createtime = xmlDoc.SelectSingleNode("/alipay/response/trade/gmt_create").InnerText; if (string.IsNullOrEmpty(createtime)) { paystatus = PayStatus.Unavailable; } string buyer = ""; string total_fee = ""; string paytime = ""; if (paystatus == PayStatus.Paid) { buyer = xmlDoc.SelectSingleNode("/alipay/response/trade/buyer_email").InnerText; total_fee = xmlDoc.SelectSingleNode("/alipay/response/trade/total_fee").InnerText; paytime = xmlDoc.SelectSingleNode("/alipay/response/trade/gmt_payment").InnerText; } TradeResult t = new TradeResult() { Code = 1, TradeNO = tradequeryreq.TradeNO, PayStatus = paystatus, CreateTime = Convert.ToDateTime(createtime), PayAccount = buyer, PayAmount = Convert.ToDecimal(total_fee), PayTime = Convert.ToDateTime(paytime) }; return(t); }
/// <summary> /// 交易查询 /// </summary> /// <param name="outTradeNo"></param> /// <param name="tradeNo"></param> /// <returns></returns> public async Task <OkObjectResult> TradeQuery(string outTradeNo, string tradeNo) { var request = new TradeQueryRequest(); request.AddParameters(new { TradeNo = tradeNo, OutTradeNo = outTradeNo, }); return(Ok(await _client.ExecuteAsync(request))); }
public TradeResult PayQuery(TradeQueryRequest traderequest) { bool tradesuccess = false; // 请求要素 Dictionary <String, String> req = new Dictionary <String, String>(); req["version"] = UpmpConfig.GetInstance().VERSION; // 版本号 req["charset"] = UpmpConfig.GetInstance().CHARSET; // 字符编码 req["transType"] = "01"; // 交易类型 req["merId"] = UpmpConfig.GetInstance().MER_ID; // 商户代码 req["orderTime"] = traderequest.TradeDate.ToString("yyyyMMddHHmmss"); // 交易开始日期时间yyyyMMddHHmmss req["orderNumber"] = traderequest.TradeNO; // 订单号(商户根据自己需要生成订单号) Dictionary <String, String> resp = new Dictionary <String, String>(); if (UpmpService.Query(req, resp)) { // 服务器应答签名验证成功 if (resp["respCode"] == "00" && resp.ContainsKey("transStatus") && resp["transStatus"] == "00") { //StringBuilder rsinpfo = new StringBuilder(); //StringBuilder sbreq = new StringBuilder(); //foreach (var item in req.Keys) //{ // sbreq.Append(item + "=" + req[item] + "&"); //} //StringBuilder sbresp = new StringBuilder(); //foreach (var item in resp.Keys) //{ // sbresp.Append(item + "=" + resp[item] + "&"); //} //System.Diagnostics.Debug.WriteLine(sbreq.ToString()); //System.Diagnostics.Debug.WriteLine(sbresp.ToString()); tradesuccess = true; } } TradeResult t = new TradeResult() { Code = 1, TradeNO = traderequest.TradeNO, PayStatus = tradesuccess ? PayStatus.Paid : PayStatus.UnPaid }; return(t); }
public TradeResult PayQuery(TradeQueryRequest traderequest) { PayQueryPackage queryP = new PayQueryPackage() { MerId = NetConfig.merId, OrdId = FormatHelper.AddZero(traderequest.TradeNO, 16, '0', false), Resv = "", TransDate = traderequest.TradeDate.ToString("yyyyMMdd"), TransType = "0001", Version = NetConfig.queryVersion }; string plain = queryP.MerId + queryP.TransDate + queryP.OrdId + queryP.TransType; queryP.ChkValue = SignData.sign(queryP.MerId, plain); string reqStr = "MerId=" + queryP.MerId + "&TransType=" + queryP.TransType + "&OrdId=" + queryP.OrdId + "&TransDate=" + queryP.TransDate + "&Version=" + queryP.Version + "&Resv=" + queryP.Resv + "&ChkValue=" + queryP.ChkValue; logger.Debug("开始向银联发起交易查询请求," + reqStr); string netresponse = HttpHelper.HttpPost(reqStr, "http://console.chinapay.com/QueryWeb/processQuery.jsp", Encoding.GetEncoding("gb2312")); logger.Debug("银联查询应答:" + netresponse); //根据银联应答获取支付信息,并更新交易表 int j = netresponse.IndexOf("ResponeseCode="); Regex r = new Regex(@"ResponeseCode=(?<code>\w*)&", RegexOptions.IgnoreCase | RegexOptions.Multiline); var m = r.Match(netresponse); string responseCode = ""; TradeResult t = new TradeResult() { PayStatus = PayStatus.UnPaid }; if (m.Success) { responseCode = m.Groups["code"].Value; if (responseCode == "0" || responseCode == "00") { int statusindex = netresponse.IndexOf("status="); var status = netresponse.Substring(statusindex + 7, 4); if (status == "1001") { t.PayStatus = PayStatus.Paid; } } } if (responseCode != "305")//没有超出银联的查询时间间隔时无法进行查询,此时不做处理,以确保下次查询可以再次查询该笔订单 { t.Code = 1; } else { t.Code = -1; Console.WriteLine("[" + DateTime.Now + "]流量超限,稍后查询"); } return(t); }