Monday, May 14, 2018

Update Available

Last updated:   28-May-2018

I finally found a bit of time to update the scripts to include some recently discussed enhancements.  Specifically:

  1. When adding or updating an account in Setup, it will now query the institution, and give a list of valid accounts.  The user can still enter the account number manually, and will need to do so if/when a bank masks the account number in the reply (e.g., XXXX-XXXX-1234).  Otherwise, the user can select the account number from the list.
  2. When running GetData, if a connection fails for a given Site+Username combination, it will not attempt another connection with those same credentials at that site during the session.  The intent is to give a single error message, regardless of the number of accounts assigned to a given username at a site.  A new sites.dat option named skipFailedLogon can be used to override the behavior.
  3. Setup now sorts accounts by sitename+username+account.
The new version is available for download.

- Robert

162 comments:

  1. Adding Account does a nice job of listing accounts, but since I had all 6 accounts that were listed already set up, I hit Return on the Account # prompt, rather than a line # or account #, and the whole python script disappeared. This didn't hurt anything, but I expected it to go back to the main menu instead.

    ReplyDelete
  2. Works very nice for Credit cards as well; specifically Discover where before you had to log into your web account and inspect the downloaded ofx file to determine your coded account number, now it is revealed with Robert's new routine.

    ReplyDelete
  3. Thanks for the feedback Dan. I updated the release version, including the bug fix above.

    ReplyDelete
  4. Very Nice Robert! If you could add a feature to reorder the accounts that would be a nice add...

    ReplyDelete
    Replies
    1. It would be easy to add a "sort" option, maybe by site+username+account? It probably makes sense to just auto-sort when adding or changing an account, rather than having it as an option. I only have a few accounts, so haven't really noticed.

      Delete
    2. I added a sort step to the Setup routine, such that accounts are now sorted by Sitename+username+account. It happens each time Setup is run, and anytime an account is edited/added/deleted.

      Delete
    3. Thanks! This is a great feature!

      Delete
  5. Thank you Robert, I have been using your scripts for years to extend the life of MS Money. I have scoured your site and blog for fixing the DISCOVER OFX problem. I tried several things including updating python 2.7 and adding the new updated scripts but nothing seems to be working. Below is the latest OFX return.

    You don't have permission to access "http://ofx.discovercard.com/" on this server.
    Reference #18.e22f5dcc.1526756728.451c74

    My sites file has the following entry :

    SiteName : DISCOVER
    AcctType : CCSTMT #credit card
    fiorg : Discover Financial Services #Discover Card Account Center
    fid : 7101 #9625
    url : https://ofx.discovercard.com
    bankid : # 031100649
    brokerid :
    ofxVer : 103
    appid : QWIN
    appver : 2200
    mininterval:
    timeOffset :

    Any guidance would be most appreciated.

    ReplyDelete
  6. Remove 103 from ofxVer and see my blog article https://microsoftmoneyoffline.wordpress.com/2017/05/12/discover-has-changed-your-account-id/
    regarding your coded account #.

    - ameridan

    ReplyDelete
    Replies
    1. Thank you very much. I was thrown off by the account number, you must keep the leading Discovr in the account number. When I typed it in exactly as the setup pocketsense script reports then all worked fine. I am so happy my MS Money OFX imports are fully functional again after about a year. Thank you for continuing to support and update pocketsense for those of us that won't accept inferior alternatives to MS Money.

      Delete
    2. Just fyi, but my Discover settings are simpler, and work with either ofxVer=102 (default) or 103.

      SiteName : DISCOVER
      AcctType : CCSTMT #credit card
      fiorg : Discover Financial Services
      fid : 7101
      url : https://ofx.discovercard.com
      bankid :
      brokerid :
      appid :
      ofxVer :
      appver :
      mininterval:
      timeOffset :

      Delete
  7. I pasted the 5/20 setup.py and control2.py files into my folder to try out and although my Schwab downloads work when using Setup to test (everything sorted nicely), I tried 4 times with the Getdata and the Schwab downloads errored out. I copied the 5/16 control2.py and setup.py back and the Schwab downloads worked again. May just be coincidental, but thought I'd relay it to you Robert. Setup isn't involved in the getdata queries, are they?

    ReplyDelete
    Replies
    1. No connection between them and, in fact, the new Setup would have saved the accounts "sorted"... so that the previous version would execute in the same order as the new.

      Delete
  8. Robert, I reverted back to the newest version, but because of errors? that I'm getting today

    {CODE}2000
    {SEVERITY}ERROR
    {MESSAGE}General error

    {STATUS}
    {CODE}15500
    {SEVERITY}ERROR
    {MESSAGE}Signon (for example, user ID or password) invalid (ERROR)

    once a Schwab getdata fails, it doesn't try any more for the remaining other accounts. Can you put a toggle on your new logic for those of us that want to try all accounts as we've been doing for years, rather than give up after one failed? Today must just be a bad day for that server.

    ReplyDelete
    Replies
    1. I can, but are you saying that it (randomly) fails one account and not the others during a single session? Seems odd, especially since it's giving an error related to "password". I haven't seen this on the servers I use, but I don't connect to Schwab.

      Delete
  9. Yesterday, yes some accounts worked. Today, all seems well again. I've always liked that it tries all accounts and just ignores the occasional erroneous feedbacks. In my case, I don't like that it skips trying all of my remaining Schwab accounts once it encounters an error. I would appreciate an override flag in sites.dat ;)

    ReplyDelete
  10. Robert, you can just ignore. If I want to get transactions from a Schwab acct that has transactions daily, I'll just use Setup instead. Most days, the server doesn't have errors.

    ReplyDelete
  11. Dan, if you get a real {CODE}15500 4 times in a row, won't you get locked out and have to get your password reset?

    On the times where things get stopped, I would check the recorded OFX in XFR, and see if there was indeed a {CODE}15500. I would think a failed server would give a different indication.

    cl

    ReplyDelete
  12. Possible. I don't think I've ever gotten 4 in one occassion, although Monday might have triggered that with the old script. ;)

    ReplyDelete
  13. As of now, the script doesn't parse the failed attempt to determine whether it's a potential credential error, as I figured any failed connect was cause enough to skip that server for that session. The next step was going to be to add checks for specific errors, if needed. Dan's errors above indicate that the same error was getting thrown even when it wasn't related to credentials, so it may not help?

    I added a flag for disabling the check, but haven't yet posted it. I think it's better to accept the failed check, than to risk locking an account, but that's just my opinion ;)

    ReplyDelete
  14. It would be possible to have an optional site descriptor entry that identifies what that FI returns to indicate a failed credential check. For most FIs it is going to be the {CODE}15500.

    It would also be possible to run a count on fails.

    I can see this could make things more complex or obscure. Just throwing it out.

    cl

    ReplyDelete
    Replies
    1. I thought about it too, but I couldn't think of a reason to (immediately) retry a failed connect, when the user can run it again, if they want. For this case, if a server response fails once, there's no harm in skipping it. Otherwise, it will either rapid fire to a bad response (e.g., bad credentials), or hang for the socket timeout over again.

      Delete
  15. I finally had a moment to focus on this. A new version has been posted, adding a sites.dat option named skipFailedLogon to override the (default) behavior of skipping subsequent accounts after a failed logon. Default = Yes.

    ReplyDelete
    Replies
    1. Thank you Robert. I'm using the option, but Schwab servers are behaving properly anyways.

      Delete
    2. Where exactly do I (manually) add "skipFailedLogon" to sites.dat, and how is it to be stated?

      Delete
    3. It's described in the sites template file.

      Delete
    4. Here is what I added to sites.data and it doesn't work (I need it to continue trying to connect):

      #Entries are (FieldName : Value) pairs, one per line. Spacing/Tabs are ignored.
      #anything following a "#" symbol is ignored (treated as a comment)

      #If a connection to a site fails during Getdata, no further connections will be attempted for that site+username combo during the session.
      #--------------------------------------------------------------------------------
      skipfailedlogin: No


      #define default download interval (days)
      #--------------------------------------------------------------------------------
      defaultInterval: 30

      jmf

      Delete
    5. I did try "skipfailedlogon: No"also.


      #define default download interval (days)
      #--------------------------------------------------------------------------------
      defaultInterval: 30

      Delete
    6. The strings are case-sensitive. You showed using lowercase.

      Line 52 of the template shows the string. You would want to enter "skipFailedLogon: No"

      cl

      Delete
    7. User flags in sites.dat aren't case sensitive, however this is a flag I wasn't able to really test. It only gets used by GetData, not setup/test, so I'm curious if there may be a bug. Did you update *all* files to latest version?

      Delete
    8. Another comment on sites.dat user flags. Flags can't be "inside" a site definition block. They can be anywhere else in the file, with one option per line.

      Delete
  16. Hello,
    I've been tracking my finances with Microsoft Money for a number of years and only recently started using PocketSense -- what a life enhancer! I also started trading cryptocurrencies a few months ago and I wanted an easy way to import these transactions into MS Money. I've made a simple website that details how I've done it. I am able to use PocketSense to update MS Money with cryptocurrency quotes from Yahoo.

    http://pages.suddenlink.net/shaferandrew

    Thanks!
    -Andrew

    ReplyDelete
  17. Recently seeing my Chase downloads receiving 502 Bad Gateway in the XFR files. I upgraded to the latest version and no change. Any recommendations or what could have caused the issue?

    ReplyDelete
    Replies
    1. Hi Andrew,
      I can confirm that Robert's scripts connect to the Chase Visa credit card server as expected using Active State Python 2.7.14 Build 2717.
      -Kevin N.

      Delete
    2. This comment has been removed by the author.

      Delete
    3. ActivePython 2.7.12.2712 (ActiveState Software Inc.)

      Delete
    4. I installed Build 2717 and see the same issue.

      Delete
    5. Verify that the new version is the active one by running python in a command prompt, e.g.

      > python

      >> version

      If that looks good, you may want to post your site entry so others can compare. I don't use chase myself.

      Delete
    6. Chase is working fine for me with 2.7.14. Here are my site entries:

      SiteName : CHASE
      AcctType : BASTMT
      fiorg : B1
      url : https://ofx.chase.com
      fid : 10898
      bankid : 021000021
      brokerid :
      appid : QWIN
      appver : 2400
      mininterval :
      ofxVer : 103

      ----

      SiteName : CHASE CREDIT CARD
      AcctType : CCSTMT #credit card
      fiorg : B1
      url : https://ofx.chase.com
      fid : 10898
      bankid :
      brokerid :
      appid : QWIN
      appver : 2400
      ofxver : 103
      mininterval:

      Delete







    7. SiteName : Chase
      AcctType : CCSTMT #credit card
      fiorg : B1
      fid : 10898
      url : https://ofx.chase.com
      bankid :
      brokerid :
      appid : QWIN
      appver : 2400
      ofxver : 103
      mininterval:



      I deleted my Chase entries and then attempted to add them again and I received a message that my login and password are wrong, but if I go to the site - the credentials are fine

      Delete
    8. I have NOT upgraded to the latest version. But I too am experiencing the same issue as Andrew. I have been using the scripts for years with no issues. I too get 502 Bad Gateway. I have couple of accounts and only 1 is experiencing this issue. This started 6/4. I wonder if Chase is making changes on their end???

      Delete
    9. Sam - I just fixed my issue by logging into Chase and accessing the secure message center and clicking the email to confirm my identity. Once I did that, everything is working again. Now, my caveat. I also have a download of Quicken installed here as a test so I don't know if importing my Chase data into it caused the secure message from Chase to generate, but those are the steps I took.

      This may help too. https://microsoftmoneyoffline.wordpress.com/2018/01/07/chase-ofx-downloads/

      For each account user (sites.dat entry), after running Pocketsense > Setup > Test Account, you will get an error informing you that you have a secure message requiring your verification. Logon to your web account, click on top left button and then click on Secure Messages and then click on the link within your most recent message to activate downloads.
      Now you will be able to test once again, and you should have a successful download that you’ll need to Send to Money, so that you can match with the appropriate account in Money.
      Test each account individually and match to Money accounts before running the regular combined downloads.

      Delete
  18. Andrew, when you access https://ofx.chase.com with a web browser such as IE, you should get a 501 error.

    It may be that your problem with the 502 error was a transient condition.

    cl

    ReplyDelete
  19. I suggest that you look through the 20 references to Chase in http://pocketsense.blogspot.com/2017/11/new-version-available-includes-yahoo.html A few of those will be useful I suspect.

    cl
    Getting Chase working was a hot topic early in the year.

    ReplyDelete
  20. See if this helps as well...
    https://microsoftmoneyoffline.wordpress.com/2018/01/07/chase-ofx-downloads/

    ReplyDelete
  21. NxtTek, I had looked at that link, and saw it did not mention ConnectKey. I am just an observer, but I had been thinking that was tied into the Chase access.

    I think you are saying that as far as you know, https://microsoftmoneyoffline.wordpress.com/2018/01/07/chase-ofx-downloads/ cover the needed Chase-specific info for credit cards and bank.

    cl

    ReplyDelete
    Replies
    1. cl, you didn't read the 4th bullet item. If you clear your credentials, you get a new ConnectKey. or am I missing something?

      Delete
  22. It appears USAA Bank has made a change yesterday as I can no longer download data. The First line of the error message is: "An error occurred sending post request to service2.usaa.com". Please advise...

    jmf

    ReplyDelete
    Replies
    1. I can confirm that USAA is working as of right now (6/9/18 12:50). Both regular checking/savings and brokerage IMCO.

      Delete
    2. Andrew,

      Did you get my email?

      jmf

      Delete
    3. I did not. Just saw this thread again today.

      Delete
  23. USAA Bank

    Why is this not working any more?


    SiteName : USAA Checking
    AcctType : BASTMT
    fiorg : USAA
    fid : 24591
    url : https://service2.usaa.com/ofx/OFXServlet
    bankid : 314074269
    brokerid :
    appid : QWIN
    appver : 1700
    mininterval:
    timeOffset :

    ReplyDelete
    Replies
    1. Those of you who are successfully connecting to USAA checking, please share your site information from your sites.dat file. Thank you

      Delete
    2. Successfully used today:

      SiteName : USAA
      AcctType : BASTMT #bank
      fiorg : USAA
      fid : 24591
      url : https://service2.usaa.com/ofx/OFXServlet
      bankid : 314074269
      brokerid :
      appid : QWIN
      appver : 1700
      mininterval:
      timeOffset :

      Delete
    3. Hi Unknown,

      In sites.dat anything followed by a # is treated as a comment and is ignored in the file. #bank is simply the user indicating that the account type is a bank account.

      You can enter #bank as well if you wish or omit it. It will have no effect either way.

      -Kevin N.

      Delete
    4. Seems my problem is a certificate problem (Exception type : ), I have updated to version 18-May-2018, not sure what to do next. Please advise, thank you.

      Delete
    5. Hi Unknown,

      What version of python are you using?
      At a command prompt type python -V (that's a capital V)

      -Kevin N.

      Delete
    6. i'm using python ver 2.7.2.5, how do i update?

      Delete
    7. Thanks Kevin! I updated to the latest version of Python and all is well.

      Delete
    8. https://www.activestate.com/activepython/downloads You would want 2.7.14.2717. Make sure you don't get version 3.x

      Robert: Note the "new version" link above does not work.

      cl

      Delete
    9. Hi Unknown,

      You're welcome. I'm glad to hear that you were able to get this sorted.

      Thank you for reporting back with your results.

      -Kevin N.

      Delete
  24. I removed the appver value from sites.dat using my text editor. Do I need to do anything else to make it so as it didn't seem to make a difference when I ran getdat?

    ReplyDelete
  25. That was a very old version of Quicken. Guess it must be something else then.

    ReplyDelete
  26. jmf -- the USAA customer with a problem:

    If I access https://service2.usaa.com/ofx/OFXServlet with a web browser, such as IE or Chrome, I get error 405.

    If I access https://service2.usaa.com/ I get a web page with logo and "System Error" indication.

    If you don't get those, there may be something blocking your path. I am not saying this will help, but trying the two URLs is easy.

    cl

    ReplyDelete
  27. I finally got around to testing the latest version. Thank you Robert for adding the skipFailedLogon option. I think that will be handy! (since I requested it, I may be biased).

    Testing the new add functionality that lists accounts obtained from server I discovered an interesting "feature" that could affect people, so I'll document it here. Bank of America has multiple sites with diffent bankid for different uses. I no longer remember how I stumbled upon this, but I have one bankid for my checking, one for my money market and business accounts, and an empty bankid for my credit card.

    When logging in to Bank of America under ANY of the bankid's and trying to add a new account, the server will list ALL the accounts available at the bank. However, if you are not using the correct bankid, the download will fail!

    This will also affect the new skipFailedLogon. Robert's implementation only looks for failures in a site/username combo. In BoA's case, I have 3 sites so I could fail on the first site, the next two would still attempt to login.

    ReplyDelete
    Replies
    1. Interesting. Do you use one username and password combo for all of these, and do all have the same connection url?

      Delete
    2. Robert,
      Strange. I thought i had replied.

      I have three different entries for BoA. They all use the same "url", "fid" and "fiorg". Two have different "bankid" and one has an empty "bankid". It's been too long since I figured this out to remember why this setup.

      All three entries use the same exact username and password (they are all seen under the same login on the web). The empty "bankid" is used for credit cards (so it has AcctType=CCSTMT; it is used for both a personal and business cc). One of the other entries is used only for my checking account which was opened decades ago (so it may have to do with the fact that BoA used to care about what state you opened your account in). The other entry is used for a money market, a business saving, and a business checking.

      Because I can log in with the same username/password and see all my accounts, when I go to set up a new account in PocketSense it will list all 6 accounts regardless of which I use. But if I'm not in the "correct" then I get an "incorrect username" error when I attempt to actually download the statement.

      Let me know if you ever want me to debug further.
      Carlos

      Delete
  28. I have never been able to get the Dow Jones index to download, yet I noticed it is still in the sites.template file. Am I missing something on how to get it to download? I get the error: "error reading http://finance.google.com/finance?q=INDEXDJX:.DJI"

    ReplyDelete
    Replies
    1. Google Finance hasn't been working since they removed json quote sections from their web interface. I rewrote the Yahoo interface at about the same time, when they changed their method. Yahoo now supports a much broader quote set than previously, including foreign exchanges.

      Try ^DJI for a yahoo quote for the Dow 30.

      Delete
  29. Thanks for your work on this Robert!

    Has anyone been able to get Capital One credit cards to work? It seems like the OFXhome data has been erroring out for a while now, but curious if anyone has found the right combo to use.

    ReplyDelete
    Replies
    1. I don't use Capital One, but check http://moneydance.com/synch/moneydance/fi2004.dict too.

      Delete
  30. Robert - Is there a way to get PocketSense stock/fund quotes to load directly into Moneydance without user intervention? I tried creating the Tickers investment account and included all of the stock/fund tickers that I added to the sites.dat file. Moneydance balks when trying to load the quotes.ofx file and, unfortunately, doesn't update any of the ticker prices.

    ReplyDelete
    Replies
    1. Hi Dava,

      It is my understanding that Moneydance garners it's price quotes via a CSV file.

      Poketsense can generate the required CSV file (via sites.dat 'SaveQuoteHistory: Yes') but you would still need to incorporate Mike Bray's Security Price Loader extension to get the quotes into Moneydance.

      -Kevin N.

      Delete
  31. Hi All,

    Windows 10 Home 64-bit Ver. 1803
    MS Money Ver. 17.0.120.3817
    Pocketsense Ver. 16-May-2018
    Python Ver. 2.7.14

    Q. How do other MS Money users manage Certificates of Deposit (CDs) in MS Money?
    As a holding in an investment account?
    An asset account?
    Or something else?

    I recently purchase several CDs thru Fidelity.
    They were all new offerings.
    Their set price was $100.00.

    When the scripts download the OFX data from Fidelity, they pull in a < UNITPRICE >
    (which is possible the price from a secondary market for the CDs.)

    The < UNITPRICE > is always equal to or a few pennies / dollars lower than the original $100.00 price.

    I intend to keep the CDs to maturity so I don't want the < UNITPRICE > updated.

    Q. Is there a way for the scripts to scrub or ignore the < UNITPRICE >?

    OR...

    Should I be managing the CDs in a manner other than as a holding in an investment account?

    Thank you for any of your insights into this matter.

    -Kevin N.

    ReplyDelete
  32. I buy secondary CDs thru Schwab, and have the same experience. For reports (current year, previous year, etc) that calculate income from CDs that would be thrown off by the fluctuation, I manually enter an "update" price of $100 (or the actual purchase price) for the last day of each (current) year.

    That doesn't help on the portfolio views, but in actuality, the fluctuations do reflect current value, if you needed to sell. With my method, the price will be to your liking for annual reports and the redemption price will also be real, so I would otherwise just live with it.

    ReplyDelete
    Replies
    1. Hi NxtTek,

      Thank you for your reply.

      I'm currently deleting the 'updated' price of the CDs each time that I import from Fidelity.

      I run Moneydance in parallel with MS Money as something of a checks and balances. In order for the checks and balances to work, I need the two programs to balance out to-the-penny. Thus, I was hoping that the scripts could ignore the < UNITPRICE > or scrub it.

      Thanks again,

      -Kevin N.

      Delete
    2. Try my idea just to see if it will help you as that will then be the most current price. Enter 12/21/2018 and 100.00 in update prices / manually

      Delete
    3. I meant 12/31/2018

      -ameridan

      Delete
    4. Hi NxtTek,

      I thought that you might be on to something there by inputting a future date with a price of $100.

      The CDs in question are 6-month CDs.

      I opened the 'Update Prices Manually' form and entered the maturity date and $100.00.

      Alas, the Fidelity import still interjects the < UNITPRICE > value for today.

      It's only 5 CDs, so I can manage by deleting the price with each import.

      I was just hoping that it would be a quick-fix thing that Robert work his magic with.

      Thank you again for your help.

      -Kevin N.

      Delete
    5. ...that Robert *could* work his magic with. :)

      Delete
  33. I still have CDs @ 5+%, so my values are over $100, but I agree it would be nice to either keep the value @ 100, or just ignore the price updates altogether. Sounds like a _scrubUnitPrice (ofx) routine would help you when FDIC is in {MEMO} that would replace the reported value with 100.00

    ReplyDelete
    Replies
    1. Hi NxtTek,

      5+'s, nice. I thought I was lucky getting 6-month 2's. :)

      If writing a scrubber is involved, it's far beyond the scope of my knowledge on how to do so. :(

      I don't know what string the scrub would need to hinge on. The OFX generated from Fidelity for example, makes no mention of 'FDIC'. (although, they are FDIC insured)

      -Kevin N.

      Delete
  34. I'm not sure that it's wise to attempt to adjust or remove "reported" unit pricing via the scripts, as I'm not sure what it means. I'm assuming a CD is purchased with a minimum holding period, and if it's sold prior to that date, then there's a redemption fee. If so, then the cash value today is indeed less than the face value, and imho, should be tracked as such. Am I misunderstanding?

    ReplyDelete
    Replies
    1. Hi Robert,

      Thank you for your reply.

      CDs purchased as new offerings, as were mine, are sold at a price of $100. They also can be bought and/or sold in secondary markets prior to their maturity for more than $100 or less than $100 based on their current market value.

      In my case, the CDs have only a 6-month duration and I intend to hold them to maturity. Thus the secondary market pricing serves no purpose for me and due to my set-up of checks and balances with Moneydance, it actually creates a small hindrance.

      I tend to agree with your concerns about tinkering with reported unit pricing. It has the potential of creating more problems than it solves.

      I'll just delete the unit prices as I perform the import. There's only 6 CDs involved so it's no biggy.

      Thanks again,
      -Kevin N.

      Delete
  35. This comment has been removed by the author.

    ReplyDelete
  36. Anyone grandfathered into BofA's direct connect tried to add a new account? I have an old account that works with Bank of America's direct connect. I opened a new account recently and have been unable to get direct connect to work with it. BofA says I'm grandfathered so any new accounts are also enabled for direct connect.

    I get the following error message with the new account:
    "The account you have entered is incorrect. Please verify that the entire account number has been entered, including any leading zeros. Please contact 1.800.933.6262 for assistance."

    Any help would be greatly appreciated.

    ReplyDelete
    Replies
    1. See the text I just posted further up. I've had to set up three different entries for BoA depending on the account. All use the same "url", "fiorg", and "fid". However the "bankid" is different. "bankid" appears to be the routing number on my checking account. For the oldest account I use "052001633" for the newer accounts I use "051000017" and for the credit card accounts I leave "bankid" blank.

      I last added new bank accounts from BoA to PocketSense about 3 years ago. Although technically I've added "new" credit cards as recently as a month ago when my credit card had to be changed due to fraud.

      Delete
    2. Ah awesome! I had tried everything without realizing the routing numbers for both bank accounts were different. Just added the new account with its own routing number and works like a champ. Thanks much! Finally fixed

      Delete
  37. This comment has been removed by the author.

    ReplyDelete
  38. Gbenro, did you try the new list feature?

    CL

    ReplyDelete
  39. Carlos, I have the same experience at PNC. Just because you see all of your accounts listed when you are in Setup, doesn't always mean that you will be able to actually download with those credentials. I had to set up an alternate PNC sites.dat entry with a different routing number in order to have successful downloads from my newer account.

    ReplyDelete
  40. Hi Robert,
    I'm another one of the long time users of your scripts, ever since Microsoft stopped support for Money.

    Please find below some code I use in scrubber.py to fix paid out dividends and capital gains from T. Rowe Price (TRP). They incorrectly report them as reinvested in such a way that Money won't import the transactions. Interestingly, Money doesn't even burp when digesting the OFX download to let you know there is a problem. In case this affects other folks, this is how I convert transactions to when are 0.0.

    Due to posting size limitations, I will break this into two posts.

    Step 1) In scrubber.py on line 55 add a comment:
    #27-Jul-2018*dbc
    # - Add TRowePrice scrub function to fix paid-out dividends/cap gains that are marked as reinvested

    Step 2) In scrubber.py on line 85 after "if 'DISCOVERCARD' in siteURL: ofx= _scrubDiscover(ofx, accType)", add:
    if 'TROWEPRICE.COM' in siteURL: ofx = _scrubTRowePrice(ofx)

    Step 3) In scrubber.py on line 218 following "def _scrubDiscover_r2(r, accType):", add:
    #-----------------------------------------------------------------------------
    # OFX fiorg T. Rowe Price
    # 1. T. Rowe Price OFX reports paid-out (non-reinvested) dividends and capital gains incorrectly
    # in such a way that MS Money ignores the transaction.
    # These transactions can be identified as reinvestments having 0.0 shares.
    # The transaction will be bounded by and and contain 0.0.
    # Furthermore, the payment is incorrectly shown as a negative value, the memo field is misleading, and
    # a required field () is missing.
    #
    # For dividends (DIV) make these changes to the transaction:
    # Change to
    # Change DIVIDEND (REINVEST) to DIVIDEND PAID
    # Change -#.## to #.##
    # Following CASH add CASH
    # Delete 0.0
    # Delete #.##
    # Change to
    #
    # For short term capital gains (CGSHORT) make these changes to the transaction:
    # Change to
    # Change SHORT TERM CAP GAIN REIN to SHORT TERM CAP GAIN PAID
    # Change -#.## to #.##
    # Following CASH add CASH
    # Delete 0.0
    # Delete #.##
    # Change to
    #
    # For long term capital gains (CGLONG) make these changes to the transaction:
    # Change to
    # Change LONG TERM CAPITAL GAI to LONG TERM CAPITAL GAIN PAID
    # Change -#.## to #.##
    # Following CASH add CASH
    # Delete 0.0
    # Delete #.##
    # Change to
    #

    def _scrubTRowePrice(ofx):
    global stat
    ofx_final = '' #new ofx message
    stat = False
    if Debug: print('Function _scrubTRowePrice(OFX) called')

    #Process all ... transactions
    #Use non-greedy quantifier .+? to avoid matching across transactions.
    p = re.compile(r'.+?',re.IGNORECASE)
    #re.sub() command operates on every non-overlapping occurence of pattern when passed a function for replacement
    ofx_final = p.sub(lambda r: _scrubTRowePrice_r1(r), ofx)

    if stat: scrubPrint("Scrubber: T Rowe Price dividends/capital gains paid out.")

    return ofx_final

    to be continued....
    David Casada

    ReplyDelete
  41. Continued from posting above.

    Step 4) In scrubber.py on line 271 following "def _scrubTRowePrice(ofx):", add:
    def _scrubTRowePrice_r1(r):
    #regex subsitution function: if 0.0 then convert transaction from to

    global stat

    #Copy the reinvested transaction for manipulation
    ReinvTrans = r.group(0)
    #Create variable for the paid out transaction
    PaidTrans = ''

    # If units are 0.0 then scrub the ofx transaction
    if '0.0<' in ReinvTrans.upper():
    #Flag that at least one transaction is scrubbed
    stat = True

    #Use regex to parse the REINVEST transaction with following format
    #...erroneous memo...DIV or CGSHORT or CGLONG-#.##CASH0.033.33
    #into these 10 groups:
    # m.group(1) =
    # m.group(2) = ...
    # m.group(3) = erroneous memo
    # m.group(4) = ...
    # m.group(5) = type of income (eg DIV, CGSHORT, CGLONG)
    # m.group(6) = -#.##
    # m.group(7) = CASH
    # m.group(8) = #.###
    # m.group(9) = #.##
    # m.group(10) =
    p = re.compile(r'()(<.+?)(.+?[^<]*)(.+?)(.+?[^<]*)(.+?[^<]*)(.+?[^<]*)(.+?[^<]*)(.+?[^<]*)()',re.IGNORECASE)
    m = p.match(ReinvTrans)

    gr01 = '' #Change from
    gr02 = m.group(2)
    gr04 = m.group(4)
    gr05 = m.group(5)
    if gr05 == 'DIV' : gr03 = 'DIVIDEND PAID'
    elif gr05 == 'CGSHORT' : gr03 = 'SHORT TERM CAP GAIN PAID'
    elif gr05 == 'CGLONG' : gr03 = 'LONG TERM CAPITAL GAIN PAID'
    else : gr03 = m.group(3) #Leave as reported
    gr06 = m.group(6).replace('-','')
    gr07 = m.group(7) + 'CASH'
    #No need to capture m.group(8) since it is deleted
    #No need to capture m.group(9) since it is deleted
    gr10 = ''
    PaidTrans = gr01+gr02+gr03+gr04+gr05+gr06+gr07+gr10

    if Debug: print('Reinv Trans: '+ReinvTrans)
    if Debug: print('Paid Trans: '+PaidTrans)

    return PaidTrans #return the new string for regex.sub()
    #-----------------------------------------------------------------------------



    I personally thank you for the wonderful PocketSense OFX scripts you maintain. It was fun learning how to program python using your examples as building blocks to solve my problem.
    Cheers, David Casada

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
    2. Dear Robert,
      After posting the code above, I noticed that Blogger stripped out everything that looked like an OFX tag in my descriptions, comments, and code. Net result is that my posting is not very readable. Furthermore, the code above won't work as displayed. Sorry about the confusion. I am happy to send you the working code by other means. PS: I fixed my profile so I don't show up as "Unknown".
      Cheers, David Casada

      Delete
    3. David Casada

      1. I like tinyupload.com to post a file easily. You get a URL to post. They stay until 30 days go by without an upload. While escape codes can handle the pointy brackets, Python needs the indentation to stay intact.

      2. Recently a poster in the Microsoft Money forum reported using T Rowe Price. I then tried to find a T Rowe Price sites.dat descriptor for PocketSense. Could you post your successful descriptor here or there?

      3. I think it might be a good idea for the distributed scrubber.py to have a described way for users to keep their FI-specific scrubbers intact even though upgrading the Pocketsense. I just integrate my Fidelity scrubber stuff right into the scrubber.py, but there may be a better system that could be thought up. Maybe the descriptor in sites.dat could include a FI-specific scrub hook.

      Thanks.

      CL.

      Delete
    4. Thanks for your reply and suggestions CL.

      1. You are right that the python code indentation and OFX tags with pointy brackets are important to preserve. Therefore I posted the instructions and python code to modify PocketSense scrubber.py routine (Version 180528) to fix non-reinvested dividend and capital gain transactions from T. Rowe Price at TinyUpload.com. The url is http://s000.tinyupload.com/?file_id=48563419858875598680

      2. I typically check with ofxhome.com to get OFX configuration information. Their T. Rowe Price web page is at http://www.ofxhome.com/index.php/institution/view/466. This is my entry in sites.dat:
      SiteName : T. Rowe Price
      AcctType : INVSTMT #investment
      fiorg : T. Rowe Price
      fid :
      url : https://www3.troweprice.com/ffs/ffsweb/OFXServlet
      bankid :
      brokerid : troweprice.com
      appid :
      appver :
      mininterval: 15
      timeOffset :
      In setup.py I entered my account number in format dddddddddd-d including leading zeroes if needed.

      3. Like you, I modify scrubber.py myself. I do like your idea for an FI-specific scrub hook in sites.dat, but I am not volunteering Robert to do even more work! ;) I just hope that the information I provided makes it easy for him and other users to implement this scrub function for T. Rowe Price.

      Cheers, David Casada

      Delete
  42. David, thanks.
    Question: would a new T Rowe Price user that just had a few mutual fund transactions do OK without a special scrubber in PocketSense?

    CL

    ReplyDelete
    Replies
    1. Should be no problem if you actually reinvest dividends and capital gains...no scrubbing needed. However, if your div/cg payments are not reinvested then MS Money will ignore the misconfigured OFX transactions from TRowePrice. You will have to enter them manually.
      Cheers, David

      Delete
  43. Thanks for code upload David C. Been a bit busy of late, but won't take long to add your TRowePrice handler once I have a bit of time. I considered adding a hook for custom "scrub handlers", but never got around to it. I guess I decided that issues found by users should be added to the release code, so that everyone benefits... when possible.

    - Robert

    ReplyDelete
  44. Has anyone else noticed that the getdata script is running much slower recently? I imagine it's a Windows 10 thing, rather than Python, but just thought I'd raise the issue in case someone knew how to get the speedy operations back (< 1 second vs. the > 5 seconds now for each account download.

    ReplyDelete
    Replies
    1. Hi NxtTek,

      Win 10 64-bit Home
      Python 2.7.14
      Scripts Ver: 28-May-2018

      2 accounts at Chase
      4 accounts at Fidelity
      4 accounts at Regions Bank
      2 accounts at Discovercard

      The accounts at Regions Bank take the longest to connect but nothing even close to the range of >5 seconds. I'd say roughly 2 seconds per each account.
      The 4 accounts at Fidelity connect almost instantly.
      Chase and Discovercard connect equally at about 1 second per account.

      This behavior is not anything new though. This is consistent with how it's always been.


      -Kevin N.

      Delete
    2. Mine is running normal on Windows 10 w/ latest updates, etc.

      Delete
    3. Thanks guys. I'll just live with it. Today, it was so slow, I got this with Discover:
      ** An ERROR occurred sending POST request to ofx.discovercard.com
      Exception type : {class 'ssl.SSLError'}
      Exception val : ('_ssl.c:645: The handshake operation timed out',)

      Delete
  45. It seems that Fidelity might be discontinuing access to data via OFX soon (at least with simple username/password authentication that the PocketSense scripts currently use):

    https://www.fidelity.com/security/fidelity-access-data-security

    Basically it sounds like Fidelity doesn't like 3rd parties having access to customer account credentials and are moving towards an OAuth-type solution where customers log in with Fidelity directly, who will then provide an access token to the 3rd party.

    It is promising that they mention using standards ("solutions like Fidelity Access that use open technology standards"), but concerning that they might only allow access to established financial services providers who sign a liability agreement ("third-party firms that want to connect to Fidelity Access must adhere to strict security standards [and] assume responsibility for handling Fidelity customer data they receive").

    It seems they plan to shut down access via current methods by the end of the year: "once the rollout of Fidelity Access is complete, your Fidelity account information will no longer be accessible through that third-party financial site or application. We expect to complete the rollout in 2018."

    ReplyDelete
  46. Thanks for the alert. That would be detrimental to me if PocketSense could not access Fidelity Investments.

    CL

    ReplyDelete
  47. People's United Bank CT http://www.ofxhome.com/index.php/institution/view/1308
    I am getting an error message when using Setup to add an account at People's United.
    The error -- "An error occurred requesting accounts from the site. Please check username and password."
    I used Moneydance to check the user id and password (and used Moneydance to change from temp password to my password). So I am confident that info is correct.

    Are you aware of any items that could cause a problem?


    Regards, Mike

    ReplyDelete
    Replies
    1. Mike, regarding Peoples....

      Moneydance can access your account?

      http://pocketsense.blogspot.com/2018/05/new-version-for-testing.html#comment-form says you need a special credential. If Moneydance works for you, then you apparently did that already.

      CL

      Delete
    2. yes, I have the special credentials and verified them using Moneydance. The settings I used in sites.dat are from http://www.ofxhome.com/index.php/institution/view/1308, I guess it is possible they are incorrect but then I would have expected a different error message

      Delete
  48. You used the correct Routing #?

    ReplyDelete
    Replies
    1. which field in sites.dat takes the routing number?

      Delete
    2. I entered the routing number into bankid in sites.dat and I received the same error message - "An error occurred requesting accounts from the site. Please check username and password.".

      Here are my settings in sites.dat (based on bankid=routing num + http://www.ofxhome.com/index.php/institution/view/1308)
      SiteName : People’s United Bank
      AcctType : BASTMT #bank
      fiorg : 136
      fid : 5534
      url : https://pfm.metavante.com/ofx/OFXServlet
      bankid : 221172186

      After the error message Setup still let me continue by adding account number, then choosing account type, then getting test transactions. After requesting test transactions, Setup then gave me error message "Invalid OFX statement received" and in looking at the file in the xfr folder it said "INVALID/BLANK REQUEST"

      Delete
    3. I don't use the bank, so can't test.

      A couple thoughts:
      1. Make sure your running a recent Python 2.7 release. I use 2.7.14. Verify by running python from a command prompt, and checking the version. Multiple instances of python are supported on a single computer, but only one is the default.
      2. If that looks good, try adding: ofxVer: 103 (to the site entry)

      Delete
    4. Moneydance has a console window that logs the software's activity so I was able to use that to see the log info for the connection to Peoples United and the settings used by Moneydance to start an OFX download, so I pretty confident those setting work. I used the same setting in sites.dat but still got same error message - "An error occurred requesting accounts from the site. Please check username and password.".

      UserId is a 6 digit number, could that impact something?

      Below is the output from Moneydance where I think it is starting an OFX download from Peoples. Note, for 2 fields I changed to *some text* to change personal info. Please take a look and share if you see anything different from scripts, thanks.
      From Moneydance (removed brackets for message posting purposes)
      OFXHEADER:100
      DATA:OFXSGML
      VERSION:102
      SECURITY:NONE
      ENCODING:USASCII
      CHARSET:1252
      COMPRESSION:NONE
      OLDFILEUID:NONE
      NEWFILEUID:NONE

      OFX
      SIGNONMSGSRQV1
      SONRQ
      DTCLIENT 20180819202841.361
      USERID *6 digit number*
      USERPASS *
      GENUSERKEY N
      LANGUAGE ENG
      FI
      ORG 136
      FID 5534
      /FI
      APPID QWIN
      APPVER 2400
      CLIENTUID *very long hex number*
      /SONRQ
      /SIGNONMSGSRQV1
      SIGNUPMSGSRQV1
      ACCTINFOTRNRQ
      TRNUID 1534710521361-0
      ACCTINFORQ
      DTACCTUP 19900101
      /ACCTINFORQ
      /ACCTINFOTRNRQ
      /SIGNUPMSGSRQV1
      /OFX

      Delete
    5. Michael: I suspect that the ClientUID generated by MoneyDance has locked connections to require that specific value. PocketSense generates it's own key on first connect, as did MoneyDance, but they won't be the same, as they are unique UUIDs. Try the following:

      1. Run Setup
      2. List accounts w/ "Show connection keys" = Yes, and find the ConnectKey for the account.
      3. Using Notepad++, or similar, edit connect.key.
      The file is partially encrypted, but NOT the ConnectKey string.
      4. Replace the key above with the CLIENTUID value being used by MoneyDance
      5. Test

      - Robert

      Delete
    6. To clarify #3 above: connect.key is a file in your script folder.

      Delete
    7. I replaced the CLIENTUID value to the one being used by MoneyDance and unfortunately still no luck. I noticed pocketsense uses "-" in a few places in its CLIENTUID but MoneyDance log output did not. I tried it both ways but still didn't work. After I replaced the CLIENTUID I listed accounts with keys and saw that it was updated to match MoneyDance, so good there. Here is what happened when testing after changing CLIENTUID:
      from SetUp:
      Invalid OFX statement received
      ** Review .\xfr\PEOPLESUNITEDBANK20180820101906911109.ofx for possible clues...
      An online error occurred while testing the new account.

      Here is what file in xfr folder said:
      INVALID/BLANK REQUEST.

      Delete
    8. I missed it before, but the MoneyDance request uses OFX 102, but includes clientUID, which is odd. Did you retry w/ ofxVer: 103 in sites.dat after updating clientUID in connect.key? May not matter, but worth checking.

      The PS script does not currently include clientUID when ofxVer = 102, as it wasn't a supported field for that version. I can add the option to test, but curious if it works w/ ofxVer:103 first.

      Delete
    9. Thank you for your continued suggestions, but again unfortunately ofxVer: 103 in sites.dat did not help. Same setup message(Invalid OFX statement received), same line from file in xfr folder (INVALID/BLANK REQUEST.)

      Delete
    10. Lets try replicating the MoneyDance settings:
      1. Replace your ofx.py file with this one: ofx.py .
      2. Edit sites.dat, and use ofxVer:102B for the site entry
      3. Test.

      Delete
    11. Just an idea if other things don't work... any chance that they did not implement the account listing thing, and entering the account number the old way would work?

      CL

      Delete
    12. Still no luck with new ofx.py and ofxVer:102B in sites.dat. Same error messages. After adding the account Setup says, "An error occurred requesting accounts from the site. Please check username and password." Then Setup allows user to continue on and enter account number and account type and then test. Test returns the error, then I tried changing clientUID to match Moneydance and test again but same error message (Invalid OFX statement received), same line from file in xfr folder (INVALID/BLANK REQUEST.)

      I have been successfully using the PS scripts for years with several other accounts and periodically I try to tackle this last bank account, but without success. Thank you for all your suggestions.


      After sending initial OFX request, Moneydance then logs:

      connecting to: https://pfm.metavante.com/ofx/OFXServlet with method: POST
      Connecting to pfm.metavante.com
      acceptable protocols: TLSv1 TLSv1.1 TLSv1.2
      Saving certificate
      Then some cookie and header stuff
      Then:
      Reading message from https://pfm.metavante.com/ofx/OFXServlet
      >>>>>>>>

      OFXHEADER:100
      DATA:OFXSGML
      VERSION:102
      SECURITY:NONE
      ENCODING:USASCII
      CHARSET:1252
      COMPRESSION:NONE
      OLDFILEUID:NONE
      NEWFILEUID:NONE
      … with account info, balance, etc

      Delete
    13. Grab ofx.zip, reset the ofxVer to 102 or 103, and test. I added some output, to show response STATUS messages, if they exist. The script makes multiple attempts, and the INVALID/BLANK result is just the last one.

      Delete
    14. Error remains, but Setup had the following message:

      Response STATUS:
      ---------------
      Try 1: Status = 15511 SEVERITY ERROR MESSAGE There was a problem with your online session. If the problem continues, contact your financial institution to resolve it. A new security feature requires you to perform an update that only customer support can help you with.

      An error occurred requesting accounts from the site. Please check username and password.

      Delete
    15. Error remain but Setup message status code changed

      Response STATUS:
      ---------------
      Try 1: Status = CODE 15510 SEVERITY ERROR MESSAGE There was a problem with your online session. If the problem continues, contact your financial institution to resolve it. Or, perform a one-step update to receive the latest version of your software.

      An error occurred requesting accounts from the site. Please check username and password.

      Delete
    16. To clarify: you tested with both ofxVer=102 and 103?

      Delete
    17. yes, I checked again and now realized--

      using ofxVer=102 Setup gets 15510 message:

      Try 1: Status = CODE 15510 SEVERITY ERROR MESSAGE There was a problem with your online session. If the problem continues, contact your financial institution to resolve it. Or, perform a one-step update to receive the latest version of your software.

      using ofxVer=103 Setup gets 15511 message:
      Try 1: Status = 15511 SEVERITY ERROR MESSAGE There was a problem with your online session. If the problem continues, contact your financial institution to resolve it. A new security feature requires you to perform an update that only customer support can help you with.

      Delete
    18. I'm not quite ready to give up, as this may apply to other sites, but there's not much more I can do w/ testing "blind". In the Moneydance reply above, you put "Then some cookie and header stuff". That info is important, as there may be a need to reply w/ session tokens before requesting info. If you can provide that part, it may help.

      Delete
    19. You are a true programmer.
      From Moneydance (removed brackets for message posting purposes)
      OFXHEADER:100
      DATA:OFXSGML
      VERSION:102
      SECURITY:NONE
      ENCODING:USASCII
      CHARSET:1252
      COMPRESSION:NONE
      OLDFILEUID:NONE
      NEWFILEUID:NONE

      OFX
      SIGNONMSGSRQV1
      SONRQ
      DTCLIENT 20180819202841.361
      USERID *6 digit number*
      USERPASS *
      GENUSERKEY N
      LANGUAGE ENG
      FI
      ORG 136
      FID 5534
      /FI
      APPID QWIN
      APPVER 2400
      CLIENTUID *very long hex number*
      /SONRQ
      /SIGNONMSGSRQV1
      SIGNUPMSGSRQV1
      ACCTINFOTRNRQ
      TRNUID 1534710521361-0
      ACCTINFORQ
      DTACCTUP 19900101
      /ACCTINFORQ
      /ACCTINFOTRNRQ
      /SIGNUPMSGSRQV1
      /OFX
      <<<<77<<<<
      connecting to: https://pfm.metavante.com/ofx/OFXServlet with method: POST
      Connecting to pfm.metavante.com
      acceptable protocols: TLSv1 TLSv1.1 TLSv1.2
      Saving certificate: 0
      subject: CN=pfm.metavante.com, OU=Enterprise SSL Pro, OU=Hosted by Fidelity National Information Services, OU=Corporate Account, O="Fidelity National Information Services, Inc.", STREET=601 Riverside Ave, L=Jacksonville, ST=Florida, OID.2.5.4.17=32204, C=US
      issuer: CN=COMODO RSA Organization Validation Secure Server CA, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB
      not after: Tue Apr 14 19:59:59 EDT 2020
      not before: Sat Apr 14 20:00:00 EDT 2018
      filename: unknown_cert_0.der
      Saving file to C:\Program Files\Moneydance\unknown_cert_0.der
      Saving certificate: 1
      subject: CN=COMODO RSA Organization Validation Secure Server CA, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB
      issuer: CN=COMODO RSA Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB
      not after: Sun Feb 11 18:59:59 EST 2029
      not before: Tue Feb 11 19:00:00 EST 2014
      filename: unknown_cert_1.der
      Saving file to C:\Program Files\Moneydance\unknown_cert_1.der
      Connecting with https headers:
      POST /ofx/OFXServlet HTTP/1.1
      Content-Type: application/x-ofx
      Host: pfm.metavante.com
      Content-Length: 564
      Connection: close
      User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063
      Accept: application/x-ofx, */*
      Accept-Language: en
      Cache-Control: no-cache

      ---end headers
      HTTP/1.1 200 OK
      Date: Sun, 19 Aug 2018 20:28:43 GMT
      Set-Cookie: JSESSIONID=8179155975331090537; HttpOnly
      Content-Length: 927
      Expires: Thu, 01 Dec 1994 16:00:00 GMT
      Cache-Control: no-cache="set-cookie, set-cookie2"
      Connection: close
      Content-Type: application/x-ofx
      Content-Language: en

      Unrecognized cookie parameter: HttpOnly ->
      HTTP response headers:
      date: [Sun, 19 Aug 2018 20:28:43 GMT]
      set-cookie: [JSESSIONID=8179155975331090537; HttpOnly]
      content-length: [927]
      expires: [Thu, 01 Dec 1994 16:00:00 GMT]
      connection: [close]
      content-type: [application/x-ofx]
      cache-control: [no-cache="set-cookie, set-cookie2"]
      content-language: [en]
      Reading message from https://pfm.metavante.com/ofx/OFXServlet
      >>>>>>>>

      OFXHEADER:100
      DATA:OFXSGML
      VERSION:102
      SECURITY:NONE
      ENCODING:USASCII
      CHARSET:1252
      COMPRESSION:NONE
      OLDFILEUID:NONE
      NEWFILEUID:NONE
      … with account info, balance, etc

      Delete
    20. I don't see anything special about the request/response, except extra fields and slightly different settings in the request. I modified the request to match almost exactly to what you have above. Grab the ofx.zip file again (above link), and test. This (test) copy should not be used for other sites... as it would certainly fail w/ Discover and probably others.

      Delete
    21. still errors, and in the big picture no big deal, as manual download from bank website will go to msmoney.
      In an effort to look around, can you point me to the script location that handles the 2 ssl certificates provided by the bank?

      Delete
    22. The scripts don't explicitly manage certificates, but instead use the python httplib and urllib2 libraries. The scripts currently use the default settings, which on windows means that it uses the windows certificate authority. As the scripts are written, certificates must be valid & current. The errors above didn't look like typical ssl errors, so I didn't pull that thread.

      Delete
    23. I have great news and a little bad news (for me anyway). The great news is I got a download from the bank to work, yea! The bad news is I didn't take myself serious and just kept adding print commands to the OFX script file to find differences from what I saw from Moneydance and then just changed stuff to try without keeping track.

      My best guess (that I am going to try and replicate) -- I noticed 2 request differences from Moneydance, in the header PS put a NewFileUID while Moneydance put "NONE". The second is PS included optional field CLTCookie while Moneydance excluded (so I changed newfileuid to none and commented out cltcookie). Lastly I think I do have to match the ClientUID to that setup by Moneydance in Connect.key (which I changed to match Moneydance)

      I am going to start fresh with the ofx.zip files you provided August 21, 2018 at 11:13 AM and then make those changes and try again.

      I will let you know how it goes.

      Delete
    24. YEA, making those 2 code changes (and having ClientUID match Moneydance) results in Setup saying:
      PEOPLES UNITED BANK : *my acct num* : Getting records since: 20180723
      +Scrubber: Null time values updated.
      Download completed successfully

      Send the results to Money (y/n)?

      Delete
    25. I went back to the script files of May 28, 2018 and made those 2 changes in the OFX script (newfileuid=none, exclude cltcookie). In Sites.dat I excluded the 2 fields Moneydance used for appid and appver and had ofxVer=103. Connect.key has the Moneydance ClientUID. In this version the Peoples account was not added yet, so I added and all worked well.

      Question now is, will those 2 changes impact accounts at other institutions?

      Delete
    26. That's great news. Were both changes required?

      Delete
    27. good call, the problem was only tied to the cltcookie field (newfileuid did not have an impact)

      Delete
    28. I did a little checking, and see that CLTCOOKIE is a hold-over from Money-2004, and isn't used by Quicken. I'm going to set aside a little time soon to add a new scrub routine for T. Rowe Price, and will remove CLTCOOKIE from requests. In the unlikely event it breaks another site, I'll add it as an optional field.

      Thanks Micheal!

      Delete
  49. I made a bad error when opening the Sites.dat file with notepad. I changed the default program for .dat files to Notepad. Not sure how I can reverse this. The result is that Setup will not fire up. Thanks for help.

    ReplyDelete
    Replies
    1. Several regedit options available to fix this. https://answers.microsoft.com/en-us/windows/forum/windows_10-other_settings/how-to-remove-a-default-file-association-app-from/3e498ed3-016d-4acd-847f-09c2470b711c

      Delete
    2. Setup is setup.py. If you are fixing file association, do it for *.py.

      For whatever reason, python.exe or python are not in my command path. I created a batch file to launch python.exe. You could make a batch file to do the commands.

      In a pinch, you could launch setup like this (using whatever path your python.exe is in:

      c:\python27\python.exe setup.py



      CL

      Delete
  50. Chase Credit card is posing problems at this time. I have already installed 2.7.14 and the error still occurs:
    JPMORGAN CHASE AND CO. : XXXXXXXXXXXXXXXXXXXX (CC number) : Getting records since: 20180802
    ** An ERROR occurred sending POST request to ofx.chase.com
    Exception type :
    There is no message in the Chase site under Secure messages. Have enabled QB1/2 downloads on the site.
    This has been a problem in just the last 3 weeks.

    ReplyDelete
    Replies
    1. Hi Anonymous,

      I can not reproduce this behavior with Chase Credit Card.
      I tested using Setup.py this morning (10:15 AM EST) and the scripts connected as expected.
      Did you set ofxVer:103 in site.dat?

      -Kevin N.

      Delete
    2. Thx Kevin...Yes, I did set it to ofxVer:103.
      This is the actual error I am getting (sorry for the truncated post last night):
      JPMORGAN CHASE AND CO. : <> : Getting records since: 20180718
      ** An ERROR occurred sending POST request to ofx.chase.com
      Exception type :
      Exception val : [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)
      An online error occurred while testing the new account.

      Delete
    3. Kevin - I also noticed that the Validation at the bottom of the page at http://www.ofxhome.com/index.php/institution/view/636 shows "Fail: Did not return valid OFX! Last validated on June 30th, 2018". Not sure what this means.
      Thanks for answering all these questions (and for the outstanding work here - love MS Money!).

      Delete
    4. First, make sure Python 2.7.14 is the *active* install, by running python at a command prompt. I've seen cases where multiple versions were installed, but an earlier copy was the "default" If it looks ok, try completely uninstalling and reinstalling python. The error above has been reported before, but it "self corrected" when the python install got refreshed. Could have just been timing, but worth trying.

      Delete
    5. Thanks Robert - will try it. Can you help me understand how I run this from Command prompt? I am not as computer literate as I should be on this front.
      Also - does the display at the bottom ofxhome page (see my earlier comment) have anything to do with this - or does that also get fixed with the uninstall and reinstall of 2.7.14?

      Delete
    6. Start -> run -> cmd
      At the prompt, type: python

      As for ofxHome, I'm not sure, as I don't really use it. I suggest posting your sites.dat parameters here, and see if another user can help. I don't use Chase myself. There's a number of different entries for Chase in the Moneydance dict @ http://moneydance.com/synch/moneydance/fi2004.dict

      Delete
    7. These are the site parameters I am using:

      SiteName : JPMorgan Chase and Co.
      AcctType : CCSTMT
      fiorg : B1
      fid : 10898
      url : https://ofx.chase.com
      bankid :
      brokerid :
      ofxVer : 103
      appid : QWIN
      appver : 2400
      mininterval:
      timeOffset :


      I uninstalled Python, rebooted and re-installed Python 2.7.14 and still facing the same issue.

      Delete
    8. HI Anonymous,

      My entry for Chase Credit Card in sites.dat is the same as yours except for appid and appver. Both of those are blank in mine.

      -Kevin N.

      Delete
    9. You mentioned "new in the last 3 weeks". Anything else "new in the last 3 weeks"?

      Delete
    10. Well...the good news is that Chase works now. I made another attempt with PocketSense earlier today and it displayed a different error directing me to the Chase site...went there and lo and behold! saw the verify ID message under Secure Messages and it all worked fine. I think the issue may have been that some update on their prevented OFX access over the weekend and they set it right on Sunday night.
      What was different in the past 3 weeks is that I had to do a factory reset of my laptop (thank you, HP, for a less than a year old laptop with minimal use). Once done, I re-installed everything, including PocketSense, Python etc.

      Delete
    11. Hi Anonymous,

      The factory reset explains it.

      The way I understand it is by doing so you inadvertently changed the UUID used to connect to Chase.

      Hence, the lock-out and the message to verify your identity.

      -Kevin N.

      Delete