建行网银接口开发注意事项

建行网银开发过程并不复杂,但就是部署的时候经常出现一些异常的错误。实际就是实例化 CCBRSA.RSASig rsa = new CCBRSA.RSASigClass();的时候会有问题。

Retrieving the COM class factory for component with CLSID {A5C5C388-A972-4CCF-93E2-7F97E82C9EBA} failed due to the following error: 80040154.

有时候会提示以上的错误,有时候会有一些其它的错误,由于用到了CCBRSA.dll这个动态链接库文件,所以要先注册一下这个文件,

 

这里把简要步骤说明一下:

1、注册CCBRSA.dll文件。建议把这个文件复制到system32目录下然后注册 regsvr32  CCBRSA.dll (如果放在其它目录或者有中文目录名之类有时候也会出点问题,按道理是不会,但实际情况确实有发现,还没有搞太懂)

2、安装msjavx86.exe ,java虚拟机。可能是有部分需要调用到java的一些库吧,所以需要安装这个。需要注意的是安装的版本要确认一下,最好是5.0.3802版本的,刚开始我去下载了版本是5.0.3810所以一直用不了。不知道是不是只我才会这样子,其它人好像没有发现。后来找了上海建行的那家伙问了半天也没有搞明白,后来到省建行那台可以使用的机器拷了这个版本的虚拟机才总算搞定。(真是浪费时间呀)这里提供一下下载吧,感觉不太好找这个安装文件。(这个版本可能根据ccbrsa.dll的版本相关的,我把我用的ccbrsa.dll文件也放进去了)

/Files/liubiqu/msjavx86_3802.rar

 

3、在.net项目里引用 com  选择 ccbrsa这个注册好的Dll然后就可以正常使用了。

 

 注意:在win7下部署的时候需要管理员权限才有办法运行这个动态库,所以需要提升一下权限才OK.否则会报:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 ”的错误。

如果是64位的操作系统要拷到 \SysWOW64 这个目录下。因为ccbrsa.dll是32位系统编译的。

 

以下是支付成功后建行网银会返回到我们站点的关键代码(也没有去整理,关键是能用就行)

代码
            string sSIGN = this.Request["SIGN"];
            
string sURL = "";
            
string sORDERID = this.Request["ORDERID"];
            
string sPAYMENT = this.Request["PAYMENT"];
            
string sCURCODE = this.Request["CURCODE"];
            
string sSUCCESS = this.Request["SUCCESS"];
            
//取得用于加密的URL串

            
int iPos = sPara.LastIndexOf('&');
            
if (iPos > 0)
            {
                sURL 
= sPara.Substring(0, iPos);
            }
            
else
            {
                showPayMsg(
"非法的URL!");
                
return;
            }
            
string PublicKey = ConfigurationManager.AppSettings["PublicKey"].ToString();
            CCBRSA.RSASig rsa;
            
try
            {
                rsa 
= new CCBRSA.RSASigClass();
            }
            
catch (Exception ex)
            {
                showPayMsg(
"支付失败!网上银行控件失效" + ex.Message);
                
return;
            }
            
bool bRet;
            rsa.setPublicKey(PublicKey);
            bRet 
= rsa.verifySigature(sSIGN, sURL);
            
if (bRet)
            {
                
if (sSUCCESS == "Y"//如果执行成功,则验证数据是否正确
                {
                    
//验证金额是否正确

                    checkPayment(
"ccb", sORDERID, Convert.ToDouble(sPAYMENT), ref this.Exc, Global.Conn);
                    
if (this.Exc.ErrCode == 0)//
                    {
                        showPayMsg(
"支付成功!");
                    }
                    
else
                    {
                        showPayMsg(
"支付失败。" + this.Exc.ErrDesc);
                    }
                }
                
else
                {
                    showPayMsg(
"支付失败!");
                }
            }
            
else
                showPayMsg(
"非法的URL!");

 

 

posted @ 2010-05-13 20:55 小草 阅读(1827) 评论(8) 编辑 收藏

 回复 引用 查看   
#1楼2010-05-14 07:54 | 大气象      
有时间向你请教一下。
 回复 引用 查看   
#2楼2010-05-19 23:54 | 景艳磊      
我已正遇到这问题,请加我QQ39151666谢谢
 回复 引用 查看   
#3楼[楼主]2010-05-20 08:10 | 小草      
有问题可以提出来大家交流一下。
 回复 引用 查看   
#4楼2010-09-05 16:21 | .tmp      
sPara 这个值是参数列表么 还是带有 URL 路径的
 回复 引用 查看   
#5楼2011-01-17 16:15 | cvvny      
看来你对网银系统开发很专业呀,其他系统也错不了。
我公司有几个软件项目,能否指导下?
谢谢了
深圳科因物联有限公司http://cvvncom.cn.china.cn/

 回复 引用 查看   
#6楼2011-08-25 11:14 | muscle      
很好,我刚好也遇到这个问题,win7、server2008下new CCBRSA.RSASigClass();就报那个“内存已损坏”的错误了。想请教一下如何解决。联系我QQ:510202561 谢谢
 回复 引用 查看   
#7楼2011-09-11 23:30 | 阳光的味道3306      
你好!我想请问一下为什么我的VS2010会报了两个错误,一个是CCBRSA.RSASigClass未定义构造函数,另一个是无法迁入互操作类型CCBRSA.RSASigClass,请改用使用的接口。真诚求解!先谢谢博主了!
 回复 引用 查看   
#8楼[楼主]2011-09-13 17:32 | 小草      
这个主要就是因为你没有注册成功dll文件。之前我也经常碰到。注册Dll需要安装对应版本的jvm