在见到医保提供的sei.dll文件之前,在网上查了一下,Perl可以通过Win32::API模块对dll文件进行调用。
后来拿到了医保sei.dl文件,及医保接口文档,在接口文档里有这样的内容:
//创建地纬嵌入式接口对象,调用com组件
int vi
Oleobject sei
sei =create Oleobject //创建ole对象seiproxy
vi= sei.connecttonewobject('sei3') //连接com组件
if vi <> 0 then
messagebox('错误','创建地纬嵌入式接口sei对象失败!')
return
end if
那么,在Perl调用com组件时就应当使用Win32::OLE。
这一段程序用Perl来写应该是这样:
#!"D:\Strawberry\perl\bin\perl"
use Win32::OLE;
my $sei = CreateObject Win32::OLE 'sei3' or die $!;
my $vi = $sei->connecttonewobject('sei3');
if ($vi != 0)
{
print "创建地纬嵌入式接口sei对象失败!\n";
}
else
{
print "创建地纬嵌入式接口sei对象成功!\n";
}
医保接口文档中的一段程序示例:
//无卡取参保人的基本信息 PB示例代码:
sei.resetvar()
sei.putvarstring('grbh','000000000000000001')
sei.putvarstring('xm','测试')
sei.putvarstring('yltclb','4')
sei.putvarstring('sbjgbh','00000000000000000000')
if sei.request_service('query_person_info')<>0 then
messagebox('调用无卡取信息服务失败',"错误信息:"+sei.get_errtext())
return
end if
//获取服务执行成功后的返回值
vrqlb = sei.getvarstring('rqlb')
vxm = sei.getvarstring('xm')
vzfbz = sei.getvarstring('zfbz')
vmzdbjbs = sei.getvarstring('mzdbjbs') //获取门诊大病登记的疾病编码
用Perl来写应该是这样:
#无卡取参保人的基本信息 Perl代码:
$sei->resetvar();
$sei->putvarstring('grbh','000000000000000001');
$sei->putvarstring('xm','测试');
$sei->putvarstring('yltclb','4');
$r = $sei->putvarstring('sbjgbh','00000000000000000000');
if ($sei->request_service('query_person_info') != 0)
{
print "调用无卡取信息服务失败!\n";
}
$vrqlb = $sei->getvarstring('rqlb');
$vxm = $sei->getvarstring('xm');
$vzfbz = $sei->getvarstring('zfbz');
$vmzdbjbs = $sei->getvarstring('mzdbjbs');
print "$vrqlb $vxm $vzfbz $vmzdbjbs";
在医保专线接通以后,使用Win32::OLE模块的程序运行正常,能够和医保服务器正常通信。
阅读(1567) | 评论(0) | 转发(0) |