Я протестировал встроенные покупки в приложении Windows Phone 8, используя библиотеку MockIAP, и все было в порядке. Также я протестировал код проверки подписи квитанции (на основе xmlseclibs Роберта Ричардса) на своем сервере с тестовым манифестом Microsoft из здесь и проходит проверку. Я слышал, что в бета-режиме встроенные приложения бесплатны и не дают вам подписанных квитанций, но когда я создал бета-приложение и попытался совершить в нем покупку, я получил подписанную квитанцию и у нее была версия 2.0 (образец msft имеет версию 1.0)!
Я проследил проверку и обнаружил, что обе квитанции (образец msft и тот, который у меня есть) имеют один и тот же метод CanonicalizationMethod, SignatureMethod, Transforms и DigestMethod, и с образцом msft все в порядке, но значение дайджеста (Signature/SignedInfo/Reference/ DigestValue) в моем чеке было неправильно.
Также я обнаружил, что если я прокомментирую только проверку дайджеста, проверка подписи пройдет успешно. Так что корень зла в этом неправильном значении дайджеста.
Может быть, это сделано намеренно? Я имею в виду, может быть, я не должен обращать внимание на проверку дайджеста при работе с бета-приложением? Или MSFT использует какой-то недокументированный метод дайджеста?
обновление: попытка проверить возвращенную квитанцию с помощью MSFT пример проверки, проверка не удалась. Есть ли у кого-нибудь опыт проверки квитанции о покупке в приложении WP8? Похоже, что после того, как они изменили формат на версию 2.0, у разработчиков приложений должны возникнуть проблемы с проверкой, так как теперь квитанция не проходит проверку.
Я удалил все нежелательные символы, и мой код работает как с образцами квитанций WP8, так и с Windows Store, но для проверки этих новых квитанций WP8 необходимо пропустить проверку дайджеста. Я попробую это на производстве.