ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-13 17:34:32  阅读:167  来源: 互联网

标签:application url self 11Django URL sig accountSid 文档 容联


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

第一部分文档内容:

1 概述

1.1 业务流程说明

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()

 

 

标签:application,url,self,11Django,URL,sig,accountSid,文档,容联
来源: https://www.cnblogs.com/tyjs09/p/15684378.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有