按照我下面的写法哈:
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
}