nodejs 示例。
Note
ticket和token都有一个小时的过期时间,需要自行进行缓存。
如果重复请求过多会导致返回错误。
/* JS SDK Utils */
var request = require('lib/request')
var Promise = require('bluebird')
var sha1 = require('sha1')
// NOTE: This is a in-memory cache for dev only,
// For Production, We should use a Database
//
var cache = {
token: { id:'', expire: Date.now() },
ticket: { id:'', expire: Date.now() }
}
var cached_token = ''
var cached_ticket = ''
var token_time = Date.now()
var ticket_time = Date.now()
var grant_type = 'client_credential'
var client_id = 'mm4ddb7dac01ca6688'
var secret = 'F2204DF0-DF98-969D-CA9A-9295090096C5'
var sdk = {
getToken : function() {
return new Promise(function (resolve, reject) {
// if token not exist or expired
if (!cache.token.id || (cache.token.expire - Date.now()) < 0 ) {
console.log('https://oauth.immomo.com/jssdk/token?'+'&grant_type='+grant_type
+'&client_id='+client_id+'&secret='+secret)
request
.get('https://oauth.immomo.com/jssdk/token')
.query({
grant_type: grant_type,
client_id: client_id,
secret: secret
})
.then(function(resp){
cache.token.id = resp.body.token
cache.token.expire = Date.now() + 7200000
resolve(cache.token.id)
})
.catch(function(err){
reject(err)
})
} else {
resolve(cache.token.id)
}
})
},
getTicket: function() {
return new Promise(function (resolve, reject) {
sdk.getToken().then(function(token){
// if ticket not exist or expired
if (!cache.ticket.id || (cache.ticket.expire - Date.now()) < 0 ) {
request
.get('https://oauth.immomo.com/jssdk/ticket')
.query({
token: token,
})
.then(function(resp){
cache.ticket.id = resp.body.ticket
cache.ticket.expire = Date.now() + 7200000
resolve(cache.ticket.id)
})
.catch(function(err){
reject(err)
})
} else {
resolve(cache.ticket.id)
}
})
})
},
getSign: function(path) {
return new Promise(function (resolve, reject) {
sdk.getTicket().then(function(ticket){
var randomstr = 'keigaojkl3j48afefl32'
var timestamp = Date.now()
var url = path
var ticket = ticket
var _str = 'randomstr=' + randomstr
- '&ticket=' + ticket
- '×tamp='+timestamp
- '&url=' + url
var sign = sha1(_str).toUpperCase()
resolve({
randomstr: randomstr,
timestamp: timestamp,
sign: sign,
client_id: client_id
})
})
})
},
}
var getToken = function(req, res, next){
sdk.getToken().then(function(token){
res.send(token)
})
.catch(function(err){
res.status(500).send(err)
})
}
var getTicket = function(req, res, next) {
sdk.getTicket().then(function(ticket){
res.send(ticket)
})
.catch(function(err){
res.status(500).send(err)
})
}
var getSign = function(req, res, next) {
sdk.getSign(req.query.url || req.path).then(function(sign){
res.send(sign)
})
.catch(function(err){
res.status(500).send(err)
})
}
module.exports = {
getToken: getToken,
getTicket: getTicket,
getSign: getSign,
}