`credit_card_or_token` here cannot be a hash; rather it needs to be a string. Further, the `authorization` set on the ActiveMerchant Response returned by the `store` call should be the string that is passed in here in order to charge against the previously stored card.

A bit more background: it's assumed throughout ActiveMerchant (and more importantly, by those using the library) that any reference that might be needed in the future (such as a token for a stored card, or an identification used to capture an authorization) is a string and can be stored as a string, which greatly simplifies the life of those who use ActiveMerchant.

In this case it looks like you'll need to join the card_id and card_key fields into a string that can be split back apart here. For examples of other places in the codebase that do this, search for `authorization_from`.