本文接着上一篇的踩坑笔记一,在重新开发ChinaPay的支付过程中,又遇到新的问题,将支付模块发布到IIS服务器上,发现竟然无法使用,在提交支付订单的时候会提示:检索 COM 类工厂中 CLSID 为 {522E44BF-7BC9-4135-B5EB-8CC154144B0D} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。
在排查的过程中发现,开发环境中是没有任何问题的,生成也没有任何警告和错误,但是一旦发布就无法使用,所以问题应该与发布环境有关。
结合上次ChinaPay的踩坑经验,怀疑依然与银联在线提供的dll兼容性有关,后通过设置问题项目的应用程序池解决了问题,步骤如下:找到支付项目的应用程序池,打开高级设置,将启用32位应用程序设置为True。
2017年01月13号更新
最近服务器再次进行迁移,又出现了这个问题,在解决了兼容性后问题依然存在,想起忘记注册某个关键DLL。调用银联电子支付的功能必须要先使用regsvr32命令注册Chinapay.dll(我使用ASP.NET只要注册这一个),如果使用的是ASP或者PHP语言的,还要注册CPNPC.DLL。注册成功后支付功能就可以正常使用了。注意netpay.dll、ChinaPay.dll和CPNPC.DLL这3个DLL文件要放在一个目录下。
官方文档关键说明:
- netpay.dll 是普通WIN32原生DLL ,netpay.dll为最底层的应用
- ChinaPay.dll以COM的方式调用的netpay.dll
- CPNPC.dll调用ChinaPay.dll,但是只有asp的情况下才会用到CPNPC.dll
- 如果是csharp的话,只要netpay.dll和ChinaPay.dll两个就可以
- ChinaPay.dll 和 CPNPC.DLL 是COM 组件,其中ChinaPay.dll 支持客户端调用, CPNPC.DLL 支持SERVER端脚本调用,如ASP,PHP。
- CPNPC.DLL 依赖另外两个DLL。
- 使用时请把3个DLL文件放在一个目录下,然后用 regsvr32 命令注册 Chinapay.dll 和 CPNPC.DLL。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98891.html