Class: Wechat::JsapiTicket
- Inherits:
-
Object
- Object
- Wechat::JsapiTicket
- Defined in:
- lib/wechat/jsapi_ticket.rb
Instance Attribute Summary collapse
-
#access_token ⇒ Object
readonly
Returns the value of attribute access_token.
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#jsapi_ticket_data ⇒ Object
readonly
Returns the value of attribute jsapi_ticket_data.
-
#jsapi_ticket_file ⇒ Object
readonly
Returns the value of attribute jsapi_ticket_file.
Instance Method Summary collapse
-
#initialize(client, access_token, jsapi_ticket_file) ⇒ JsapiTicket
constructor
A new instance of JsapiTicket.
-
#refresh ⇒ Object
刷新 jsapi_ticket.
-
#signature(url) ⇒ Object
获取 jssdk 签名及注册所需其他参数, 返回具有如下结构的 hash: params = { noncestr: noncestr, timestamp: timestamp, jsapi_ticket: ticket, url: url, signature: signature }.
-
#ticket ⇒ Object
获取微信 jssdk 签名所需的 jsapi_ticket, 返回具有如下结构的 hash: { “errcode”:0, “errmsg”:“ok”, “ticket”:“bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA”, “expires_in”:7200 }.
Constructor Details
#initialize(client, access_token, jsapi_ticket_file) ⇒ JsapiTicket
Returns a new instance of JsapiTicket.
7 8 9 10 11 |
# File 'lib/wechat/jsapi_ticket.rb', line 7 def initialize(client, access_token, jsapi_ticket_file) @client = client @access_token = access_token @jsapi_ticket_file = jsapi_ticket_file end |
Instance Attribute Details
#access_token ⇒ Object (readonly)
Returns the value of attribute access_token.
5 6 7 |
# File 'lib/wechat/jsapi_ticket.rb', line 5 def access_token @access_token end |
#client ⇒ Object (readonly)
Returns the value of attribute client.
5 6 7 |
# File 'lib/wechat/jsapi_ticket.rb', line 5 def client @client end |
#jsapi_ticket_data ⇒ Object (readonly)
Returns the value of attribute jsapi_ticket_data.
5 6 7 |
# File 'lib/wechat/jsapi_ticket.rb', line 5 def jsapi_ticket_data @jsapi_ticket_data end |
#jsapi_ticket_file ⇒ Object (readonly)
Returns the value of attribute jsapi_ticket_file.
5 6 7 |
# File 'lib/wechat/jsapi_ticket.rb', line 5 def jsapi_ticket_file @jsapi_ticket_file end |
Instance Method Details
#refresh ⇒ Object
刷新 jsapi_ticket
35 36 37 38 39 40 |
# File 'lib/wechat/jsapi_ticket.rb', line 35 def refresh data = client.get('ticket/getticket', params: { access_token: access_token.token, type: 'jsapi' }) data.merge!(created_at: Time.now.to_i) File.open(jsapi_ticket_file, 'w') { |f| f.write(data.to_json) } if valid_ticket(data) @jsapi_ticket_data = data end |
#signature(url) ⇒ Object
获取 jssdk 签名及注册所需其他参数, 返回具有如下结构的 hash:
params = {
noncestr: noncestr,
timestamp: ,
jsapi_ticket: ticket,
url: url,
signature: signature
}
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/wechat/jsapi_ticket.rb', line 50 def signature(url) = Time.now.to_i noncestr = SecureRandom.base64(16) params = { noncestr: noncestr, timestamp: , jsapi_ticket: ticket, url: url } pairs = params.keys.sort.map do |key| "#{key}=#{params[key]}" end result = Digest::SHA1.hexdigest pairs.join('&') params.merge(signature: result) end |
#ticket ⇒ Object
获取微信 jssdk 签名所需的 jsapi_ticket, 返回具有如下结构的 hash:
{
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
}
20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/wechat/jsapi_ticket.rb', line 20 def ticket begin @jsapi_ticket_data ||= JSON.parse(File.read(jsapi_ticket_file)) created_at = jsapi_ticket_data['created_at'].to_i expires_in = jsapi_ticket_data['expires_in'].to_i if Time.now.to_i - created_at >= expires_in - 3 * 60 fail 'jsapi_ticket may be expired' end rescue refresh end valid_ticket(@jsapi_ticket_data) end |