阿里大鱼是阿里推出的产品,官方提供JAVA、.NET、PHP等版本的SDK下载,不知为何,唯独不提供ASP版本的SDK。
不提供没关系,自己写就是了,参照官方提供的API写一个就是了。
本来以为无非是向阿里大鱼的接口POST或者GET数据而已,但真正做了发现没有那么简单,最难的是签名,签名分两步一个是拼接参数,一个是加密。
原理如下:md5(secret+按顺序拼接好的参数名与参数值+secret)
1.对数组进行排序然后拼接
'' ' 对数组排序 ' param sPara 排序前的数组 ' return 排序后的数组 Function SortPara(sPara) Dim nCount nCount = ubound(sPara) For i = nCount To 0 Step -1 minmax = sPara( 0 ) minmaxSlot = 0 For j = 1 To i mark = (sPara( j ) > minmax) If mark Then minmax = sPara( j ) minmaxSlot = j End If Next If minmaxSlot <> i Then temp = sPara( minmaxSlot ) sPara( minmaxSlot ) = sPara( i ) sPara( i ) = temp End If Next SortPara = sPara end function
'' ' 把数组所有元素,按照“参数参数值参数参数值……”的模式拼接成字符串 ' param sPara 需要拼接的数组 ' return 拼接完成以后的字符串 Function CreateParamstring(sPara) nCount = ubound(sPara) Dim prestr For i = 0 To nCount prestr = prestr & sPara(i) Next CreateParamstring = replace(prestr,"=","") End Function
2.加密有两种:MD5和HMAC_MD5,我们使用MD5
'' ' MD5签名 ' param prestr 需要签名的字符串 ' param secret 私钥 ' param input_charset 编码格式 ' return 签名结果 Function Md5Sign(prestr, secret, input_charset) Dim mysign '把拼接后的字符串再与安全校验码直接连接起来 prestr = secret & prestr & secret mysign = MD5(prestr, input_charset) Md5Sign = UCase(mysign) End Function 3.将签名拼接到url中请求远程接口 '' ' 建立请求,以模拟远程HTTP的GET请求方式构造并获取阿里大鱼纯文字类型处理结果 ' param sParaTemp 请求前的参数数组 ' return 阿里大鱼处理结果 Public Function BuildRequestHttpWord(sParaTemp) Dim sUrl, objHttp, sResponseTxt '待请求参数数组字符串 sRequestData = BuildRequestParaToString(sParaTemp) '构造请求地址 sUrl = GATEWAY_NEW & sRequestData 'response.Write(sRequestData) 'response.End() '获取远程数据 Set objHttp=Server.CreateObject("Microsoft.XMLHTTP") '如果Microsoft.XMLHTTP不行,那么请替换下面的两行行代码尝试 'Set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0") 'objHttp.setOption 2, 13056 objHttp.open "GET", sUrl, False, "", "" objHttp.send() sResponseTxt = objHttp.ResponseText Set objHttp = Nothing BuildRequestHttpWord = sResponseTxt End Function
综上,就完成一次发送短信的操作。