中国建设银行接口使用详细说明

原文地址为: 中国建设银行接口使用详细说明

查看全文下载例子:http://www.sufeinet.com/thread-373-1-1.html

 

接口介绍


      建行的接口相对于支付宝,Q业务充值和移动,联通,电信,缴费接口要复杂一些,接口分为两块,一块是商户到银行,另外一块是银行到商户

商户到银行

      交易流程如下:

 网上支付业务流程步骤说明:

 

 

 

1) 客户登录商户网站,选择商户网站商品。

2) 客户将选好的商品放入购物车,并下订单。商户提供商户代码、订单号、合计金额等信息;

3) 客户选择代理付款的银行-建行,确认后,商户代码、订单信息、合计金额通过浏览器URL传到建行网上银行站点;

网上银行自动显示支付页面,客户首先选择是否使用建行证书,然后输入龙卡号和密码,选择“确定”。支付信息经加密后传送到网银中心;

4) 网银中心接收客户支付信息,转发到银行后台业务处理系统;

5) 银行后台业务系统处理后,返回处理结果给网银;

6) 网银通知客户支付(扣帐)是否成功。如果扣帐成功,提示客户注意接收商户返回的送货信息;对于不需要立即响应的商户,

跳过步骤7、8;

7) 对于需要立即响应的商户,如果支付成功,网银将成功结果反馈给商户。若支付失败,不返回给商户信息

8) 对于需要立即响应的商户,收到银行扣帐成功的通知后,发给客户送货信息。如客户收到银行支付(扣帐)成功通知(步骤6),

但未收到商户送货信息,则需向商户查询。

日终时,商户与开设结算帐户的建设银行(网银成员行)进行流水核对,对已支付但未得到商户确认的交易进行退款处理。

商户到银行


    其实这一步是把自己卡里的钱转到商户的帐上,就是转账,

代码实现其实很简单,我们先来分析一上要传的参考吧

个人客户在商户网站选择商品后,商户网站生成以下信息,传送到建行网站:

 

域名

名称

类型

备注

MERCHANTID

商户代码

CHAR(9)

由建行统一分配

POSID

商户柜台代码

CHAR(9)

由建行统一分配,缺省为000000000

BRANCHID

分行代码

CHAR(9)

由建行统一指定

ORDERID

定单号

CHAR(30)

由商户提供,最长30,按实际长度给出

PAYMENT

付款金额

NUMBER(16,2)

由商户提供,按实际金额给出

CURCODE

币种

CHAR(2)

缺省为01-人民币

REMARK1

备注1

CHAR(30)

网银不处理,直接传到城综网

REMARK2

备注2

CHAR(30)

网银不处理,直接传到城综网

TXCODE

交易码

CHAR(6)

由建行统一分配为520100

MAC

MAC校验域

CHAR(32)

采用标准MD5算法,由商户实现

注:商户要保证定单号的唯一性。

为了加快站点间接口开发,站点间接口的参数传送采用普通的URL方式,商户将以上信息包含在FORM中,在SUBMIT后将生成URL,如下所示:

https://ibsbjstar.ccb.com.cn/app/ccbMain?MERCHANTID=123456789&POSID=000000000&BRANCHID=110000000&ORDERID=19991101234&PAYMENT=500.00&CURCODE=01

&TXCODE=520100&REMARK1=&REMARK2=&MAC=qwertyuioplkjhgfdsazxcvbnm901234

 

参与MAC运算的字符及其顺序如下:

MERCHANTID=123456789&POSID=000000000&BRANCHID=110000000&ORDERID=19991101234&PAYMENT=500.00&CURCODE=01&

TXCODE=520100&REMARK1=&REMARK2=

注:字符串中变量名必须是大写字母。

           这是建行文档说的说明,很明显这是使用Http的方式来实现的

下面我们动手来实现 一下吧,

我是把所有的参数生成了一个实体类这样方便,而且规范化,

来看看这个Model吧

代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;

namespace  ClientSystem.AliPay
{
    
///   <summary>
    
///  建行传入参数
    
///   </summary>
     public   class  CBBTextModel
    {

        
private   string  _MERCHANTID  =   "" ;
        
///   <summary>
        
///  商户代码 由建行统一分配
        
///   </summary>
         public   string  MERCHANTID
        {
            
get  {  return  _MERCHANTID; }
            
set  { _MERCHANTID  =  value; }
        }


        
private   string  _POSID  =   "" ;
        
///   <summary>
        
///  商户柜台代码  由建行统一分配,缺省为000000000
        
///   </summary>
         public   string  POSID
        {
            
get  {  return  _POSID; }
            
set  { _POSID  =  value; }
        }


        
private   string  _BRANCHID  =   "" ;
        
///   <summary>
        
///  分行代码  由建行统一指定
        
///   </summary>
         public   string  BRANCHID
        {
            
get  {  return  _BRANCHID; }
            
set  { _BRANCHID  =  value; }
        }


        
private   string  _ORDERID  =   "" ;
        
///   <summary>
        
///  定单号 由商户提供,最长30位,按实际长度给出
        
///   </summary>
         public   string  ORDERID
        {
            
get  {  return  _ORDERID; }
            
set  { _ORDERID  =  value; }
        }


        
private   decimal  _PAYMENT  =  0m;
        
///   <summary>
        
///  付款金额  由商户提供,按实际金额给出
        
///   </summary>
         public   decimal  PAYMENT
        {
            
get  {  return  _PAYMENT; }
            
set  { _PAYMENT  =  value; }
        }


        
private   string  _CURCODE  =   "" ;
        
///   <summary>
        
///  币种 缺省为01-人民币
        
///   </summary>
         public   string  CURCODE
        {
            
get  {  return  _CURCODE; }
            
set  { _CURCODE  =  value; }
        }


        
private   string  REMARK1  =   "" ;
        
///   <summary>
        
///  备注1  网银不处理,直接传到城综网
        
///   </summary>
         public   string  REMARK11
        {
            
get  {  return  REMARK1; }
            
set  { REMARK1  =  value; }
        }


        
private   string  REMARK2  =   "" ;
        
///   <summary>
        
///  备注2  网银不处理,直接传到城综网
        
///   </summary>
         public   string  REMARK21
        {
            
get  {  return  REMARK2; }
            
set  { REMARK2  =  value; }
        }


        
private   string  _TXCODE  =   "" ;
        
///   <summary>
        
///  交易码  由建行统一分配为520100
        
///   </summary>
         public   string  TXCODE
        {
            
get  {  return  _TXCODE; }
            
set  { _TXCODE  =  value; }
        }


        
private   string  _MAC  =   "" ;
        
///   <summary>
        
///  MAC校验域  采用标准MD5算法,由商户实现
        
///   </summary>
         public   string  MAC
        {
            
get  {  return  _MAC; }
            
set  { _MAC  =  value; }
        }

        
private   string  _url  =   "" ;
        
///   <summary>
        
///  URL
        
///   </summary>
         public   string  Url
        {
            
get  {  return  _url; }
            
set  { _url  =  value; }
        }

    }
}

我们来准备两个方法吧,一个是Http连接来使用的一个是Md5加密,因为在文档里写到要使用Md5加密哦

代码
  #region   // 预定义方法或是变量

        
///   <summary>
        
///  请求指定 URL 资源,并获取响应结果
        
///   </summary>
        
///   <param name="url"> 需要请求的 URL 资源 </param>
        
///   <returns>
        
///  响应结果;
        
///  出现任意异常,均返回字串"Runtime Error"
        
///   </returns>
         private   string  RequestContent( string  url)
        {
            
string  content  =   string .Empty;
            
try
            {
                HttpWebRequest request 
=  (HttpWebRequest)WebRequest.Create(url);
                request.KeepAlive 
=   false ;
                HttpWebResponse response 
=  (HttpWebResponse)request.GetResponse();
                StreamReader reader 
=   new  StreamReader(response.GetResponseStream(), Encoding.Default);
                content 
=  reader.ReadToEnd();
                reader.Close();
            }
            
catch  (Exception)
            {
                content 
=   " Runtime Error " ;
            }
            
return  content;
        }

        
///   <summary>
        
///  传入明文,返回用MD%加密后的字符串
        
///   </summary>
        
///   <param name="str"> 要加密的字符串 </param>
        
///   <returns> 用MD5加密后的字符串 </returns>
         public   static   string  ToMD5( string  str)
        {
            
return  System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,  " md5 " );
        }

        
#endregion

   看一下充值按钮下面实现吧

代码
   if  (textBox1.Text.Trim()  ==   ""   ||  textBox1.Text.Trim()  ==   null )
            {
                MessageBoxForm objm 
=   new  MessageBoxForm( " 您输入的金额不能为空!!! " " 提示信息 " );
                objm.ShowDialog();
                
return ;
            } 
            
string  orid  =  OfficeInfo.ofId.ToString().Trim()  +   " _ "   +  DateTime.Now.Ticks.ToString();
            Alipay objalipay 
=   new  Alipay();
            objalipay.APID 
=  orid;
            objalipay.addTime 
=  DateTime.Now;
            objalipay.total_fee 
=  Convert.ToDecimal(textBox1.Text.ToString().Trim());
            objalipay.trade_status 
=   " 客户端提交 " ;
            objalipay.Text1 
=  DateTime.Now.ToString();
            objalipay.Text2 
=   " 建行接口 " ;
            objalipay.Text3 
=   "" ;
            objalipay.Text4 
=   "" ;
            objalipay.Text5 
=   "" ;

            
decimal  money  =  Convert.ToDecimal(user.GetListBy(OfficeInfo.ofPara1,  13 ).ToString().Trim());
            
if  (money  >  Convert.ToDecimal(textBox1.Text.Trim()))
            {
                MessageBoxForm objm 
=   new  MessageBoxForm( " 你输入的最小金额不能低于 "   +  money  +   " 元!!! " " 提示信息 " );
                objm.ShowDialog();
                
return ;
            }

            
if  (user.AddAlipay(OfficeInfo.ofPara1, objalipay))
            {
                CBBTextModel objcbbText 
=   new  CBBTextModel();

                
// 商户代码 由建行统一分配
                objcbbText.MERCHANTID  =   " 00000000000000 " ;

                
// 商户柜台代码  由建行统一分配,缺省为000000000

                objcbbText.POSID 
=   "00000000000000";

                
// 分行代码  由建行统一指定
                objcbbText.BRANCHID  =   "00000000000000";

                
//  定单号 由商户提供,最长30位,按实际长度给出
                objcbbText.ORDERID  =  orid.Trim();

                
// 付款金额  由商户提供,按实际金额给出
                objcbbText.PAYMENT  =  Convert.ToDecimal(textBox1.Text.Trim());

                
// 币种 缺省为01-人民币
                objcbbText.CURCODE  =   " 01 " ;

                
// 备注1  网银不处理,直接传到城综网
                objcbbText.REMARK11  =   "" ;

                
// 备注2  网银不处理,直接传到城综网
                objcbbText.REMARK21  =   "" ;

                
// 交易码  由建行统一分配为520100
                objcbbText.TXCODE  =   " 520100 " ;

                
// MAC校验域  采用标准MD5算法,由商户实现
                objcbbText.MAC  =   " qwertyuioplkjhgfdsazxcvbnm901234 " ;

                
// URL
                objcbbText.Url  =   " https://ibsbjstar.ccb.com.cn/app/ccbMain " ;

                
// 要加密的串
                 string  canshu  =   " MERCHANTID= "   +  objcbbText.MERCHANTID.Trim()  +
                    
" &POSID= "   +  objcbbText.POSID.Trim()  +   " &BRANCHID= "   +  objcbbText.BRANCHID.Trim()
                    
+   " &ORDERID= "   +  objcbbText.ORDERID.Trim()  +   " &PAYMENT= "   +  objcbbText.PAYMENT.ToString().Trim()
                    
+   " &CURCODE= "   +  objcbbText.CURCODE  +   " &TXCODE= "   +  objcbbText.TXCODE.Trim()
                    
+   " &REMARK1=&REMARK2= " ;

                objcbbText.MAC 
=  ToMD5(canshu.Trim()).ToLower().Trim();
                
string  strURl  =  objcbbText.Url  +   " ? "   +  canshu  +   " &MAC= "   +  objcbbText.MAC.Trim();
                webBrowser1.Url 
=   new  Uri(strURl.Trim());
            }
        }

在这里大家一定要注意把 objcbbText.MAC = ToMD5(canshu.Trim()).ToLower().Trim();
加密后的字符串改成小写的

上面所提到的

代码
  string  orid  =  OfficeInfo.ofId.ToString().Trim()  +   " _ "   +  DateTime.Now.Ticks.ToString();
            Alipay objalipay 
=   new  Alipay();
            objalipay.APID 
=  orid;
            objalipay.addTime 
=  DateTime.Now;
            objalipay.total_fee 
=  Convert.ToDecimal(textBox1.Text.ToString().Trim());
            objalipay.trade_status 
=   " 客户端提交 " ;
            objalipay.Text1 
=  DateTime.Now.ToString();
            objalipay.Text2 
=   " 建行接口 " ;
            objalipay.Text3 
=   "" ;
            objalipay.Text4 
=   "" ;
            objalipay.Text5 
=   "" ;

            
decimal  money  =  Convert.ToDecimal(user.GetListBy(OfficeInfo.ofPara1,  13 ).ToString().Trim());
            
if  (money  >  Convert.ToDecimal(textBox1.Text.Trim()))
            {
                MessageBoxForm objm 
=   new  MessageBoxForm( " 你输入的最小金额不能低于 "   +  money  +   " 元!!! " " 提示信息 " );
                objm.ShowDialog();
                
return ;
            }

            
if  (user.AddAlipay(OfficeInfo.ofPara1, objalipay))
            {

这一部分代码是记录日志的,大家可以参考一下

我们现在只要运行程序就会出现如下界面所显示的内容

下面的操作就是输入你的卡号密码就可以了,

转账成功后我们这一步的工作就算是做完了

银行到商户


 阅读全文:http://www.sufeinet.com/thread-373-1-1.html


转载请注明本文地址: 中国建设银行接口使用详细说明

猜你喜欢

转载自blog.csdn.net/CHCH998/article/details/81609386