OFX是什么?OFX全称叫Open Financial Exchange(开放金融交换),它是一个在客户和金融机构之间进行金融数据和信息交换的广泛的框架标准。它允许金融机构直接连接用户。关于OFX的详细信息,可以登录OFX网站进行详细了解:www.ofx.net,从它的网站可以下载它的pdf文档说明,里面介绍的非常详细。
根据我的了解,OFX就是一种用于银行提供给用户的包含用户财政信息的XML文件标准。用户可以从提供下载的银行网站下载OFX格式的银行账单,将它导入到财务管理软件进行查看,管理。
我出于需要,需要生成一个OFX文件。我就对它的格式详细研究了一番。由于微软的Money软件和Intuit的Quicken软件用户群比较大,我主要以生成能够导入这两个软件的OFX文件和QFX文件。需要指出的是QFX文件也是基于OFX标准的。不过它是Intuit的Quicken理财软件所支持的账户文件。它和后缀为.ofx的文件只有很小的差别,后面会详细讲述。
OFX文件格式,这是我所生成的能够正常导入到Money软件的一个OFX账单,OFX标准里包含很多信息,债务,保险,消费等等很多信息,我只根据我的工作需要生成包含消费信息的OFX账单。
--这是一个XML,所以应该包含xml声明。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
--下面是ofx声明,返回信息200意思是OK,版本是202等等,详细信息看一下ofx的PDF介绍。
<?OFX OFXHEADER="200" VERSION="202" SECURITY="NONE" OLDFILEUID="NONE" NEWFILEUID="NONE"?>
--ofx标签开始
<OFX>
--<SIGNONMSGSRSV1></SIGNONMSGSRSV1>标记的信息集是必须包含的,它包括了<SONRS><LANGUAGE>等标记,用来指明请求返回的状态是OK,支持的语言,处理的时间等必要信息。OFX文件是客户发出请求后响应返回的信息,这需要用户和金融机构建立连接,详细信息可以在http://www.fi.intuit.com/ofximplementation/wcsteps/和http://www.microsoft.com/money/fi.mspx
<SIGNONMSGSRSV1>
<SONRS>
--请求返回的状态
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
--响应时间
<DTSERVER></DTSERVER>
--语言
<LANGUAGE>ENG</LANGUAGE>
<DTACCTUP></DTACCTUP>
</SONRS>
</SIGNONMSGSRSV1>
--银行事务包括,消费,收入等信息
<BANKMSGSRSV1>
<STMTTRNRS>
--
是唯一标记ID
<TRNUID>1</TRNUID>
--请求返回的状态
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
--具体事务
<STMTRS>
--币种
<CURDEF>USD</CURDEF>
--银行账户信息
<BANKACCTFROM>
<BANKID>银行ID</BANKID>
<ACCTID>帐号</ACCTID>
<ACCTTYPE>帐户类型CHECKING</ACCTTYPE>
</BANKACCTFROM>
--银行事务列表
<BANKTRANLIST>
--开始时间结束时间
<DTSTART>20071129000000</DTSTART>
<DTEND>20071129000000</DTEND>
--
之间是具体的银行信息集。包括消费,收入等等。
<STMTTRN>
<TRNTYPE>类型是消费PAYMENT</TRNTYPE>
<DTPOSTED>时间20060417000000</DTPOSTED>
<TRNAMT>金额-31.16</TRNAMT>
<FITID>3</FITID>
<CHECKNUM>1</CHECKNUM>
--<SIC>
美国标准工业代码,用来分类,具体情况根据Money和Quicken所支持的有一定的不同。
<SIC>5511</SIC>
<NAME></NAME>
<MEMO>备注信息:Description:MARATHON ASHLAND 01Q63
Location:CARBONDALE ,IL</MEMO>
</STMTTRN>
<STMTTRN>
<TRNTYPE>PAYMENT</TRNTYPE>
<DTPOSTED>20060417000000</DTPOSTED>
<TRNAMT>-9.73</TRNAMT>
<FITID>2</FITID>
<CHECKNUM>2</CHECKNUM>
<SIC>5511</SIC>
<NAME></NAME>
<MEMO>Description:ADVANCE AUTO PARTS #4811
Location:BLOOMINGTON ,IL</MEMO>
</STMTTRN>
</BANKTRANLIST>
<LEDGERBAL>
<BALAMT>0.00</BALAMT>
<DTASOF>00000000</DTASOF>
</LEDGERBAL>
<AVAILBAL>
<BALAMT>0.00</BALAMT>
<DTASOF>00000000</DTASOF>
</AVAILBAL>
</STMTRS>
</STMTTRNRS>
</BANKMSGSRSV1>
</OFX>
下面是完整的可以正常导入到Money的OFX账单文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?OFX OFXHEADER="200" VERSION="202" SECURITY="NONE" OLDFILEUID="NONE" NEWFILEUID="NONE"?>
<OFX>
<SIGNONMSGSRSV1>
<SONRS>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<DTSERVER></DTSERVER>
<LANGUAGE>ENG</LANGUAGE>
<DTACCTUP></DTACCTUP>
</SONRS>
</SIGNONMSGSRSV1>
<BANKMSGSRSV1>
<STMTTRNRS>
<TRNUID>1</TRNUID>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<STMTRS>
<CURDEF>USD</CURDEF>
<BANKACCTFROM>
<BANKID>StateFarm</BANKID>
<ACCTID>4707880000060783</ACCTID>
<ACCTTYPE>CHECKING</ACCTTYPE>
</BANKACCTFROM>
<BANKTRANLIST>
<DTSTART>20071129000000</DTSTART>
<DTEND>20071129000000</DTEND>
<STMTTRN>
<TRNTYPE>PAYMENT</TRNTYPE>
<DTPOSTED>20060417000000</DTPOSTED>
<TRNAMT>-31.16</TRNAMT>
<FITID>3</FITID>
<CHECKNUM>1</CHECKNUM>
<SIC>5511</SIC>
<NAME></NAME>
<MEMO>Description:MARATHON ASHLAND 01Q63
Location:CARBONDALE ,IL</MEMO>
</STMTTRN>
</BANKTRANLIST>
<LEDGERBAL>
<BALAMT>0.00</BALAMT>
<DTASOF>00000000</DTASOF>
</LEDGERBAL>
<AVAILBAL>
<BALAMT>0.00</BALAMT>
<DTASOF>00000000</DTASOF>
</AVAILBAL>
</STMTRS>
</STMTTRNRS>
</BANKMSGSRSV1>
</OFX>