sms.kuaidi100.com:9502/sms/send.do
+
+ def send_sms(self, seller, phone, tid, sms_content, order_id):
+ """
+ 短信发送
+ :param seller: 商户名称签名;最好用简称,该字段信息会在短信标签处显示。不要超过5个字符
+ :param phone: 接收短信手机号
+ :param tid: 短信模板ID
+ :param sms_content: 短信模板替换内容
+ :param order_id: 外部订单号:当该短信发送模板有回调地址时,外部订单号会返回给调用者,方便用户更新数据
+ :return: requests.Response.text
+ """
+ req_params = {
+ 'sign': self.sign, # 加密签名信息:MD5(key + userid);加密后字符串转大写
+ 'userid': self.userid, # 我方分配给贵司的的短信接口用户ID,点击查看账号信息
+ 'seller': seller, # 商户名称签名;最好用简称,该字段信息会在短信标签处显示。不要超过5个字符
+ 'phone': phone, # 接收短信手机号
+ 'tid': tid, # 短信模板ID
+ 'content': sms_content, # 短信模板替换内容
+ 'outorder': order_id, # 外部订单号:当该短信发送模板有回调地址时,外部订单号会返回给调用者,方便用户更新数据
+ # 'callback': 'https//www.baidu.com/kd100/callback' # 回调地址:如果客户在发送短信时填写该参数,将按照这个参数回调短信发送状态;如果为空,将按照模板配置的地址回调短信发送状态;如果两个参数都不填写,将不会回调通知状态
+ }
+
+ return requests.post(self.url, req_params).text # 发送请求
+
+
+content = { # 短信模板替换内容
+ "接收人姓名": "小百",
+ "公司名": "快递100",
+ "快递单号": "154893238584",
+ "url": "https://www.kuaidi100.com"
+}
+result = KuaiDi100().send_sms('快递100', '13800138000', '11', content, '123456789')
+print(result)
@@ -0,0 +1,52 @@ |
||
| 1 |
+# -*- coding: utf-8 -*-' |
|
| 2 |
+ |
|
| 3 |
+import json |
|
| 4 |
+ |
|
| 5 |
+import requests |
|
| 6 |
+ |
|
| 7 |
+ |
|
| 8 |
+class KuaiDi100: |
|
| 9 |
+ def __init__(self): |
|
| 10 |
+ self.key = '' # TODO 客户授权key |
|
| 11 |
+ self.url = 'https://poll.kuaidi100.com/poll' # 请求地址 |
|
| 12 |
+ |
|
| 13 |
+ def submit(self, com, num, phone, ship_from, ship_to): |
|
| 14 |
+ """ |
|
| 15 |
+ 物流轨迹订阅 |
|
| 16 |
+ :param com: 快递公司编码 |
|
| 17 |
+ :param num: 快递单号 |
|
| 18 |
+ :param phone: 收件人或寄件人的手机号或固话(也可以填写后四位,如果是固话,请不要上传分机号) |
|
| 19 |
+ :param ship_from: 出发地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,请尽量提供 |
|
| 20 |
+ :param ship_to: 目的地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,且到达目的地后会加大监控频率,请尽量提供 |
|
| 21 |
+ :return: requests.Response.text |
|
| 22 |
+ """ |
|
| 23 |
+ param = {
|
|
| 24 |
+ 'company': com, |
|
| 25 |
+ 'number': num, |
|
| 26 |
+ 'from': ship_from, |
|
| 27 |
+ 'to': ship_to, |
|
| 28 |
+ 'key': self.key, |
|
| 29 |
+ 'parameters': {
|
|
| 30 |
+ 'callbackurl': 'https://www.baidu.com/kd100/callback', # 回调接口的地址。如果需要在推送信息回传自己业务参数,可以在回调地址URL后面拼接上去,例如:https://www.baidu.com/kd100/callback?orderId=123 |
|
| 31 |
+ 'salt': None, # 签名用随机字符串。32位自定义字符串。添加该参数,则推送的时候会增加sign给贵司校验消息的可靠性 |
|
| 32 |
+ 'resultv2': '1', # 添加此字段表示开通行政区域解析功能。0:关闭(默认),1:开通行政区域解析功能 |
|
| 33 |
+ 'autoCom': '0', # 添加此字段且将此值设为1,则表示开始智能判断单号所属公司的功能,开启后,company字段可为空,即只传运单号(number字段),我方收到后会根据单号判断出其所属的快递公司(即company字段)。建议只有在无法知道单号对应的快递公司(即company的值)的情况下才开启此功能 |
|
| 34 |
+ 'interCom': '0', # 添加此字段且将此值设为1,则表示开启国际版,开启后,若订阅的单号(即number字段)属于国际单号,会返回出发国与目的国两个国家的跟踪信息,本功能暂时只支持邮政体系(国际类的邮政小包、EMS)内的快递公司,若单号我方识别为非国际单,即使添加本字段,也不会返回destResult元素组 |
|
| 35 |
+ 'departureCountry': '', # 出发国家编码,interCom=1的国际单号最好提供该值 |
|
| 36 |
+ 'departureCom': '', # 出发国家快递公司的编码,interCom=1的国际单号最好提供该值 |
|
| 37 |
+ 'destinationCountry': '', # 目的国家编码,interCom=1的国际单号最好提供该值 |
|
| 38 |
+ 'destinationCom': '', # 目的国家快递公司的编码,interCom=1的国际单号最好提供该值 |
|
| 39 |
+ 'phone': phone |
|
| 40 |
+ } |
|
| 41 |
+ } |
|
| 42 |
+ |
|
| 43 |
+ req_params = {
|
|
| 44 |
+ 'schema': 'json', # 查询公司编号 |
|
| 45 |
+ 'param': json.dumps(param) # 参数数据 |
|
| 46 |
+ } |
|
| 47 |
+ |
|
| 48 |
+ return requests.post(self.url, req_params).text # 发送请求 |
|
| 49 |
+ |
|
| 50 |
+ |
|
| 51 |
+result = KuaiDi100().submit('yuantong', 'YT9693083639795', '', '江门市', '深圳市')
|
|
| 52 |
+print(result) |
@@ -0,0 +1,48 @@ |
||
| 1 |
+# -*- coding: utf-8 -*-' |
|
| 2 |
+ |
|
| 3 |
+import hashlib |
|
| 4 |
+import json |
|
| 5 |
+ |
|
| 6 |
+import requests |
|
| 7 |
+from django.conf import settings |
|
| 8 |
+ |
|
| 9 |
+ |
|
| 10 |
+class KuaiDi100: |
|
| 11 |
+ def __init__(self): |
|
| 12 |
+ self.key = settings.KUAIDI00.get('key', '') # TODO 客户授权key
|
|
| 13 |
+ self.customer = settings.KUAIDI00.get('customer', '') # TODO 查询公司编号
|
|
| 14 |
+ self.url = 'https://poll.kuaidi100.com/poll/query.do' # 请求地址 |
|
| 15 |
+ |
|
| 16 |
+ def track(self, com, num, phone=None, ship_from=None, ship_to=None): |
|
| 17 |
+ """ |
|
| 18 |
+ 物流轨迹实时查询: https://api.kuaidi100.com/document/5f0ffb5ebc8da837cbd8aefc.html |
|
| 19 |
+ :param com: 查询的快递公司的编码,一律用小写字母 |
|
| 20 |
+ :param num: 查询的快递单号,单号的最大长度是32个字符 |
|
| 21 |
+ :param phone: 收件人或寄件人的手机号或固话(也可以填写后四位,如果是固话,请不要上传分机号) |
|
| 22 |
+ :param ship_from: 出发地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,请尽量提供 |
|
| 23 |
+ :param ship_to: 目的地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,且到达目的地后会加大监控频率,请尽量提供 |
|
| 24 |
+ :return: requests.Response.text |
|
| 25 |
+ """ |
|
| 26 |
+ param = {
|
|
| 27 |
+ 'com': com, |
|
| 28 |
+ 'num': num, |
|
| 29 |
+ 'phone': phone, |
|
| 30 |
+ 'from': ship_from, |
|
| 31 |
+ 'to': ship_to, |
|
| 32 |
+ 'resultv2': '1', # 添加此字段表示开通行政区域解析功能。0:关闭(默认),1:开通行政区域解析功能,2:开通行政解析功能并且返回出发、目的及当前城市信息 |
|
| 33 |
+ 'show': '0', # 返回数据格式。0:json(默认),1:xml,2:html,3:text |
|
| 34 |
+ 'order': 'desc' # 返回结果排序方式。desc:降序(默认),asc:升序 |
|
| 35 |
+ } |
|
| 36 |
+ param_str = json.dumps(param) # 转json字符串 |
|
| 37 |
+ |
|
| 38 |
+ # 签名加密, 用于验证身份, 按param + key + customer 的顺序进行MD5加密(注意加密后字符串要转大写), 不需要“+”号 |
|
| 39 |
+ temp_sign = param_str + self.key + self.customer |
|
| 40 |
+ md = hashlib.md5() |
|
| 41 |
+ md.update(temp_sign.encode()) |
|
| 42 |
+ sign = md.hexdigest().upper() |
|
| 43 |
+ request_data = {'customer': self.customer, 'param': param_str, 'sign': sign}
|
|
| 44 |
+ return requests.post(self.url, request_data).text # 发送请求 |
|
| 45 |
+ |
|
| 46 |
+ |
|
| 47 |
+# result = KuaiDi100().track('yuantong', 'YT9693083639795', '', '广东省江门市', '广东省深圳市')
|
|
| 48 |
+# print(result) |