Pergunta

Estou tentando usar o Java HealthVault API Para fazer uma chamada para o método GetThings no modo "offline" (ou seja, o usuário não precisa fazer o login) para recuperar itens do tipo "arquivo" de todos os tipos. Pelo que entendi, tudo o que você precisa para fazer uma solicitação offline é o ID da PESSÃO E o ID registrado da conta do usuário. No entanto, mesmo que eu esteja adicionando -os à solicitação, a chamada do método não funciona. Ele retorna o código de erro "67" na resposta, que, de acordo com uma variável estática na API, significa "Pessoa inválida ou ID do grupo".

Eu verifiquei duas vezes o ID da pessoa e o registro de IDs e eles estão realmente corretos. Fazer a mesma solicitação no modo "Online" (ou seja, ao incluir um usuário da autocomemperação) funciona perfeitamente bem. Meu aplicativo está configurado para permitir o acesso offline a todos os tipos de itens de "arquivo", para que não possa ser um problema de acesso.

Substituí o ID da pessoa real e o registro de IDs por outros falsos nas amostras de código abaixo por razões de segurança:

Aqui está meu código Java:

StringBuilder requestXml = new StringBuilder();
requestXml.append("<info><group>");
requestXml.append("<filter><type-id>bd0403c5-4ae2-4b0e-a8db-1888678e4528</type-id></filter>");
requestXml.append("<format><section>core</section><section>otherdata</section><xml/></format>");
requestXml.append("</group></info>");

Request request = new Request();
request.setMethodName("GetThings");
request.setOfflineUserId("e2f925e7-2748-4d88-bz48-32036dc10020");
request.setRecordId("73ab2792-5481-43eb-837c-67d1e3337300");
request.setInfo(requestXml.toString());

Connection connection = ConnectionFactory.getConnection();
HVAccessor accessor = new HVAccessor();
accessor.send(request, connection);

A solicitação XML gera:

<wc-request:request xmlns:wc-request="urn:com.microsoft.wc.request">
    <auth>
        <hmac-data algName="HMACSHA1">5WdiBnTvxsNbVHg134ggIETlJNE=</hmac-data>
    </auth>
    <header>
        <method>GetThings</method>
        <method-version>1</method-version>
        <record-id>73ab2792-5481-43eb-837c-67d1e3337300</record-id>
        <auth-session>
            <auth-token>ASAAAJQ1R50J8HpMshAjeHkjh/habVgM17BjSBuA/GmbJPV9A9d63mramakSZxf+ZHZh+7xWllTWGhAijBvxhNxauzBLci1IWWh+JDbGQZabnWbG7YH28ZP+FQuRPNP4T8O1NTNCFNETao0ly+UuPjWEZWCV5cCPX7GjaEJ4BMAFv4vAOEwIOe63VWntfzH9r3Rz0VnHAhb400iqs1XxlJrRbgXdNRdg</auth-token>
            <offline-person-info>
                <offline-person-id>e2f925e7-2748-4d88-bz48-32036dc10020</offline-person-id>
            </offline-person-info>
        </auth-session>
        <language>en</language>
        <country>US</country>
        <msg-time>2009-10-21T12:37:51.706-04:00</msg-time>
        <msg-ttl>180000</msg-ttl>
        <version>0.0.0.1</version>
        <info-hash>
            <hash-data algName="SHA1">oAZVXLGAUMfuVPrqjqb98yCb4/c=</hash-data>
        </info-hash>
    </header>
    <info>
        <group>
            <filter>
                <type-id>bd0403c5-4ae2-4b0e-a8db-1888678e4528</type-id>
            </filter>
            <format>
                <section>core</section>
                <section>otherdata</section>
                <xml />
            </format>
        </group>
    </info>
</wc-request:request>

A resposta XML que recebo de volta:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <status>
        <code>67</code>
        <error>
            <message>Exception of type
                'Microsoft.Health.Platform.WildcatStatusException' was thrown.</message>
        </error>
    </status>
</response>

Muito obrigado pela sua ajuda. :)

Foi útil?

Solução 2

Acontece que o problema era que minha pessoa e registram IDs realmente nós estamos incorreta. Eu estava usando os que recebi enquanto estava conectado ao amostra aplicação, em oposição ao meu ter inscrição. Eu não sabia que eles mudaram entre aplicativos. Depois de fazer uma chamada para GetPersonInfo a partir do meu próprio aplicativo, consegui obter a pessoa correta e registrar IDs.

Outras dicas

Algum outro cara resolveu o erro fazendo. Você já tentou isso?

I got the error cleared up. I re-imported the certificate (found in the cert
folder) through the Healthvault Application Manager, cleared up the offline.txt
file and re-ran the application.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top