工行支付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;
    }
}

转载于:https://www.cnblogs.com/Death/archive/2011/03/23/1992229.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
B2C流程说明: 1、客户在商户网站浏览商品信息,签订订单; 2、商户按照工行B2C订单数据规范形成提交数据,并使用工行提供API和商户证书对订单数据签名,形成form表单返回客户浏览器,表单action地址指向工行接收商户B2C订单信息的servlet; 3、客户确认使用工行支付后,提交此表单到工行; 4、工行网银系统接收此笔B2C订单,对订单信息和商户信息进行检查,通过检查则显示工行B2C支付页面; 5、客户在此页面可以查询客户在银行的预留信息;也可以输入支付卡号、支付密码、验证码进行B2C支付; 6、工行检查客户信息,通过检查后显示确认页面;客户确认提交后工行进行支付指令处理; 7、工行进行支付指令处理后,如果商户需要工行实时通知,则工行将处理结果使用http协议post方式将通知消息数据提交到商户网站(这个接收银行通知消息的商户端地址是随商户订单数据提交银行的merURL字段),商户返回取货地址或关闭这个银行与其建立的连接后,银行才显示交易结果页面给客户。(注意1、发送通知和显示结果页面是串行的,所以商户端接收银行通知处理时间太长可能导致客户等待超时,造成银行不能将交易结果页面显示给客户。2、此连接是银行服务器自动和商户进行的连接,商户返回也是直接返回给银行,商户端不能对银行的这个请求进行重定向。) 8、工行进行支付指令处理后,如果商户不需要工行实时通知,则工行直接显示交易结果给客户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值