• 工行支付api查询asp.net C# 实现


    工行的测试环境真是非常地烂,给的api查询居然是c++的,还写着dotnet的名字,这里我给出一个asp.net c#的实现

    public class ICBC_API
    {
        
    static string apiUrl = "https://corporbank3.dccnet.com.cn/servlet/ICBCINBSEBusinessServlet";
        
    static string cerPath = ConfigurationManager.AppSettings["CertPath"];
        
    static string cerPwd = ConfigurationManager.AppSettings["CertPwd"];
        
    public ICBC_API()
        {
        }

        
    /// <summary>
        
    /// 订单查询
        
    /// </summary>
        
    /// <param name="orderNum">订单号</param>
        
    /// <param name="tradeDate">订单日期(yyyyMMdd)</param>
        
    /// <param name="shopCode">商户代码</param>
        
    /// <param name="shopAccount">商户帐号</param>
        
    /// <returns></returns>
        public static string B2C(string orderNum,string tradeDate,string shopCode,string shopAccount)
        {
            
    //gen post data
            string postParams = "APIName=EAPI&APIVersion=001.001.002.001&MerReqData={0}";
            StringBuilder sb 
    = new StringBuilder();
            sb.Append(
    "<?xml version=\"1.0\" encoding=\"GBK\" standalone=\"no\" ?><ICBCAPI><in><orderNum>");
            sb.Append(orderNum);
            sb.Append(
    "</orderNum><tranDate>");
            sb.Append(tradeDate);
            sb.Append(
    "</tranDate><ShopCode>");
            sb.Append(shopCode);
            sb.Append(
    "</ShopCode><ShopAccount>");
            sb.Append(shopAccount);
            sb.Append(
    "</ShopAccount></in></ICBCAPI>");
            
    string postData = string.Format(postParams, sb.ToString());

            
    //验证证书,默认有效
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

            
    //配置请求参数
            HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create(apiUrl);
            wReq.ContentType 
    = "application/x-www-form-urlencoded";
            wReq.Method 
    = "POST";
            wReq.ClientCertificates.Add(
    new X509Certificate2(HttpContext.Current.Server.MapPath(cerPath), cerPwd));
            ASCIIEncoding encoding 
    = new ASCIIEncoding();
            
    byte[] data = encoding.GetBytes(postData);
            wReq.ContentLength 
    = data.Length;
            Stream reqStream 
    = wReq.GetRequestStream();
            reqStream.Write(data, 
    0, data.Length);
            reqStream.Close();

            
    //获取结果
            WebResponse wResp = wReq.GetResponse();
            Stream respStream 
    = wResp.GetResponseStream();
            
    string stringResp = string.Empty;
            
    if (respStream != null)
            {
                
    using (StreamReader respReader = new StreamReader(respStream,Encoding.GetEncoding("GBK")))
                {
                    stringResp 
    = respReader.ReadToEnd();
                }
                respStream.Close();
            }

            
    return stringResp;
        }
    }
  • 相关阅读:
    并发编程学习笔记之Java存储模型(十三)
    并发编程学习笔记之原子变量与非阻塞同步机制(十二)
    并发编程学习笔记之构建自定义的同步工具(十一)
    并发编程学习笔记之显示锁(十)
    并发编程学习笔记之可伸缩性(九)
    并发编程学习笔记之死锁(八)
    并发编程学习笔记之自定义配置线程池(七)
    并发编程学习笔记之取消和关闭(六)
    并发编程学习笔记之线程池(五)
    并发编程学习笔记之并发工具类(四)
  • 原文地址:https://www.cnblogs.com/Death/p/1992229.html
Copyright © 2020-2023  润新知