#!/usr/bin/env python
# coding: utf-8

# In[1]:


#!/usr/bin/env python
# coding: utf-8

# In[56]:


#短信网关接口（JSON）请求demo示例

import requests
import hashlib
import time
import json
import math

#  使用接口网关地址替换  http://sms.ue35.net/sms

#  短信批量发送接口
#  http://sms.ue35.net/sms/api/sendMessageMass

#  短信一对一发送接口
#  http://sms.ue35.net/sms/api/sendMessageOne

#  回执状态获取接口
#  http://sms.ue35.net/sms/api/getReport

#  上行回复获取接口
#  http://sms.ue35.net/sms/api/getUpstream

#  查询余额接口
#  http://sms.ue35.net/sms/api/getBalance

#  提交短信模板接口
#  http://sms.ue35.net/sms/api/createTemplate

#  查询短信模板接口
#  http://sms.ue35.net/sms/api/queryTemplates

#  报备签名接口
#  http://sms.ue35.net/sms/api/addSignature

#  查询签名接口
#  http://sms.ue35.net/sms/api/querySignature


#md5加密
def md5(s):
    m=hashlib.md5(s.encode(encoding="UTF-8"))     #创建md5对象
    return m.hexdigest()    #获取加密后的字符串

#post(json)
def postUrl(url,postData):
    headers = {'Content-Type':'application/json'}
    result = requests.post(url=url,headers=headers,json=postData).text
    print("{}\n 请求地址： {}\n 请求参数： {} \n 请求结果： {}\n".format(headers,url,json.dumps(postData, ensure_ascii=False),result))
    return result

def getSign(userName,password):
    timestamp = int( round(time.time() * 1000) ) #当前时间戳
    sign = md5(str(userName)+str(timestamp)+str(md5(password)))
    return {
        "userName": userName,
        "sign": sign,
        "timestamp": timestamp
    }

#短信批量发送接口
def sendMessageMass(userName,password,address):
    url="http://address:port/sms/api/sendMessageMass"
    url = url.replace("http://address:port/sms",address)
    
    content = "红红火火恍恍惚惚"
    
    phones = ["18278899999","13457856748","13200000000"]

    #发送手机号码，最大数量不得超过 10000 个号码，系统将自动去除重复号码
    size = 10000
    phoneList = []
    length = len(phones)
    index = math.ceil(length / size)
    r = length % size
    for i in range(index):
        if r > 0 and i == index - 1:
            phoneList = phones[(i * size):length]
        else:
            phoneList = phones[(i * size):( (i + 1) * size)]
        jsons= {
            "content" : content,
            "phoneList": phoneList,
        }
        jsons.update(getSign(userName,password))
        postUrl(url,jsons)
    return

#短信一对一发送接口
def sendMessageOne(userName,password,address):
    url = "http://address:port/sms/api/sendMessageOne"
    url = url.replace("http://address:port/sms",address)
        
    msg="【飞飞科技】您的验证码是{%变量%}"
    # 数组形式，每个 JSON 对象包含短信内容和号码数据，最大 1000 个号码。
    size = 1000
    list = [["18278810020","123456"],["13457856748","784556"],["18648794564","454545"]]
    messageList=[]
    for i in range(len(list)): 
        d={}
        d["phone"]=list[i][0]
        d["content"]=msg.replace("{%变量%}",list[i][1])
        messageList.append(d)
        if len(messageList)==size:
            jsons = {
                "messageList": messageList
            }
            jsons.update(getSign(userName,password))
            postUrl(url,jsons)

            messageList = []

    if len(messageList) > 0:
        jsons = {
            "messageList": messageList
        }
        jsons.update(getSign(userName,password))
        postUrl(url,jsons)

    return

#回执状态获取接口
def getReport(userName,password,address):
    url = "http://address:port/sms/api/getReport"
    url = url.replace("http://address:port/sms",address)
        
    postUrl(url,getSign(userName,password))
    return

#上行回复获取接口
def getUpstream(userName,password,address):
    url = "http://address:port/sms/api/getUpstream"
    url = url.replace("http://address:port/sms",address)
    
    postUrl(url,getSign(userName,password))
    return

#查询余额接口
def getBalance(userName,password,address):
    url = "http://address:port/sms/api/getBalance"
    url = url.replace("http://address:port/sms",address)
        
    postUrl(url,getSign(userName,password))
    return

#提交短信模板接口
def createTemplate(userName,password,address):
    url = "http://address:port/sms/api/createTemplate"
    url = url.replace("http://address:port/sms",address)
    
    jsons = {
        "content": "报备模板测试哈哈哈"
    }
    jsons.update(getSign(userName,password))
    postUrl(url,jsons)
    return

#查询短信模板接口
def queryTemplates(userName,password,address):
    url = "http://address:port/sms/api/queryTemplates"
    url = url.replace("http://address:port/sms",address)
    
    jsons= {
        "templateId": 1209
    }
    jsons.update(getSign(userName,password))
    postUrl(url,jsons)
    return

#报备签名接口
def addSignature(userName,password,address):
    url = "http://address:port/sms/api/addSignature"
    url = url.replace("http://address:port/sms",address)
    
    #签名需要携带签名符号【】
    signatureList = ["【签名】","【呜哇】"]
    jsons= {
        "signatureList": signatureList
    }
    jsons.update(getSign(userName,password))
    postUrl(url,jsons)
    return

#查询签名接口
def querySignature(userName,password,address):
    url = "http://address:port/sms/api/querySignature"
    url = url.replace("http://address:port/sms",address)
    
    postUrl(url,getSign(userName,password))
    return

#测试
address="http://sms.ue35.net/sms"#接口网关地址 ，例如：http://127.0.0.1:8001/sms
userName="xxx"#用户名
password="xxx"#接口密码，不是登录密码

# sendMessageMass(userName, password, address)#批量发送
# sendMessageOne(userName, password, address)#一对一
# getReport(userName, password, address)#回执获取
# getUpstream(userName, password, address)#上行获取
# getBalance(userName, password, address)#查询余额
# createTemplate(userName, password, address)#提交短信模板
# queryTemplates(userName, password, address)#查询短信模板
# addSignature(userName, password, address)#报备签名
# querySignature(userName, password, address)#查询签名

# In[ ]:


# In[ ]:




