It's not allowed to manually set the order state to 'complete' and you should be getting this exception when you call setState
on the order with the 'complete' state:
The Order State "complete" must not be set manually.
The reason for this is simple: The 'complete' state (and status, since it's the only state with a status of 'complete') is intended to indicate that an order has been completely filled. I.e. it has been placed, invoiced and shipped to the customer.
Once the order has been invoiced and shipped, Magento will set this state on the order automatically.
If your payment system "doesn't allow" the 'complete' status, then I would not trust it, especially with it being ionCube encoded. If, however, it's because it's handling the invoicing outside of Magento, then you'll need to manually generate an "Offline" invoice for the order so that Magento will recognize that it has been paid for.
Don't try to short-change yourself by working around the problem of the orders not hitting the completed state like they normally should. Instead, fix the actual problem by making sure that orders are both invoiced and shipped in Magento so that they will be marked as complete by the system.
Best Answer
Alter this query to include the order ID or IDs and the status to what you would like to set:
https://gist.github.com/reidblomquist/aa9df1581a7ee8c82910
WARNING: Be sure to create a complete backup of your DB before directly querying!