Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        /// <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)));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }