This specification describes the OFC data format and details how Microsoft ® Money uses OFC for online home banking and online bill payment features.
Microsoft hereby grants to any party a royalty-free, worldwide, perpetual license to use the Open Financial Connectivity and Microsoft® Money Specification to make, use, and sell products and services that conform to this Specification.
Version 1.0.6
September 4, 1996
M
Contents
Introduction
Audience
Document Overview
Related Documentation
Microsoft Money and OFC
Chapter overview
HTTP
HTTP POST
HTTP response
Connectivity options
Internet
Private dial-up connection
Mode of operation
Batch mode
File import mode
Timeout values
Security
Chapter overview
Possible risks
Microsoft Money solutions
Secure communication protocols
PCT and SSL
Communicating over a private network
OFC User ID and Password
Implementing security
Microsoft Money and the Branding Server
Chapter overview
Identifying a financial institution
Defining information for the Branding Server
Setting Up for Online Services with Microsoft Money
Chapter overview
Setting up for online services with Money
Online Bill Payment with Microsoft Money and OFC
Chapter overview
Paying a bill in Microsoft Money
Entering an electronic payment
Validating the payment
Days-to-pay value
Withdrawal date value
Payee add behavior
Inquiring about a payment
Canceling a payment
Online Banking with Microsoft Money and OFC
Chapter overview
Updating account information
Matching downloaded transactions
Transferring funds
Microsoft Money, OFC and Crash Recovery
Chapter overview
DTCLIENT and Money crash recovery behavior
Server crash recovery behavior
Using the SESSKEY element to track sessions
OFC Data Format Details
Chapter overview
Introduction to the OFC format
Syntax
Structure
Order of records (batch mode)
Identifiers
Element lengths
Unsolicited responses
Server defined error messages
Illegal characters
Record structure with error responses
OFC Aggregates and Elements
Account <ACCTTO>, <ACCTFROM>
Account type <ACCTTYPE>
Action <ACTION>
Amount <AMOUNT>
Date and time <DTCLIENT>, <DTSERVER>
Online services <SERVICE>
Payee <PAYEE>
Statement transactions <STMTTRN>
Status <STATUS>
Transaction type <TRNTYPE>
OFC and Signon Records
OFC <OFC>
Signon Request <SONRQ>
Signon Response <SONRS>
Account Records
Account request <ACCTRQ>
Account response <ACCTRS>
Mail Records
Mail request <MAILRQ>
Mail response <MAILRS>
Online Banking Records
Statement request <STMTRQ>
Statement response <STMTRS>
Intrabank Transfer request <INTRARQ>
Intrabank Transfer response <INTRARS>
Interbank Transfer request <INTERRQ>
Interbank Transfer response <INTERRS>
Online Bill Payment Records
Payee request <PAYEERQ>
Payee response <PAYEERS>
Payment request <PAYMTRQ>
Payment response <PAYMTRS>
Payment inquiry request <PAYIQRQ>
Payment inquiry response <PAYIQRS>
File Import Records
Account statement <ACCTSTMT>
Standard Industrial Code support
Open Financial Connectivity (OFC) is a data format designed to represent financial transactions exchanged between client and server. The OFC format was designed to accommodate the requirements of a variety of banking and bill payment systems, both domestic and international.
The Microsoft Money 5.0 will support the OFC data format for its online home banking and online bill payment features.
This document is intended for use by banks and solution providers who are evaluating or implementing a home banking server solution using OFC and Microsoft Money.
This specification details the OFC data format and how the next release of Microsoft Money will use OFC. Following the introduction, this specification is divided into the following sections:
u Chapter 1, Microsoft Money and OFC
This explains how Microsoft Money will utilize the OFC data format for online home banking and online bill payment services.
u Chapter 2, Security
This explains how Microsoft Money will secure transactions sent from client to server.
u Chapter 3, Microsoft Money and the Branding Server
This explains the functionality of the Branding Server and how Microsoft Money utilizes it.
u Chapter 4, Setting Up for Online Services with Microsoft Money
This explains the process a user must go through to set up Microsoft Money for use with online services.
u Chapter 5, Online Bill Payment with Microsoft Money and OFC
This explains how Microsoft Money uses features of OFC for its online bill payment functionality.
u Chapter 6, Online Banking with Microsoft Money and OFC
This explains how Microsoft Money uses features of OFC for its online banking functionality.
u Chapter 7, Microsoft Money, OFC and Crash Recovery
This explains how Microsoft Money uses features in OFC to recover from communication and system errors.
u Chapter 8, OFC Data Format Details
This chapter provides more explanation of the OFC data format and introduces how Microsoft Money takes advantage of it.
u Chapter 9, OFC Aggregates and Elements
This explains each aggregate and element in the OFC data format.
u Chapter 10, OFC and Signon Records
This explains the OFC record and the Signon request and response.
u Chapter 11, Account Records
This explains the Account request and response records.
u Chapter 12, Mail Records
This explains the Mail request and response records.
u Chapter 13, Online Banking Records
This explains the records associated with online banking: Statement request and response, Interbank transfer request and response, Interbank transfer request and response
u Chapter 14, Online Bill Payment Records
This explains the records associated with online bill payment: Payee request and response, Payment request and response, Payment inquiry request and response.
u Chapter 15, File import records
This explains the structure for the Account Statement record.
Additional documents related to OFC, Microsoft Money and online financial services can be found on the Microsoft web site at http://www.microsoft.com/industry/bank/online.htm.
Chapter 1
The Microsoft Money 5.0 will support the OFC data format for its online home banking and online bill payment features.
Microsoft Money will use the HTTP (Hypertext Transfer Protocol) protocol to transfer OFC files to an OFC server. HTTP is the same protocol that is used to run the Internet’s World Wide Web.
HTTP consists of requests and responses. Money will send an OFC request file in an HTTP POST request and will expect an HTTP response with an OFC response file.
This section includes the HTTP headers that Money will be sending when it sends an HTTP POST command to the bank’s server.
POST URL HTTP/1.0
Connection: Keep-Alive
Pragma: no-cache
User-Agent: XSOFC Driver 1.0
Content-Type: application/x-ofc
Content-Length: length in bytes of OFC file
<OFC>
… data in the OFC file …
</OFC>
Implementation notes on HTTP POST:
This section describes the HTTP headers that Microsoft Money will expect when receiving data from a bank’s server.
HTTP 1.0 statuscode statusstring
Content-Type: application/x-ofc
Content-Length: length in bytes of OFC file
<OFC>
…data in the OFC file…
</OFC>
Notes on HTTP response:
|
Statuscode |
Statusstring |
Explanation |
|
200 |
OK |
The server should return 200 OK if it was able to process the OFC data sent to it in the HTTP POST and produce a response. |
|
400 |
Bad request |
The server should return 400 Bad request if it is unable to process the OFC request file. |
|
403 |
Access denied |
The server should return 403 Access denied if security is enabled on the server but the client is attempting to connect without security. Money will always attempt to connect with security; this HTTP error should be implemented as a safeguard. |
|
500 |
Server error |
The server should return a status of 500 when the server is unavailable. |
Microsoft Money supports two connectivity options between the client and a bank’s server: Internet and dial-up PPP. A bank must choose one connection method for its customers. Money will offer the same functionality with each connection option.
Microsoft Money can use the Internet to communicate with a bank’s server. Money will not supply Internet access for its users. A user must have an account with a Windows compatible Internet Service Provider (ISP). Money will use the user’s ISP to create an Internet connection and then use that connection to communicate with the bank’s server.
Implementing the Internet connection option
A bank should take the following steps when supporting an Internet connection:
Microsoft Money can connect to a bank’s server through a private dial-up network running the Point-to-Point protocol (PPP). In this case, the bank will provide the user with a telephone number to connect to their server.
Implementing the Private dial-up connection option
A bank should take the following steps when supporting a private dial-up connection:
|
PPP setting |
Explanation |
|
IP header compression |
Money will use IP header compression. |
|
Software compression |
Money will use the software compression supported by the PPP server. |
|
Authentication protocols |
Money will use the CHAP and SPAP authentication protocols. These will be used when the user connects and logs into the PPP server. |
|
Network login |
Money will not support a general network login. Money users will connect to the PPP server and will not be allowed to connect to other computers connected to the bank’s network. |
Microsoft Money 5.0 operates in a batch mode. While off-line, a user will queue up transaction requests (requests for account information, requests to make bill payments, etc.)
When a user chooses to send these requests to their bank, Money will create a single OFC file containing the requests and will send that file to the bank’s server. While the user is online, the bank’s server will process the requests in that file and produce a single OFC file with the responses. The bank server will send this file back to Microsoft Money. When this file has been received, Money will close the communication session and report the results of the session to the user.
Microsoft Money will also support file import mode. This mode is designed to allow a user to import transactions in an OFC file (*.ofc) into their Microsoft Money data file.
File import mode does not specify the method of communication between Money and a server; the OFC file could be delivered to the user via electronic mail, downloaded from the World Wide Web, or distributed on a floppy disk. For instance, if a bank’s World Wide Web site allowed users to view the account activity for a particular account, that web site could also allow the user to download an OFC file that represented those transactions. Launching the OFC file will reconcile the transactions in the file with those already entered in Microsoft Money.
Money uses the following timeout values. When these values expire, Money will display an error message to the user telling the user that their bank’s server is unavailable and suggesting that the user attempt to connect at a later time.
|
Connect (establishing an HTTP connection via the Internet) |
2 minutes |
|
Send (Money sending an OFC file to the server) |
1 minute |
|
Receive (Money waiting for a response file from the server) |
2 minutes |
Chapter 2
All connections between Microsoft Money and a server will be secured. This section explains how Microsoft Money will secure sessions with a server.
Any communication over a network exposes risk to each party involved in the communication and to the data sent over the network. These risks can be summarized as follows:
Using features of OFC and standard, Internet security protocols and techniques, an OFC-based solution using Microsoft Money addresses these risks.
Secure communication protocols
Microsoft Money will support two Internet standard protocols for securing the communication channel between client and server: Private Communications Technology (PCT) and Secure Sockets Layer (SSL). Money will support PCT 1.0, SSL 2.0 and SSL 3.0.
PCT and SSL also guarantee the integrity of messages sent between client and will authenticate the identity of a server using certificates. Money will support a 128-bit key (64-bit internationally) for use with SSL or PCT.
Note: Email ofc@microsoft.com for more information on enabling your server to use 64 bit encryption.
Both PCT and SSL use public-key encryption to secure a channel between client and server. Before any OFC data is sent, Money and the bank’s server will negotiate a session key that is used to encrypt the session. Once a session key has been agreed upon and the session is secure, Money will send an OFC file to the server.
Each session secured using PCT and SSL uses a different session key. If a session is compromised, this security breach is limited to one particular session. Compromising subsequent sessions will involve spending the same amount of effort as it took to compromise the first session.
Using a 128-bit key makes the communication between Money and a bank’s server significantly more secure than previous implementations of SSL that used 40-bit keys. These implementations were subject to "brute force" attacks where it was possible to try each of the 240 possible keys until you find the one that decrypts the message. Using longer 128-bit keys make calculations prohibitively more expensive.
SSL is currently available in the Netscape Navigator browser, Netscape Commerce Server, Microsoft Internet Explorer 2.0, 3.0 and Microsoft Internet Information Server. PCT will be supported in Microsoft Internet Explorer 3.0 and Microsoft Internet Information Server 1.1.
A bank can choose the solution that best meets their needs. For more information about PCT reference http://pct.microsoft.com or http://www.microsoft.com/internet. For more information about SSL reference http://www.netscape.com/newsref/std/SSL.html.
Communicating over a private network
A bank can choose to communicate with Microsoft Money using a private dial-up network running the PPP protocol. Microsoft Money will use the same 128-bit (64-bit internationally) SSL or PCT security protocols to communicate on this type of network.
To set up Microsoft Money for use with OFC, the user will be asked for a bank-issued user identification code and password.
The user identification code must uniquely identify a user (i.e. social security number) on the bank’s server. A user will enter their password into Microsoft Money once and it will be sent to the bank’s server in every session.
A user must enter their password before calling the bank’s server. Microsoft Money will never write this password to disk and will always be displayed as asterisks (*) in the Money user interface. A bank can send a request to Microsoft Money that will force the user to change their password on the next session.
A bank should take the following steps to implement security:
Note: The Common Name on the server’s certificate should be the URL of the server (servername.domainname) For example, www.bank.com is a valid Common Name. When connecting to a server, Money will match the Common Name on the certificate with the server’s URL. If they match, Money will allow the session to proceed. If they don’t match, Money will alert the user that the server they are connecting to may be an impostor. The user will be given the option to proceed or to cancel the session.
The Branding Server is a server used by Microsoft Money to download details about the online services a bank chooses to offer its customers. The information stored on the Branding Server is provided by the bank and can be updated by the bank at any time. Microsoft Money users will be able to call the Branding Server free of charge.
Information downloaded from the Branding Server tells Money what online services are offered by a bank, how to connect to the bank, and also provides graphics to enhance the Money user interface with the bank’s logo and contact information.
Identifying a financial institution
The first step in Money’s online services setup process involves the user providing Money with the 9 digit routing and transit number or the first 6 digits of their credit card number.
This information will be sent to the Branding Server. The Server will match the routing and transit number or credit card number to a financial institution. Once the Branding Server has identified an institution, the information provided by the institution will be downloaded to Money.
Defining information for the Branding Server
If a bank has chosen to offer online services to its customers using OFC, the Branding Server will download information telling Microsoft Money how to connect to the bank. This section details the information Money will download from the Branding Server to support an OFC connection.
Money will also download other information such as logos and contact information. A specification for this information will be posted on the Microsoft web site at http://www.microsoft.com/industry/bank/online.htm.
Branding Server provider information for OFC
Each bank who implements an online solution based on OFC will provide a data file in the following format to the Branding Server. These data files are text files and can be composed using Windows Notepad.
Note: Instructions detailing how to submit this information to the Branding Server will be posted on http://www.microsoft.com/industry/bank/online.htm. Or, contact ofc@microsoft.com for more information.
|
Line item name |
Possible values |
Details |
|
[OFC] |
N/A |
This is a constant expected to be the first line of every data file. |
|
Services= |
0 - The server supports OFC online banking. 0,2 - The server supports OFC online banking and bill payment (Int’l releases only.) 0,3 - The server supports OFC online banking and bill payment (Int’l releases only.) 0,4 - The server supports OFC online banking and bill payment (Int’l releases only.) |
This value will enable the Microsoft Money user interface for online banking. This value will enable the Microsoft Money user interface for online bill payment This value will enable the Money user interface for both services. The user will be asked to supply a payee ID or the destination account information. This value will enable the Money user interface for both services. The user will be asked to supply a payee ID. |
|
DaysInquiryMax= |
Any number (60 is the minimum required value.) |
How many days into the future can the user inquire on an electronic bill payment after its due date. |
|
DaysPreWithdrawalDefault= |
Any number |
Used for online bill payment services. Number of days lead time before withdrawal of money from user’s bank account. |
|
DaysPostWithdrawalDefault= |
Any number |
Used for online bill payment services. Number of days after withdrawal of money from user’s bank account when check arrives at payee. |
|
DaysIntraBankPreWithdrawalDefault= |
Any number |
If the bank processes INTRARQ transfers immediately, this should be zero (0.) |
|
DaysIntraBankPostWithdrawalDefault= |
Any number |
If the bank processes INTRARQ transfers immediately, this should be zero (0.) |
|
DaysInterBankPreWithdrawalDefault= |
Any number |
If the bank processes INTERRQ records immediately, this should be zero (0.) |
|
DaysInterBankPreWithdrawalDefault= |
Any number |
If the bank processes INTERRQ transfers immediately, this should be zero (0.) |
|
URL= |
http://ofc.bank.com/isapi.dll |
This is the URL for the bank’s OFC server. |
|
Dialup= |
0 - Internet |
"Internet" means that the
bank’s server is accessible via the Internet and the user must use
Money with an ISP to connect to the server. |
|
CountryID= |
TAPI country ID |
Needed if Dialup=1. This is the TAPI country ID used by Microsoft Money. The value for the United States is 1. |
|
AreaCode= |
The three digit area code of the server’s phone number. |
The AreaCode= entry is needed only if Dialup=1. |
|
Phone= |
The phone number of the server. |
If Dialup=1 and Phone= exists but is blank, Money will prompt the user for a phone number when the user configures Money for online services. |
|
RASUserName= |
The user name used to log the user into the PPP server. |
This entry is only required if Dialup=1. |
|
RASPassword= |
The password used to authenticate the user into the PPP server. |
This entry is only required if Dialup=1. |
|
RASPhoneEntry= |
Used by Money to name the Dial-Up Networking program used to connect to the PPP server. |
This should be the name of the bank, ex. "First Bank." |
Notes on the Branding Server data file
Chapter 4
Before a user can start using online banking and/or online bill payment with Microsoft Money, they must go through a setup process. Microsoft Money will include a wizard to walk the user through each step of the process.
This section of the specification describes each step of the setup wizard, highlighting the bank’s involvement in this process.
Setting up for online services with Money
Step 1 - Enter RTN or BIN
The first step of setting up online services will involve a user entering in the routing and transit (RTN) or Bank Identification Number (BIN) for their bank. Users will be asked to enter the 9 digit routing and transit number found in the lower left-hand corner of their checks or the first 6 digits of their credit card.
Step 2 - Download info from Branding Server
Next, Money will call the Branding Server and ask it to download a profile of information about the bank. This includes details on how to connect to the bank’s server as well as logos and other information to customize the Money interface.
Step 3 - Enrolling for online services with the bank
The profile will include a description of the online services offered by the bank and instructions that a user should follow to become enrolled for online services.
For example, a bank may tell users to call a 1-800 number and speak with a customer service representative. Or, a bank may point users to their web site where a user can fill out a form and immediately get authorized for online services with Money.
Regardless of the means a bank uses to get a user set up for online services, a bank should provide a user with the following information:
For example, the bank should tell the user the following information about each account:
- The name of the account (Checking, Savings, Credit Card)
- The account number of the account.
- The online services enabled for the account (online banking, online bill payment, or both.)
Step 4 - Enabling Money accounts for online services
The final step in Money’s online setup wizard will involve the user enabling their Money accounts for online services. The user will be asked to choose an account they’ve set up in Money and choose the online services (online banking, online bill payment, or both) their bank has enabled for that account.
Chapter 5
Online bill payment is the service where users can send a payment to any payee using Microsoft Money. Online bill payment also includes the ability for users to inquire on the status of previously sent payments and cancel payments.
Paying a bill in Microsoft Money
Microsoft Money accounts that are enabled for online bill payment will expose additional user interface to help a user denote a payment as one that should be sent using online bill payment.
Entering an electronic payment
Entering an electronic payment entails a user entering the due date of the payment they wish to be paid into the Microsoft Money Account Register. Based on the capabilities of the bill payment system (see the sections on Days-to-pay and Funds withdrawal date below), the Money account register will record the date the funds will be deducted from the user’s account.
Microsoft Money will allow users to schedule electronic payments up to one year into the future.
If the user is entering a payment to a payee that the user has not paid previously, they will be asked to provide details to route the payment to the payee. This includes the payee’s street address, city, state, zip code, phone number and the user’s account number with that payee. If the user enters a payment to a payee that has been paid previously, Money will not prompt the user for this information.
Determining a valid payment date
Money will use the days-to-pay value to determine if the payment can be made by the due date. Money will add the number of days-to-pay for the payee to the current date (starting with tomorrow.) If the resulting date is less than or equal to the due date of the payment, the payment will be accepted and entered into Money’s account register. If the resulting date is greater than the due date due date of the payment, Money will inform the user that the payment cannot be made and suggest the earliest possible date.
For example, let’s assume that today is January 10th and the user enters January 19th as the desired due date of the payment. The payee the user wants to pay has a days-to-pay value of 5 days. January 10th plus 5 days provides enough lead time to issue a payment by January 19th.
Now the user wants to enter another electronic payment. Today is still January 10th and the user enters January 12th as the due date of the payment. The payee has a days-to-pay value of 5 days. In this case, Money will not allow the user to enter the payment since there is not enough time to get a payment to the payee by the 12th. However, Money will suggest the next date the payment can be made (January 15th.)
Federal Reserve holiday schedule
Microsoft Money will validate payment dates to ensure users request payments on business days (Monday to Friday). And, Money also has knowledge of the Federal Reserve holiday schedule. If a user attempts to schedule a payment on one of these dates, the user will be asked to schedule the payment on the next business day after the holiday.
|
New Year’s Day |
January 1 |
|
Martin Luther King Day |
Third Monday in January |
|
President’s Day |
Third Monday in February |
|
Memorial Day |
Last Monday in May |
|
Independence Day |
July 4 |
|
Labor Day |
First Monday in September |
|
Columbus Day |
Second Monday in October |
|
Veterans Day |
November 11 |
|
Thanksgiving Day |
Fourth Thursday in November |
|
Christmas Day |
December 25 |
Days-to-pay is the amount of lead time (measured by the number of business days) required to issue a payment to a payee. Money will use this value to determine if a payment can be made by the due date of a payment.
A bill payment service’s default days-to-pay value will be downloaded from the Branding Server. This value will be used to validate payment dates for all new payees. At any time, the server can send Money a new default days-to-pay value using the <DAYSREQD> element in the OFC Signon response.
This value can also be specified by the server for each payee the user has paid electronically. The server must send Money a new days-to-pay value for a particular payee using the <DAYSREQD> element in the OFC Payee response.
Reference the <DAYSREQD> element in the Signon response <SONRS> and Payee response <PAYEERS> records. The Signon response is described in the OFC and Signon Records chapter, the Payee response is described in the Online Bill Payment Records chapter.
The withdrawal date value is the number of business days prior to the payment’s due date when the funds are deducted from the user’s bank account. Some payment systems that require guaranteed funds deduct funds from the user’s account before the due date, while others deduct funds from the user’s account on the date the payment is due.
A bill payment service’s default withdrawal date value will be downloaded from the Branding Server. Microsoft Money will record transactions in the account register according to when the funds are withdrawn from the user’s account. For example, if the user enters a payment with a due date of January 10th and the bill payment service has a funds withdrawal date of four (4), the payment will be recorded in the user’s Money account register as occurring on January 6th.
At any time, the server can send Money a new default funds withdrawn date value using the <DAYSWITH> element in the OFC Signon response.
This value can also be specified by the server for each payee the user has paid electronically. At any time, the server can send Money a new funds withdrawal date value for a particular payee using the <DAYSWITH> element in the OFC Payee response.
Reference the <DAYSWITH> element in the Signon response <SONRS> and Payee response <PAYEERS> records. The Signon response is described in the OFC and Signon Records chapter, the Payee response is described in the Online Bill Payment Records chapter.
The first time a user sends a payment to a payee, Money will send the OFC Payee request record (PAYEERQ) in addition to the OFC Payment request record (PAYMTRQ.) The Payee request record includes details about the payee so it can be added to the bill payment system.
The server will respond with a Payee response record. The bill payment service will assign a identification code to a payee and return it to Money in the <PAYEEID> element. If the server has returned a PAYEEID for a payee and the user sends subsequent payments to this payee, Money will send the PAYEEID and not the complete details (street address, city, state, zip code, account number) of the payee.
For more information, reference the <PAYEEID> element in the Payee response <PAYEERS> and Payment request <PAYMTRQ> records. The Payee response and Payment request are described in the Online Bill Payment Records chapter.
Using Microsoft Money, users will be able to inquire about the status of a previously sent payment. Inquiries are modeled after email; users can select a particular payment and type a question about it. This email will be sent as an OFC Payment Inquiry request to the server. The OFC Payment Inquiry request will include the payment’s confirmation number (SRVRTID) for easy reference by the bill payment processor.
For more information, reference the MAILRQ,, MAILRS and PAYIQRQ, PAYIQRS records in the Mail Records chapter and the Online Bill Payment records chapter.
Money users can sent requests to cancel a payment if the payment has not yet been processed. If today’s date + days-to-pay are less than the due date of the payment, Money will enable user interface that will allow the user to send a request to cancel a payment to the server.
Chapter 6
Online banking is the service where users can download their latest account balance, posted transactions and transfer money between accounts. Online banking also enables the user to send email to their bank.
For each account enabled for online banking, Microsoft Money will request the latest account balance and a list of transactions that have been posted to the account during every session with the server. A user can choose to disable these requests, but Money will enable them by default.
After the user has downloaded their statement, Money will help the user reconcile the statement against transactions they may have already recorded in their Account Register. The next section details how Money reconciles downloaded statements.
Matching downloaded transactions
Money includes an algorithm that will attempt to match transactions that the user has entered in their Money Account Register to those that have been downloaded in STMTRS or ACCTSTMT records. This section describes what elements a server should return to facilitate Money’s matching algorithm.
Users can transfer funds to and from accounts that are enabled for online banking. Both accounts must be at the same bank. Money will not allow future-dated transfers.
Users who have enabled online banking in Microsoft Money will be able to send messages to their bank.
Chapter 7
Microsoft Money and a bank’s server communicate in a batch mode model where in a single session, Money will send a request file of OFC records to a server, the server will process this request file and return a response file of OFC records back to Money. During a session with a bank’s server, it is possible that the communication session will terminate prematurely.
Crash Recovery is the behavior built into Microsoft Money to ensure that duplicate transaction requests are not processed by the server and to minimize the amount of user uncertainty when the communication session is interrupted. Money uses the DTCLIENT element in the OFC Signon request record for crash recovery.
DTCLIENT and Money crash recovery behavior
On each session with the server, Money will put the date and time of the call in the DTCLIENT element of the Signon request.
If a communication error occurs during a session or if the connection encounters a "time-out," Microsoft Money will enter crash recovery mode. While in this mode, a user will not be confident if their transactions were received by the server or not.
While in crash recovery mode, Money will not permit the user to send new transactions to the server. The user will be prompted to call the server again and resend the previous set of transactions. Crash recovery mode persists between sessions with Money.
When the user calls the server again, Money will send the exact same OFC request file to the server as it did on the last call to the server, when Money encountered a crash. This file will have the DTCLIENT value of the previous session. Money assumes that the server didn’t receive the transactions and sends them again. If the transactions were received and processed by the server, it is the server’s responsibility to prevent the transactions from processed twice.
Server crash recovery behavior
To guarantee that transactions are not processed multiple times, the server should store the OFC request and response files of the previous session.
When the server receives a request file from Money, it should compare the value in the DTCLIENT element of the Signon request to the DTCLIENT element of the last request file.
If they are equal, the server should assume Money is calling in crash recovery and the server should not process the transactions in the request file and send the response file from the previous session back to Money. If the DTCLIENT values are not equal, the server should process the transactions and send a new response file back to Money.
Algorithm to follow:
If (DTCLIENT in the current Signon request == DTCLIENT in the previous Signon request)
Don’t process the transactions in the request
Send the previous response file to Money
Else
Process the transactions in the request
Using the SESSKEY element to track sessions
Note: This section describes optional functionality for a server.
Money identifies each session with the server using the SESSKEY element in the OFC Signon record. The SESSKEY should be a value that uniquely identifies each user’s session between client and server.
A bank may want to make sure a user is calling their server in sequence by tracking SESSKEY values. If the user calls the server with an unexpected SESSKEY value, the bank can consider this to be an error and deny a user access to the server.
On the first call to an OFC server, Money will send a SESSKEY of zero (0) in the Signon request record. The server will process this request and send a Signon response back to Money. The Signon response from the server should include a SESSKEY value that will be sent in the next Signon request sent to the server.
On subsequent calls to the server, the Signon request sent from Money will include the SESSKEY value that was returned in the last session’s Signon response.
As an extra layer of security, the server can treat SESSKEY as session sequence numbers. The server should maintain the current and previous SESSKEY values.
If the user is calling with a SESSKEY that is unexpected (not the current or previous SESSKEY,) the server can reject the transactions in the request file. The server should return a Signon response record with a STATUS of 103 (Bad SESSKEY.) Based on this STATUS code, Money will display an error message to the user asking them to call their bank.
When the user calls their bank, it is expected that the bank will re-authenticate the user and then configure the server such that the next time the user connects, the server will process the transactions in the request file.
Algorithm to follow if the server is tracking SESSKEYs:
If (DTCLIENT in the current Signon request == DTCLIENT in the previous Signon request)
Don’t process the transactions in the request
Send the previous response file to Money
Else
If SESSKEY in the request file is the expected SESSKEY
Process the transactions in the request
Else
SESSKEY in the request file is not the expected SESSKEY and is not the previous SESSKEY
Don’t process the transactions in the request
Send just a Signon response with STATUS of 103
Notes:
Chapter 8
This chapter includes an introduction and some general notes about how Microsoft Money uses the OFC data format.
The OFC data format is composed of a set of records, each designed to represent a particular type of transaction between Microsoft Money and a server.
OFC is designed in a request-response model. OFC records come in pairs; each transaction includes a request and a response. The request transaction is designed to ask the server a question, the response will provide the answer. For example, one OFC transaction request asks the server for the latest balance of an account, and the response delivers the account balance to Microsoft Money.
Introduction to the OFC format
OFC files use a syntax based on Standardized General Markup Language (SGML). Records and aggregates are marked using open and closing tags to denote the beginning and end of the record or element. Elements are marked in a similar fashion, using one tag. Data immediately follows the tag.
OFC files are composed of records, aggregates, and elements. Each OFC record can hold a series of elements and/or aggregates. Elements represent single pieces of data like a date or a password. Aggregates are collections of elements and are used to describe more complex structures like an account or a payee. For example:
<Record>
<Element>
<Aggregate>
<Element>
</Aggregate>
</Record>
Microsoft Money requires that records in a valid OFC file be in the following order:
Note: <OFC> and </OFC> tags must surround every OFC file.
|
Request file |
Response file |
|
<OFC> |
<OFC> |
|
Signon records |
|
|
Signon request <SONRQ> |
Signon response <SONRS> |
|
Maintenance records |
|
|
Account request <ACCTRQ> |
Account response <ACCTRS> |
|
Payee request <PAYEERQ> |
Payee response <PAYEERS> |
|
Mail request <MAILRQ> |
Mail response <MAILRS> |
|
Transaction records |
|
|
Intrabank transfer request <INTRARQ> |
Intrabank transfer response <INTRARS> |
|
Interbank transfer request |
Interbank transfer response <INTERRS> |
|
Statement request <STMTRQ> |
Statement response <STMTRS> |
|
Payment request <PAYMTRQ> |
Payment response <PAYMTRS> |
|
Payment inquiry request <PAYIQRQ> |
Payment inquiry response <PAYIQRS> |
|
</OFC> |
</OFC> |
OFC files must have Signon records, then Maintenance records and then Transaction records. Within each section, the individual records do not need to be in a particular order.
Identifiers
OFC uses three identifiers to uniquely identify transactions. This section describes the purpose of each identifier.
|
Identifier |
Description |
|
<CLTID> |
Client identifier. This value is assigned by Money to uniquely identify a transaction. CLTIDs are found in every OFC record except the Signon request and Signon response. The server should always echo the CLTID value from the request in the response. CLTID is used to match OFC responses with OFC requests. CLTID can be up to 10 digits in length. |
|
<SRVRTID> |
Server transaction identifier. This value is assigned by a server to identify a transaction. For example, a confirmation number for a transaction is a SRVRTID. SRVRTID appear in the Money user interface as a "Confirmation #" for a payment. Money will display up to 8 characters for a Confirmation #. SRVRTIDs appear in STMTRS, INTRARS, INTERRS, PAYMTRS, PAYIQRQ, PAYIQRS, ACCTSTMT records. |
|
<FITID> |
Financial institution transaction identifier. This value is assigned by a financial institution to identify a transaction. FITIDs are included in STMTRS and ACCTSTMT records. Money uses FITIDs to prevent duplicate transactions when the user reconciles a downloaded bank statement. FITIDs appear in the STMTRS and ACCTSTMT records. It is strongly suggested that STMTRS and ACCTSTMT records include FITID elements for each transaction. FITIDs can be no longer than 255 characters. |
The following table lists the field lengths imposed by Money 5.0 on some OFC elements. Maximum lengths are listed in the Length column.
|
Element |
Length |
|
<ACCTID> Account number |
22 characters |
|
<BANKID> Routing number |
9 characters |
|
<BRANCHID> Branch number |
9 characters |
|
<MEMO> Memo text |
255 characters |
|
<NAME> Payee name |
32 characters |
|
<ADDRESS> Address |
32 characters |
|
<CITY> City |
20 characters |
|
<ST> State |
2 characters |
|
<POSTALID> Zip code |
9 characters |
|
<PHONE> Phone number |
10 characters |
|
<PAYEEID> Payee identifier |
32 characters |
|
<PAYACCT> Account number with payee |
32 characters |
|
<USERID> User identifier |
32 characters |
|
<USERPASS> User password |
32 characters |
|
<SESSKEY> Session key |
32 characters |
Each OFC response includes an <ERROR> element to hold error messages produced by the server. If the STATUS element in an OFC response is 100, Microsoft Money will display the information in the <ERROR> element to the user in its Call Summary dialog box. If a request was rejected by the server, the <ERROR> element should inform the user why the request was rejected and instruct them how to remedy the situation.
Servers can include one <ERROR> element in each response record. Each <ERROR> can be up to 65,534 characters long.
An OFC server should never include the greater than or less than characters (>, <) in the data of a response. This applies to all aggregates and elements. Money will be unable to read OFC files that contain these characters. For example, this is an illegal response:
<MEMO>This is > than that.
Record structure with error responses
OFC response records include the STATUS element that tells Money if the corresponding request record was accepted or not. STATUS != 0 tell Money that the server did not process the request record.
When returning a response with a STATUS != 0, the server should include an opening tag for the record, a CLTID, a STATUS, (an ERROR if the STATUS is 100) and a closing tag for the record.
For example:
<MAINTRS>
<CLTID>000003
<STATUS>1
</MAINTRS>
Chapter 9
This section of the document details the structure and syntax of valid aggregates and elements in OFC. Aggregates are collections of elements, elements represent single pieces of data.
These aggregates and elements are refernced in the subsequent pages of this spec that detail specific OFC records. This chapter is designed to be a reference, refer to each OFC record for details….
The account aggregate is used to describe an account.
|
Tag |
Description |
|
<BANKID> |
Unique identifier for the bank (e.g. routing and transit number) |
|
<BRANCHID> |
Used to describe international banks. |
|
<ACCTID> |
Account number at bank |
|
<ACCTTYPE> |
Type of account (aggregate) |
The account type aggregate provides a more detailed description of an account. Money uses it to match downloaded accounts with those created in Money.
|
Value |
Description |
|
0 |
Checking |
|
1 |
Savings |
|
2 |
Credit card |
|
3 |
Money market |
|
4 |
Line of credit |
|
5 |
Loan (Not supported by Microsoft Money) |
|
6 |
Interbank transfer payee |
|
7 |
Other |
The action is used in transaction requests to instruct the server to do something on behalf of the user.
|
Value |
Description |
|
0 |
Add |
|
1 |
Delete |
|
2 |
Change |
Amounts are composed of digits. A period "." or comma "," should be used to separate digits. If the amount is a debit, a minus "-" sign should be placed before the digits.
Amounts should always have 2 numbers following a decimal point.
<AMOUNT> XXXX.XX (credit w/ period)
<AMOUNT> XXXX,XX (credit w/ comma)
<AMOUNT>-XXXX.XX (debit w/ period)
<AMOUNT>-XXXX,XX (debit w/ comma)
Date and time <DTCLIENT>, <DTSERVER>
<DTCLIENT> and <DTSERVER> are used to specify date and time values. Both of these elements are based on the local time of the server and Money. The following syntax is supported
YYYYMMDDHHMMSS
YYYYMMDD (no time specified)
SERVICE is used to define the online services supported by the server.
|
Value |
Description |
|
0 |
Online banking |
|
1 |
Online bill payment |
|
2 |
Interbank transfer (int’l.) |
|
3 |
Interbank transfer (int’l.) |
|
4 |
Interbank transfer (int’l.) |
Notes on SERVICE:
PAYEE is used to describe a payee (merchant or individual). A PAYEE can be anyone the user wishes to pay electronically.
|
Tag |
Description |
|
<NAME> |
Name of payee |
|
<ADDRESS> |
First line of payee’s address |
|
<ADDRESS> |
Second line of payee’s address |
|
<CITY> |
Payee’s city |
|
<STATE> |
Payee’s state |
|
<POSTALID> |
Zip code |
|
<PHONE> |
Payee’s telephone number |
Statement transactions <STMTTRN>
For each transaction downloaded in a STMTRS, a complete STMTTRN should be provided to describe the transaction.
|
Tag |
Description |
|
<TRNTYPE> |
Type of transaction (aggregate) |
|
<DTPOSTED> |
Date transaction was posted to account |
|
<TRNAMT> |
Amount of transaction |
|
<FITID> |
Financial institution’s identifier for a statement transaction |
|
<CLTID> |
Money assigned transaction identifier |
|
<SRVRTID> |
Transaction identifier issued by the server |
|
<CHKNUM> |
Reference number for a transaction |
|
<SIC> |
Standard Industrial Code |
|
<PAYEEID> |
Payee identifier |
|
<PAYEE> |
Payee of transaction (aggregate) |
|
<NAME> |
Name of payee |
|
<MEMO> |
Description of transaction |
Notes on STMTTRN:
STATUS is used in responses to indicate the state of the request.
|
Value |
Description |
|
0 |
Accepted |
|
1 |
Rejected |
|
4 |
No CLTID (unsolicited transaction) |
|
5 |
Bad SESSKEY (See chapter on Crash recovery) |
|
100 |
Undefined error, include description in <ERROR> text |
|
101 |
USERID not recognized |
|
102 |
USERPASS not recognized |
|
103 |
Password change requested |
|
104 |
Account not recognized |
TRNTYPEs are used to define the type of a transaction.
|
Value |
Description |
|
0 |
Credit |
|
1 |
Debit |
|
2 |
Interest |
|
3 |
Dividend |
|
4 |
Service charge |
|
5 |
Deposit |
|
6 |
ATM withdrawal |
|
7 |
Transfer |
|
8 |
Check |
|
9 |
Electronic payment |
|
10 |
Cash withdrawal |
|
11 |
Electronic payroll deposit |
|
12 |
Other |
Notes on <TRNTYPE>:
Chapter 10
OFC and Signon records are used to identify the OFC file and to authenticate a user on a server.
Tags displayed in bold are required by Microsoft Money.
The OFC record contains the version of the OFC data format used to create the file.
|
Tag |
Description |
|
<OFC> |
Opening tag for the OFC record. |
|
<DTD> |
Version of the Document Type Definition used to parse this OFC file. |
|
<CPAGE> |
Code page of the server computer. |
|
…OFC records… |
Additional OFC records are inserted in between the <OFC> and </OFC> tags. |
|
</OFC> |
Closing tag for the OFC record. |
Implementation details on <OFC>
The Signon request is designed to contain information to log the user into a server. This record can also be used to identify the session between client and server.
|
Tag |
Description |
|
<SONRQ> |
Opening tag for the SONRQ record. |
|
<SESSKEY> |
Session identifier. Used to keep track of the session between client and server. Can be up to 32 characters in length. |
|
<DTCLIENT> |
Date and time of the client computer used for crash recovery |
|
<USERID> |
User identification on server. Money allows a USERID up to 32 characters in length. |
|
<USERPASS> |
User’s password on server. Money allows a USERPASS up to 32 characters in length. |
|
<NEWPASS> |
If the client allows the user to change their password, this field could hold the new password. |
|
</SONRQ> |
Closing tag for the SONRQ record. |
Notes on <SONRQ>
The Signon response answers the Signon request.
|
Tag |
Description |
|
<SONRS> |
Opening tag for the SONRS record. |
|
<STATUS> |
Possible values here: |
|
<DTSERVER> |
Date and time of the server. |
|
<ERROR> |
If the STATUS is 100, an explanation should be provided here. |
|
<SESSKEY> |
The SESSKEY for use in the next session. |
|
<SERVICE> |
Possible values here: |
|
<DAYSREQD> |
The default days-to-pay value for a bill payment service. |
|
<DAYSWITH> |
The default funds withdrawn value for a bill payment service. |
|
</SONRS> |
Closing tag for the SONRS record. |
Notes on implementing <SONRS>:
When implementing the SONRS, follow these instructions based on the STATUS value returned:
If STATUS is 0
If STATUS is 5
If STATUS is 100
If STATUS is 101
If STATUS is 102
If STATUS is 103
If the user has changed their password