我正在测量生命体征设备。制造商是iHealth。这些连接智能手机,其中安装了一个应用程序,当您使用您的帐户登录时,它会将测量结果发送到他们的服务器。我必须连接到这个服务器并从许多帐户中提取数据,但此刻我将满足只提取我的。为此,iHealth提供了一个沙箱示例,您可以通过以下网址下载:http://sandbox.ihealthlabs.com/contentfiles/files/SandboxAPISample.zip。
在此示例中,所有需要的变量(client_id,client_secret,redirect_url等)都在ConnectToiHealthlabs.cs类中设置。
启动项目时,会加载页面GetStarted.aspx,只显示一个按钮。通过单击按钮,可以从ConnectToiHealthlabs.cs类调用follow方法:
public void GetCode()
{
string url = url_authorization
+ "?client_id=" + client_id
+ "&response_type=" + response_type_code
+ "&redirect_uri=" + redirect_uri
+ "&APIName=" + APIName_BP + " " + APIName_Weight;
HttpContext.Current.Response.Redirect(url);
}
重定向的网址是
http://sandboxapi.ihealthlabs.com/api/OAuthv2/userauthorization.ashx?client_id=e4dce2f7027044e0a6ce82ef44d27e23&response_type=code&redirect_uri=http://localhost:9201/TestPage.aspx&APIName=OpenApiBP OpenApiWeight
所以你将到达页面
http://sandboxapi.ihealthlabs.com/api/OAuthv2/oauthlogin.aspx?redirect_uri=%2fapi%2fOAuthv2%2fuserauthorization.ashx%3fclient_id%3de4dce2f7027044e0a6ce82ef44d27e23%26response_type%3dcode%26redirect_uri%3dhttp%3a%2f%2flocalhost%3a9201%2fTestPage.aspx%26APIName%3dOpenApiBP%2520OpenApiWeight
现在您可以使用沙箱凭据进行身份验证:
用户名:sandboxuser@ihealthlabs.com
密码:111111
如果凭据是正确的,您将被重定向到调用此方法的TestPage.aspx:
public bool GetAccessToken(string code, string client_para, HttpContext httpContext)
{
string url = url_authorization
+ "?client_id=" + client_id
+ "&client_secret=" + client_secret
+ "&client_para=" + client_para
+ "&code=" + code
+ "&grant_type=" + grant_type_authorization_code
+ "&redirect_uri=" + redirect_uri;
string ResultString = this.HttpGet(url);
if (ResultString.StartsWith("{\"Error\":"))
{
this.Error = JsonDeserializ<ApiErrorEntity>(ResultString);
return false;
}
else
{
AccessTokenEntity accessToken = this.JsonDeserializ<AccessTokenEntity>(ResultString);
httpContext.Session["token"] = accessToken;
return true;
}
}
结果网址是
http://sandboxapi.ihealthlabs.com/api/OAuthv2/userauthorization.ashx?client_id=e4dce2f7027044e0a6ce82ef44d27e23&client_secret=bb6a0326db55468f8f474ad5fd79aa0a&client_para=123&code=a1yBBCZu80DXlhnSmyYEKIY6cQ73cVj7O9i1hv7rH68EQIgIlY0*pODnNbD2gyEMu6UnHvksB5Ndf42-I8i4xPHb4jTqzpue0S9PVLTCjw2bUMOZCyiBoCBjcllUzHzo&grant_type=authorization_code&redirect_uri=http://localhost:9201/TestPage.aspx
因此,如果一切正确,您可以看到一个下载BP数据的按钮(网址:
http://sandboxapi.ihealthlabs.com/api/OpenApi/downloadbpdata.ashx?access_token=a1yBBCZu80DXlhnSmyYEKIY6cQ73cVj7O9i1hv7rH6-zMHK6iEu9OCg4MCErg-lOvm0WKcGwfZfVWanKB3-s2BLUZniYfwn99tsdWTRhlvBU8ZFTcIk-9qPeMtN*zVTNosPp4RsCiHF2D-o-DvpdwjS9qQhcwMEKgunaLSK1Qu8&client_id=e4dce2f7027044e0a6ce82ef44d27e23&client_secret=bb6a0326db55468f8f474ad5fd79aa0a&redirect_uri=http://localhost:9201/TestPage.aspx&sc=082a65ac25db4262b795f635c974de47&sv=bd82a25dcf18446b90f3219ef7d0b441
),
下载重量数据(网址:
http://sandboxapi.ihealthlabs.com/api/OpenApi/downloadweightdata.ashx?access_token=a1yBBCZu80DXlhnSmyYEKIY6cQ73cVj7O9i1hv7rH6-zMHK6iEu9OCg4MCErg-lOvm0WKcGwfZfVWanKB3-s2BKc5tIrfqZpz5gC*IAhOnIr1J1PhT0M0*IPDtIZ6SLuTZtNC5Hn0C4u0yDBo9zunmoDwkoz2wKmAqE4aXUJFE4&client_id=e4dce2f7027044e0a6ce82ef44d27e23&client_secret=bb6a0326db55468f8f474ad5fd79aa0a&redirect_uri=http://localhost:9201/TestPage.aspx&sc=082a65ac25db4262b795f635c974de47&sv=add22354420244ba9e0f3a5a6b402096
)
并刷新令牌(网址:
http://sandboxapi.ihealthlabs.com/api/OAuthv2/userauthorization.ashx?client_id=e4dce2f7027044e0a6ce82ef44d27e23&client_secret=bb6a0326db55468f8f474ad5fd79aa0a&client_para=&refresh_token=a1yBBCZu80DXlhnSmyYEKIY6cQ73cVj7O9i1hv7rH6-zMHK6iEu9OCg4MCErg-lOvm0WKcGwfZfVWanKB3-s2Pl0dL9j3ijv6zPwlqNtRkO2lRuNbVszrIeKHqx2ZToJCLvFHNHmMJWni*QMiIgWRl-B3VIHGdpGFPpD5iD0p9Y&response_type=refresh_token&redirect_uri=http://localhost:9201/TestPage.aspx
)。
在此示例中,它将转发器与返回DownloadBPData和DownloadWeightData方法的列表数据绑定,以显示页面中的值。
我的目标是在没有打开弹出窗口的情况下到达这两个列表,并且无需手动身份验证来安排更新速度。
全部在日志中,如页面:
24/07/2013 12:00 - 找到用户ABC的新数据
24/07/2013 11:30 - 为用户XYZ找到新数据
24/07/2013 11:00 - 等......
但我真的不知道从哪里开始。
我所拥有的唯一文档是以下文件:http://developer.ihealthlabs.com/contentfiles/files/Open%20API%20Protocol.zip
沙盒项目中的url与我必须连接的服务器不同 我发现了很多OAuth2库,但所有的例子都是针对Facebook,Twitter等的。
谢谢。