硬派计费API接口
协议约定
- 消息发起方:第三方系统。
- 消息接受方:硬派计费系统。
- 接口请求方法:HTTP GET 或 POST 支持标准http1.1协议
- 响应消息格式:JSON:{“code”:0,"msg":"success","name1":"value1"}
- 消息报文编码:UTF-8 注意对参数进行 urlencode 编码
- 接口鉴权:MD5签名,md5(共享密钥+排序的参数值组合字符串)
- 当前接口版本:v1
消息签名
将所有参数的值进行排序相加得到排序的参数值字符串,为了安全,可以增加一个随机参数值,比如nonce=123131414,保证nonce每次都不同,nonce的值参与签名计算。
除了直接GET提交,也可以通过Form表单提交
API 安全设置
在 V4.0.1.2 之后的版本,API 设置了安全验证设置,必须在系统参数设置里开启API功能才能使用,同时配置 AllowIps 应用环境变量可以做到只允许指定的IP地址访问。
代码参考
python
def make_sign(api_secret, params=[]):
""" >>> make_sign("123456",[1,'2',u'中文']) '33C9065427EECA3490C5642C99165145' """ _params = [p for p in params if p is not None] _params.sort() _params.insert(0, api_secret) strs = ''.join(_params) mds = md5(strs.encode('utf-8')).hexdigest() return mds.upper()
def check_sign(api_secret, msg):
""" >>> check_sign("123456",dict(code=1,s='2',msg=u'中文',sign='33C9065427EECA3490C5642C99165145')) True """ if "sign" not in msg: return False sign = msg['sign'] params = [msg[k].encode('utf-8') for k in msg if k != 'sign'] local_sign = make_sign(api_secret, params) result = (sign == local_sign) if not result: logging.error("check_sign failure, sign:%s != local_sign:%s" %(sign,local_sign)) return result