topsdk 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -8,35 +8,38 @@ The plugin enable easy integration with the [Taobao Open Platform]: http://open.
8
8
 
9
9
  Create a config/taobao.yml
10
10
 
11
+ default: &default
12
+ api_key: 12012322
13
+ secret_key: sandbox2a5bea25d1bc06ccd23123121daf
14
+ auth_url: https://oauth.tbsandbox.com/authorize
15
+ token_url: https://oauth.tbsandbox.com/token
16
+ rest_url: http://gw.api.tbsandbox.com/router/rest
17
+ callback_url: http://0.0.0.0:3000/auth/callback
18
+
11
19
  development:
12
- api_key: your_api_key
13
- secret_key: your_secret_key
14
- format: json
15
- host: sandbox
20
+ <<: *default
16
21
 
17
22
  test:
18
- api_key:
19
- secret_key:
20
- format: xml
21
- host: sandbox
23
+ <<: *default
22
24
 
23
25
  production:
24
- api_key:
25
- secret_key:
26
- format: json
27
- host: sandbox
28
-
26
+ secret_key: 42ab2d12a5bea25d1bc06ccd23123121daf
27
+ auth_url: https://oauth.taobao.com/authorize
28
+ token_url: https://oauth.taobao.com/token
29
+ rest_url: http://gw.api.taobao.com/router/rest
30
+ callback_url: http://yourdomain.com/auth/callback
31
+ <<: *default
29
32
 
30
33
  == Usage
31
34
 
35
+ Topsdk.authorize_url
36
+ # => "https://oauth.tbsandbox.com/authorize?response_type=code&client_id=12012322&redirect_uri=http://0.0.0.0:3000/auth/callback"
37
+
38
+ session = Topsdk.token('lv5W8xgdDc6pf8DzEWIe2Zgt2928')
32
39
  params = {
33
- :session => 'your_session',
34
- :method =>'taobao.trades.sold.get',
35
- :fields => 'tid,seller_nick,status,payment,trade_memo,seller_memo',
36
- :buyer_nick => 'zhangsan',
37
- :start_created => '2010-09-27 00:00:00',
38
- :end_date => '2011-09-27 23:00:00',
39
- :page_size => 2
40
+ :session => session,
41
+ :method =>'taobao.user.get',
42
+ :fields => 'uid,nick,email',
40
43
  }
41
44
  Topsdk.get_with(params)
42
- # => {"trades"=>{"trade"=>[{"payment"=>"212.00", "seller_nick"=>"zhangsan", "status"=>"WAIT_BUYER_PAY", "tid"=>112344931158}, {"payment"=>"11.00", "seller_nick"=>"zhangsan", "status"=>"WAIT_SELLER_SEND_GOODS", "tid"=>112474782358}]}, "total_results"=>117}
45
+ # => {"user"=>{"email"=>"null@tbminisandbox.com", "nick"=>"nill", "uid"=>"00000000000"}}
data/init.rb ADDED
@@ -0,0 +1,2 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'topsdk'
@@ -0,0 +1,21 @@
1
+ default: &default
2
+ api_key: 12012322
3
+ secret_key: sandbox2a5bea25d1bc06ccd23123121daf
4
+ auth_url: https://oauth.tbsandbox.com/authorize
5
+ token_url: https://oauth.tbsandbox.com/token
6
+ rest_url: http://gw.api.tbsandbox.com/router/rest
7
+ callback_url: http://0.0.0.0:3000/auth/callback
8
+
9
+ development:
10
+ <<: *default
11
+
12
+ test:
13
+ <<: *default
14
+
15
+ production:
16
+ secret_key: 42ab2d12a5bea25d1bc06ccd23123121daf
17
+ auth_url: https://oauth.taobao.com/authorize
18
+ token_url: https://oauth.taobao.com/token
19
+ rest_url: http://gw.api.taobao.com/router/rest
20
+ callback_url: http://yourdomain.com/auth/callback
21
+ <<: *default
data/lib/topsdk/client.rb CHANGED
@@ -1,51 +1,63 @@
1
1
  # -*- encoding: utf-8 -*-
2
- begin
3
- require 'nestful'
4
- rescue LoadError
5
- puts "The Nestful gem is not available.\nIf you ran this command from a git checkout " \
6
- "of Rails, please make sure nestful is installed. \n "
7
- exit
8
- end
2
+ require 'nestful'
9
3
  require 'digest/md5'
4
+ require 'pp'
10
5
 
11
6
  module Topsdk
12
7
  class Client
13
- DEBUG = false
14
-
15
- def initialize(params={}, options = {})
16
- @options = {
17
- :headers => { 'User-Agent' => USER_AGENT },
18
- :timeout => REQUEST_TIMEOUT,
19
- :method => :get,
20
- :format => ENV['TAOBAO_OUTPUT_FORMAT'].to_sym,
21
- :params => {
22
- :app_key => ENV['TAOBAO_APP_KEY'],
23
- :format => ENV['TAOBAO_OUTPUT_FORMAT'],
24
- :v => API_VERSION,
25
- :timestamp => Time.now.strftime("%Y-%m-%d %H:%M:%S"),
26
- },
27
- }
28
- # 合併請求參數
29
- @options.merge!(options.clone) unless options.empty?
30
- # 合併淘寶參數
31
- @options[:params].merge!(params.clone) unless params.empty?
32
- # 請淘寶求簽名
33
- str = ENV['TAOBAO_APP_SECRET'] + @options[:params].sort.flatten.join
34
- @options[:params][:sign] = Digest::MD5.hexdigest(str).upcase!
35
- end
36
-
37
- def result
38
- # trade_memo_update_response
39
- response_key = @options[:params][:method][7..-1].gsub(/\./, '_') + "_response"
40
- # trade
41
- root_key = response_key.split('_')[0]
42
- res = Nestful::Request.new(ENV['TAOBAO_REST_ENDPOINT'], @options).execute
43
- case ENV['TAOBAO_OUTPUT_FORMAT']
44
- when 'xml'
45
- res['msg'] || res
46
- when 'json'
47
- res[response_key] || res['error_response']['msg']
48
- end
49
- end
8
+ DEBUG = false
9
+
10
+ def initialize(params={})
11
+ @params = { # 淘宝参数
12
+ :app_key => ENV['TAOBAO_APP_KEY'],
13
+ :format => :json,
14
+ :v => '2.0',
15
+ :timestamp => timestamp
16
+ }
17
+ @params.merge!(params.clone) unless params.empty? # 參數合併
18
+ @params[:sign] = generate_sign(@params)
19
+ pp @params if DEBUG
20
+ end
21
+
22
+ def get(url=ENV['TAOBAO_REST_URL'])
23
+ @result = Nestful::Request.new(url, ({:method => :get, :format => :json, :params => @params})).execute
24
+ parse
25
+ end
26
+
27
+ def post(url=ENV['TAOBAO_REST_URL'])
28
+ @result = Nestful::Request.new(url, ({:method => :post, :format => :form, :params => @params})).execute
29
+ @result = JSON.parse(@result)
30
+ parse
31
+ end
32
+
33
+ def parse # 簡單解析一下
34
+ return false unless @result.is_a?(Hash)
35
+ case
36
+ when @result.has_key?(response_key)
37
+ result = @result[response_key]
38
+ result[root_key] if result.has_key?(root_key)
39
+ when @result.has_key?('error_response')
40
+ @result['error_response']['msg']
41
+ else
42
+ @result
43
+ end
44
+ end
45
+
46
+ def generate_sign(params={})
47
+ rand = ENV['TAOBAO_APP_SECRET'] + params.sort.flatten.join
48
+ Digest::MD5.hexdigest(rand).upcase! # 數字簽名
49
+ end
50
+
51
+ def response_key # 操作結果鍵
52
+ @params[:method][7..-1].gsub(/\./, '_') + "_response" unless @params[:method].nil?
53
+ end
54
+
55
+ def root_key # 獲取對象的鍵
56
+ response_key.split('_')[0] unless @params[:method].nil?
57
+ end
58
+
59
+ def timestamp # 时间戳
60
+ Time.now.strftime("%Y-%m-%d %H:%M:%S")
61
+ end
50
62
  end
51
63
  end
@@ -1,3 +1,3 @@
1
1
  module Topsdk
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/topsdk.rb CHANGED
@@ -1,14 +1,62 @@
1
1
  require "topsdk/version"
2
2
  require "topsdk/client"
3
3
 
4
+ RAILS_ENV = PADRINO_ENV if defined?(PADRINO_ENV)
5
+
6
+ # 賦值
7
+ def apply_settings
8
+ @settings = YAML.load_file(config_file)
9
+ @settings = defined?(RAILS_ENV) ? @settings[RAILS_ENV] : @settings['development']
10
+ ENV['TAOBAO_APP_KEY'] = @settings['api_key'].to_s
11
+ ENV['TAOBAO_APP_SECRET'] = @settings['secret_key']
12
+ ENV['TAOBAO_AUTH_URL'] = @settings['auth_url']
13
+ ENV['TAOBAO_TOKEN_URL'] = @settings['token_url']
14
+ ENV['CALLBACK_URL'] = @settings['callback_url']
15
+ ENV['TAOBAO_REST_URL'] = @settings['rest_url']
16
+ end
17
+
18
+ def config_file
19
+ # 解析配置文件
20
+ yml_file = File.expand_path(File.join('.', 'config', 'taobao.yml'))
21
+ unless File.exist?(yml_file)
22
+ File.expand_path(File.join('config', 'taobao.yml'), File.dirname(__FILE__))
23
+ else
24
+ yml_file
25
+ end
26
+ end
27
+
28
+ apply_settings
29
+
4
30
  module Topsdk
5
31
  class << self
32
+
6
33
  def get_with(joined_params = {})
7
- Client.new(joined_params).result
34
+ Client.new(joined_params).get
8
35
  end
9
36
 
10
37
  def post_with(joined_params = {})
11
- Client = Service.new(joined_params).result
38
+ Client.new(joined_params).post
39
+ end
40
+
41
+ def authorize_url
42
+ "#{ENV['TAOBAO_AUTH_URL']}?response_type=code&client_id=#{ENV['TAOBAO_APP_KEY']}&redirect_uri=#{ENV['CALLBACK_URL']}"
43
+ end
44
+
45
+ def token(code)
46
+ joined_params = token_params(code)
47
+ res = Client.new(joined_params).post(ENV['TAOBAO_TOKEN_URL'])
48
+ res['access_token']
12
49
  end
50
+
51
+ def token_params(code)
52
+ { # 淘宝参数
53
+ :grant_type => 'authorization_code',
54
+ :code => code,
55
+ :client_id => ENV['TAOBAO_APP_KEY'],
56
+ :client_secret => ENV['TAOBAO_APP_SECRET'],
57
+ :redirect_uri => ENV['CALLBACK_URL'],
58
+ }
59
+ end
60
+
13
61
  end
14
62
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: topsdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-28 00:00:00.000000000Z
12
+ date: 2011-09-30 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nestful
16
- requirement: &70258300447040 !ruby/object:Gem::Requirement
16
+ requirement: &70339835765280 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70258300447040
24
+ version_requirements: *70339835765280
25
25
  description: Simple Taobao API client for Ruby
26
26
  email:
27
27
  - howl.wong@gmail.com
@@ -34,6 +34,8 @@ files:
34
34
  - Gemfile
35
35
  - README.rdoc
36
36
  - Rakefile
37
+ - init.rb
38
+ - lib/config/taobao.yml
37
39
  - lib/topsdk.rb
38
40
  - lib/topsdk/client.rb
39
41
  - lib/topsdk/version.rb