Withings API:回调 URL 未知或无效
Withings API: The callback URL is either unknown or invalid
我正在尝试在 withings API 中设置通知(使用 withings-simplificator gem)。无论我输入什么 URL 或者我是否对其进行编码,我总是会收到此错误:
irb(main):013:0> user.subscribe_notification('http://foo.bar.com', 'test subscription')
Withings::ApiError: The callback URL 'http://foo.bar.com' is either unknown or invalid - Status code: 293
from /app/vendor/bundle/ruby/2.2.0/gems/simplificator-withings-0.7.0/lib/withings/connection.rb:80:in `verify_response!'
from /app/vendor/bundle/ruby/2.2.0/gems/simplificator-withings-0.7.0/lib/withings/connection.rb:22:in `get_request'
from /app/vendor/bundle/ruby/2.2.0/gems/simplificator-withings-0.7.0/lib/withings/connection.rb:27:in `get_request'
from /app/vendor/bundle/ruby/2.2.0/gems/simplificator-withings-0.7.0/lib/withings/user.rb:26:in `subscribe_notification'
from (irb):13
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/console.rb:110:in `start'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/console.rb:9:in `start'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:68:in `console'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:8:in `require'
from bin/rails:8:in `<main>'
有没有人遇到过这个问题并有解决办法?
更新 1:
所以我尝试不使用 Withings 简化器 gem:
API_KEY = '123'
API_SECRET = '456'
USER_ID = '789'
USER_KEY = 'abc'
USER_SECRET = 'def'
CONFIGURATION = { site: 'https://oauth.withings.com',
request_token_path: '/account/request_token',
access_token_path: '/account/access_token',
authorize_path: '/account/authorize',
http_method: :get,
scheme: :query_string
}
@consumer = OAuth::Consumer.new API_KEY, API_SECRET, CONFIGURATION
@access_token = OAuth::AccessToken.new @consumer, USER_KEY, USER_SECRET
url = ERB::Util.url_encode("www.foo.bar/trigger")
comment = ERB::Util.url_encode("Trigger")
response = @access_token.get("https://wbsapi.withings.net/notify?action=subscribe&userid=#{USER_ID}&callbackurl=#{url}&comment=#{comment}")
JSON.parse(response.body)
同样的错误:
irb(main):051:0> JSON.parse(response.body)
=> {"status"=>293}
我做错了什么?
您必须在设置过程中确认
- 你的"trigger url"存在
- 它以 "ok" 响应 POST
- 速度很快……我不知道到底有多快,但我认为响应时间应该小于 1 秒
有了这样的环境,我上面的代码就可以工作了。
您的通知端点将执行两项操作:
- 它将响应测试请求响应(当您注册时它将检查您的 URL 是否存在)。您将收到带有空主体对象的电话。如果不是have
userid
,则不是数据通知,所以必须响应status as 200,body为空;
- 注册成功后您将收到数据提醒。这次你可以通过你的业务逻辑来处理。
我正在尝试在 withings API 中设置通知(使用 withings-simplificator gem)。无论我输入什么 URL 或者我是否对其进行编码,我总是会收到此错误:
irb(main):013:0> user.subscribe_notification('http://foo.bar.com', 'test subscription')
Withings::ApiError: The callback URL 'http://foo.bar.com' is either unknown or invalid - Status code: 293
from /app/vendor/bundle/ruby/2.2.0/gems/simplificator-withings-0.7.0/lib/withings/connection.rb:80:in `verify_response!'
from /app/vendor/bundle/ruby/2.2.0/gems/simplificator-withings-0.7.0/lib/withings/connection.rb:22:in `get_request'
from /app/vendor/bundle/ruby/2.2.0/gems/simplificator-withings-0.7.0/lib/withings/connection.rb:27:in `get_request'
from /app/vendor/bundle/ruby/2.2.0/gems/simplificator-withings-0.7.0/lib/withings/user.rb:26:in `subscribe_notification'
from (irb):13
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/console.rb:110:in `start'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/console.rb:9:in `start'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:68:in `console'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.4/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:8:in `require'
from bin/rails:8:in `<main>'
有没有人遇到过这个问题并有解决办法?
更新 1:
所以我尝试不使用 Withings 简化器 gem:
API_KEY = '123'
API_SECRET = '456'
USER_ID = '789'
USER_KEY = 'abc'
USER_SECRET = 'def'
CONFIGURATION = { site: 'https://oauth.withings.com',
request_token_path: '/account/request_token',
access_token_path: '/account/access_token',
authorize_path: '/account/authorize',
http_method: :get,
scheme: :query_string
}
@consumer = OAuth::Consumer.new API_KEY, API_SECRET, CONFIGURATION
@access_token = OAuth::AccessToken.new @consumer, USER_KEY, USER_SECRET
url = ERB::Util.url_encode("www.foo.bar/trigger")
comment = ERB::Util.url_encode("Trigger")
response = @access_token.get("https://wbsapi.withings.net/notify?action=subscribe&userid=#{USER_ID}&callbackurl=#{url}&comment=#{comment}")
JSON.parse(response.body)
同样的错误:
irb(main):051:0> JSON.parse(response.body)
=> {"status"=>293}
我做错了什么?
您必须在设置过程中确认
- 你的"trigger url"存在
- 它以 "ok" 响应 POST
- 速度很快……我不知道到底有多快,但我认为响应时间应该小于 1 秒
有了这样的环境,我上面的代码就可以工作了。
您的通知端点将执行两项操作:
- 它将响应测试请求响应(当您注册时它将检查您的 URL 是否存在)。您将收到带有空主体对象的电话。如果不是have
userid
,则不是数据通知,所以必须响应status as 200,body为空; - 注册成功后您将收到数据提醒。这次你可以通过你的业务逻辑来处理。