# -*- coding: UTF-8 -*-
_author_ = 'zy'
_date_ = '2019/2/11 0011 21:01'
#阿里云查询月费用分摊服务api
url='https://business.aliyuncs.com/?Action=QueryInstanceGaapCost'
import time
import uuid
import urllib
import sys
import hashlib
import hmac
import base64
import requests
FORMAT_ISO_8601 = "%Y-%m-%dT%H:%M:%SZ"
# 获取请求时间戳
def get_Timestamp():
return time.strftime(FORMAT_ISO_8601, time.gmtime())
# 获取唯一随机数,防止网络攻击
def get_SignatureNonce():
return str(uuid.uuid4())
# 拼接参数字典
def get_all_parameters(accessKeyId, billingCycle, pageNumber, pageSize):
parameters = {
"Format": "JSON",
"Version": "2014-05-15",#api版本
"AccessKeyId": accessKeyId,#账号id
"SignatureMethod": "HMAC-SHA1",#加密方法
"Timestamp": get_Timestamp(),#时间戳
"SignatureVersion": "1.0",
"SignatureNonce": get_SignatureNonce(),#随机数
"Action": "QueryInstanceGaapCost",
"BillingCycle": billingCycle,#
# "ProductType": "",
"SubscriptionType": "Subscription",
# "ProductCode": "",
"PageNum": pageNumber,
"PageSize": pageSize
}
return parameters
def __pop_standard_urlencode(query):
ret = query.replace('+', '%20')
ret = ret.replace('*', '%2A')
ret = ret.replace('%7E', '~')
return ret
def __compose_string_to_sign(method, queries):
sorted_parameters = sorted(queries.items(), key=lambda queries: queries[0])
sorted_query_string = __pop_standard_urlencode(urllib.parse.urlencode(sorted_parameters))
canonicalized_query_string = __pop_standard_urlencode(urllib.request.pathname2url(sorted_query_string))
string_to_sign = method + "&%2F&" + canonicalized_query_string
return string_to_sign
# 获取签名字符串
def get_Signature(parameters, accessKeySecret):
if 'Signature' in parameters:
del parameters['Signature']
string_to_sign = __compose_string_to_sign('GET', parameters)
# accessKeySecret = str(accessKeySecret)
accessKeySecret += '&'
accessKeySecret=(accessKeySecret).encode(encoding='utf-8')
string_to_sign=string_to_sign.encode(encoding='utf-8')
# 计算签名HMAC值
h = hmac.new(accessKeySecret, string_to_sign, hashlib.sha1)#key ,method,方法
# print(h)
#h.update(upwd.encode('utf-8'))
#按照Base64 编码规则把上面的HMAC值编码成字符串
signature = base64.encodestring(h.digest()).strip()#
return signature
def test(accessKeyId,accessKeySecret,billingCycle):
accessKeyId = accessKeyId # 登录阿里账号分配
accessKeySecret = accessKeySecret # 登录阿里账号分配
billingCycle = billingCycle
pageNumber = 1
pageSize = 10
parameters = get_all_parameters(accessKeyId, billingCycle, pageNumber, pageSize) # 账期YYYY-MM:billingCycle
return (get_Signature(parameters, accessKeySecret))