关于腾讯云短信接口的sig字段,sha256加密问题,nodejs

JavaScript025

关于腾讯云短信接口的sig字段,sha256加密问题,nodejs,第1张

按照我下面的写法哈:

const crypto = require('crypto')

function sig()

{

    var strMobile = "这里是我的手机" //tel的mobile字段的内容

    var strAppKey = "这里是我的key" //sdkappid对应的appkey,需要业务方高度保密

    var strRand = "7226249334" //url中的random字段的值

    var strTime = "1457336869" //unix时间戳

    var buf = "appkey="+strAppKey+"&random="+strRand+"&time="

            +strTime+"&mobile="+strMobile

    var sig = crypto.createHash('sha256').update(buf, 'utf-8').digest('hex')

    return sig

}

console.log(sig())

输出结果如下:

7b1e97051886abdbd66c684530db2ba01644f828f31e06d624d88aff5469faa0

原因就是文档里面强调了编码要使用 utf-8,而 js 默认编码不是这个,所以需要强制指定下。

另外这个 sig 的计算结果是和你的输出参数有关的,并不是不变的。

还有就是你的 mobile 和 appkey 怎么传递的都是中文,官方给的貌似都是数字和字母呃。

js只能当作用户前端,除非你弄node.js ,在这里不考虑

具体就是js获取输入的手机号和内容,然后判断输入是否准确,比如手机号位数和短信字数

用js给提交按钮绑定事件进行ajax post数据传输给后台,或者直接用submit按钮进行表单提交。

后台获取数据后,通过某些端口与运营商通讯,然后发送短信。

你单纯一个服务器肯定没法发短信啊,还要有硬件,就要去移动啦电信啦联通啦买一些服务,调用他们的服务发送。

当然你买个发送短信的硬件插服务器上也行,不一定稳定,也不一定合法。。。

参考如下实例代码:

self.sendAliMessage = function(req,res){

var param = {

'Action': 'SingleSendSms',

'SignName' : 'xxxx', //短信签名名称

'TemplateCode' : 'SMS_1635xxxx',

'RecNum': '13564096???', //手机号

'ParamString' : JSON.stringify({"code":"9527"}),//验证码模板里的变量

'Version' : '2016-09-27',

'Format': 'JSON',

'AccessKeyId' : ali_access_key_id,

'SignatureMethod' : 'HMAC-SHA1',

'SignatureVersion' : '1.0',

'SignatureNonce': randomstr(9), //随机数

'Timestamp' : new Date().toISOString(),

}

param.Signature = sign.signForAliMessage(param, ali_access_key_secret)

var api_url = 'https://sms.aliyuncs.com/'

request.post({

url: api_url,

headers: {

'Content-Type':'application/x-www-form-urlencoded'

},

form:param

},function(err,response,data){

var result

data = JSON.parse(data)

if (!err &&data.Model) {

result = res.returnData(200)

}else{

result = res.returnData(113)

}

res.send(result)

})

}

/*签名方法*/

sign.signForAliMessage = function(src_sign,access_key_secret){

var param , qstring = []

var oa = Object.keys(src_sign).sort() , on = {}

for(var i=0i<oa.lengthi++){

on[oa] = src_sign[oa]

}

param = on

for(var key in param){

qstring.push(encodeURIComponent(key)+'='+encodeURIComponent(param[key]))

}

qstring = qstring.join('&')

var StringToSign = 'POST'+'&'+encodeURIComponent('/')+'&'+encodeURIComponent(qstring)

access_key_secret = access_key_secret+'&'

var signature = crypto.createHmac('sha1', access_key_secret).update(new Buffer(StringToSign, 'utf-8')).digest('base64')

return signature

}