11Django-容联通讯短信接口文档解读第一部分

文档地址:https://doc.yuntongxun.com/p/5a533de33b8496dd00dce07c

第一部分文档内容:

1 概述

1.1 业务流程说明

11Django-容联通讯短信接口文档解读第一部分

1.2 Base URL

模板短信API引用的地址有Base URL。

生产环境的Base URL:https://app.cloopen.com:8883

注意:为了确保数据隐私,云通讯平台的REST API是通过HTTPS方式请求。

1.3 业务URL

 

业务URL格式:/2013-12-26/Accounts/{accountSid}/SMS/{funcdes}?sig={SigParameter}

在URL格式中 {}内的内容表示为参数,非{}的内容固定不变。

 

Base URL与业务URL相拼接为完整请求URL,完整URL示例:

https://app.cloopen.com:8883/2013-12-26/Accounts/abcdefghijklmnopqrstuvwxyz012345/SMS/TemplateSMS?sig=C1F20E7A9733CE94F680C70A1DBABCD

 

属性说明:

属性 类型 约束 说明
accountSid String 必选 开发者主账户ACCOUNT SID(登陆官网在管理控制台获取)
SigParameter String 必选

REST API 验证参数,生成规则如下

1.使用MD5加密(账户Id + 账户授权令牌 + 时间戳)。其中账户Id和账户授权令牌根据url的验证级别对应主账户。

时间戳是当前系统时间,格式"yyyyMMddHHmmss"。时间戳有效时间为24小时,如:20140416142030

2.SigParameter参数需要大写,如不能写成sig=abcdefg而应该写成sig=ABCDEFG

1.4 HTTP标准包头字段

Accept:application/xml;

Content-Type:application/xml;charset=utf-8;

Content-Length:256; 

Authorization:

 

属性说明:

属性 类型 约束 说明
Accept String 必选 客户端响应接收数据格式:application/xml、application/json
Content-Type String 必选 类型:application/xml;charset=utf-8、application/json;charset=utf-8
Content-Length String 必选 Content-Length

Authorization

String

必选

验证信息,生成规则详见下方说明

1.使用Base64编码(账户Id + 冒号 + 时间戳)其中账户Id根据url的验证级别对应主账户

2.冒号为英文冒号

3.时间戳是当前系统时间,格式"yyyyMMddHHmmss",需与SigParameter中时间戳相同。

 


第二部分开始解读文档:

1登录云通讯管理后台绑定测试号码(由于接收短信)

2解读上面文档中的1.2和1.3

1)生产环境的Base URL可登录云通讯管理后台查看

2)业务url需要我们自己拼接,由于文档中并未说明地址中的{funcdes}要如何创建,所以按照文档中的示例,我们直接把这个变量写死,即TemplateSMS

业务URL格式:/2013-12-26/Accounts/{accountSid}/SMS/{funcdes}?sig={SigParameter}

accountSid:开发者主账户ACCOUNT SID,在控制台首页:
funcdes:根据文档里的示例,这个变量我们就按照示例提供的单词写死就行,即TemplateSMS
SigParameter:
1使用md5对(账号id+账户授权令牌+时间戳)进行加密,其中账户id和授权令牌在控制台首页里找,而时间戳需要我们自己来生成,时间戳的格式是"年月日时分秒",例如:20211213144530
2生成的md5值必须是大写,例如sig=ABCDE是正确的,而sig=abcde是错误的

3)对http请求头的要求:

#根据文档选择你是使用xml还是json,下面的文档给的xml
Accept:application/xml;
Content-Type:application/xml;charset=utf-8;
Content-Length:256; 
因为xml个人感觉很不方便,我选择用json,根据文档说明,应该写成这样:
Accept:application/json;
Content-Type:application/json;charset=utf-8;
Content-Length:256; 

#这一项需要我们改造(验证信息)
Authorization:
对(账户id+冒号+时间戳)进行base64编码,其中账户id在管理后台查看,冒号为英文冒号,时间戳格式为"年月日时分秒",例如202112121502

总结:

1.3的业务员url拼接需要用md5加密,而md5加密参数包括时间戳,因此我们需要按照文档的要求写一个生成时间戳的方法,

然后再写生成签名的方法

最后把业务URL拼接出来

#定义生成时间戳方法
    def get_timestamp(self):
        return datetime.datetime.now().strftime('%Y%m%d%H%M%S')
#生成签名即业务url中的sig={SigParameter}
    def get_sig(self,timestamp):
        # 使用md5对(账号id+账户授权令牌+时间戳)进行加密
        s = self.accountSid+self.accountToken+timestamp
        m = hashlib.md5()
        m.update(s.encode())
        #md5值必须是大写
        return m.hexdigest().upper()
#生成通信要用的路由:
    #业务URL格式:/2013-12-26/Accounts/{accountSid}/SMS/{funcdes}?sig={SigParameter}
    def get_request_url(self,sig):
        self.url=self.base_url + '/2013-12-26/Accounts/%s/SMS/TemplateSMS?sig=%s'%(self.accountSid,sig)
        return self.url

1.4是组织请求头,我们用json组织请求头,按照文档的要求进行组合:

#生成请求头
    def get_request_head(self,timestamp):
        #Authorization:对(账户id+冒号+时间戳)进行base64编码的字符串
        s = self.accountSid + ':' + timestamp
        auth = base64.b64encode(s.encode()).decode()
        #组织数据
        dataJson = {
            'Accept':'application/json',
            'Content-Type':'application/json;charset=utf-8',
            'Content-Length':256,
            'Authorization':auth
        }
        return dataJson

 

第三部分开始写代码:

通常我们在做平台对接的时候,我们都会做一个类,然后在初始化文件_ _init _ _ .py里面构建一些参数,用类做平台对接,未来可扩展性比较好,例如这家平台费用贵,我想换一个其它的平台,那么在这个类里可能稍加改动或者添加新的方法就可以实现。

import datetime, hashlib, base64
class Yuntongxin():
    #固定不变的东西用类属性表达
    base_url = 'https://app.cloopen.com:8883'
    #比较有差异化的东西在init里定义
    def __init__(self,accountSid,accountToken):
        self.accountSid = accountSid #账户id
        self.accountToken = accountToken #授权令牌

    #定义生成时间戳方法
    def get_timestamp(self):
        return datetime.datetime.now().strftime('%Y%m%d%H%M%S')

    #生成签名即业务url中的sig={SigParameter}
    def get_sig(self,timestamp):
        # 使用md5对(账号id+账户授权令牌+时间戳)进行加密
        s = self.accountSid+self.accountToken+timestamp
        m = hashlib.md5()
        m.update(s.encode())
        #md5值必须是大写
        return m.hexdigest().upper()


    #生成通信要用的路由:
    #业务URL格式:/2013-12-26/Accounts/{accountSid}/SMS/{funcdes}?sig={SigParameter}
    def get_request_url(self,sig):
        self.url=self.base_url + '/2013-12-26/Accounts/%s/SMS/TemplateSMS?sig=%s'%(self.accountSid,sig)
        return self.url

    #生成请求头
    def get_request_head(self,timestamp):
        #Authorization:对(账户id+冒号+时间戳)进行base64编码的字符串
        s = self.accountSid + ':' + timestamp
        auth = base64.b64encode(s.encode()).decode()
        #组织数据
        dataJson = {
            'Accept':'application/json',
            'Content-Type':'application/json;charset=utf-8',
            'Content-Length':256,
            'Authorization':auth
        }
        return dataJson

#定义一个run方法进行测试
    def run(self):
        timestamp = self.get_timestamp() #生成时间戳
        sig = self.get_sig(timestamp) #生成签名
        url = self.get_request_url(sig) #生成业务url
        #print(url)
        header = self.get_request_head(timestamp)
        print(header)
if __name__ == '__main__':
    yun = Yuntongxin('***************8','c6********************8')
    yun.run()

 

 

上一篇:PS 鼠绘一只古怪的卡通小兔子


下一篇:Android retrofit上传文件