设为首页收藏本站订阅更新

无忧脚本

 找回密码
 加入无忧

QQ登录

只需一步,快速开始

搜索
查看: 1964|回复: 1

[推荐] 百度短信发送接口

[复制链接]
发表于 2015-11-2 10:49:51 | 显示全部楼层 |阅读模式
本帖最后由 Rimifon 于 2015-11-2 11:23 编辑
  1. function SmsClass(ak, sk) {
  2.         var me = this;
  3.         var xhr = new ActiveXObject("MsXml2.ServerXmlHttp");
  4.         var utf = new ActiveXObject("System.Text.UTF8Encoding");
  5.         var sha = new ActiveXObject("System.Security.Cryptography.HMACSHA256");
  6.         var xml = new ActiveXObject("Microsoft.XmlDom").createElement("xml");
  7.         xml.dataType = "bin.hex";

  8.         me.Send = function(temp, mobile, data) {
  9.                 var arr = new Array;
  10.                 for(var x in data) arr.push(x + "\\\":\\\"" + data[x].replace(/\\/g, "\\\\").replace(/"/g, "\\\""));
  11.                 // 百度的JSON要求键名必须使用双引号,否则无法解析
  12.                 var str = "{" +
  13.                         "\n\t\"templateId\":\"" + temp + "\", " +
  14.                         "\n\t\"receiver\":[\"" + mobile.join("\",\"") + "\"], " +
  15.                         "\n\t\"contentVar\":\"{ \\\"" + arr.join("\\\",\\\"") + "\\\" }\"" +
  16.                 "\n}";
  17.                 var time = new Date;
  18.                 arr = time.toGMTString().match(/(\d+) \w+ (\d+) ([\d\:]+)/);
  19.                 time = [arr[2], time.getMonth() + 1, arr[1]].join("-") + "T" + arr[3] + "Z"; // 注意:这里是GMT时间,比实际时间慢8个小时
  20.                 var asp = ["bce-auth-v1", ak, time, 1800].join("/");
  21.                 var sik = HmacSha(asp, sk);
  22.                 var hed = [
  23.                         "host:sms.bj.baidubce.com",
  24.                         "x-bce-date:" + time.replace(/\:/g, "%3A")
  25.                 ].join("\n");
  26.                 var cnr = ["POST", "/v1/message", "", hed].join("\n");
  27.                 var sig = HmacSha(cnr, sik);
  28.                 var atz = [ asp, "host;x-bce-date", sig].join("/");
  29.                 xhr.open("POST", "http://sms.bj.baidubce.com/v1/message", true);
  30.                 xhr.setRequestHeader("Authorization", atz);
  31.                 xhr.setRequestHeader("Content-Type", "application/json");
  32.                 xhr.setRequestHeader("x-bce-content-sha256", HmacSha(str)); // 文档说POST必须有这个头,实际去掉好像也没问题
  33.                 xhr.setRequestHeader("x-bce-date", time);
  34.                 xhr.send(str); // head和body必须一起发送[WSH环境下会分开发送,百度会认为你没有发送body]
  35.                 xhr.waitForResponse();
  36.                 return [str, xhr.responseText];
  37.         };

  38.         function HmacSha(asp, key) {
  39.                 var bin = utf.GetBytes_4(asp);
  40.                 if(key) sha.Key = utf.GetBytes_4(key);
  41.                 xml.nodeTypedValue = sha.ComputeHash_2(bin);
  42.                 return xml.text;
  43.         }
  44. }
复制代码
调用方法为:
  1. var sms = new SmsClass("Your BD AK", "Your BD SK");
  2. // 公共发验证码的模板,code只能用数字,例如2.34也是可以的
  3. sms.Send("smsTpl:e7476122a1c24e37b3b0de19d04ae900", ["手机号"], { code : 1234 });
复制代码

发表于 2015-11-9 14:15:30 | 显示全部楼层
有没有演示地址,
您需要登录后才可以回帖 登录 | 加入无忧

本版积分规则

小黑屋|手机版|Archiver|无忧脚本 ( 苏ICP备05080427号 )|值班电话:027-62300445   鄂公网安备 42011102000433号

GMT+8, 2017-12-13 13:15 , Processed in 0.088654 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表