asp实现阿里大鱼短信API接口的方法

时间:2022-09-25 20:58:25

阿里大鱼是阿里推出的产品,官方提供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

 
综上,就完成一次发送短信的操作。