sms.kuaidi100.com:9502/sms/send.do 16
+
17
+    def send_sms(self, seller, phone, tid, sms_content, order_id):
18
+        """
19
+        短信发送
20
+        :param seller: 商户名称签名;最好用简称,该字段信息会在短信标签处显示。不要超过5个字符
21
+        :param phone: 接收短信手机号
22
+        :param tid: 短信模板ID
23
+        :param sms_content: 短信模板替换内容
24
+        :param order_id: 外部订单号:当该短信发送模板有回调地址时,外部订单号会返回给调用者,方便用户更新数据
25
+        :return: requests.Response.text
26
+        """
27
+        req_params = {
28
+            'sign': self.sign,  # 加密签名信息:MD5(key + userid);加密后字符串转大写
29
+            'userid': self.userid,  # 我方分配给贵司的的短信接口用户ID,点击查看账号信息
30
+            'seller': seller,  # 商户名称签名;最好用简称,该字段信息会在短信标签处显示。不要超过5个字符
31
+            'phone': phone,  # 接收短信手机号
32
+            'tid': tid,  # 短信模板ID
33
+            'content': sms_content,  # 短信模板替换内容
34
+            'outorder': order_id,  # 外部订单号:当该短信发送模板有回调地址时,外部订单号会返回给调用者,方便用户更新数据
35
+            # 'callback': 'https//www.baidu.com/kd100/callback'  # 回调地址:如果客户在发送短信时填写该参数,将按照这个参数回调短信发送状态;如果为空,将按照模板配置的地址回调短信发送状态;如果两个参数都不填写,将不会回调通知状态
36
+        }
37
+
38
+        return requests.post(self.url, req_params).text  # 发送请求
39
+
40
+
41
+content = {  # 短信模板替换内容
42
+    "接收人姓名": "小百",
43
+    "公司名": "快递100",
44
+    "快递单号": "154893238584",
45
+    "url": "https://www.kuaidi100.com"
46
+}
47
+result = KuaiDi100().send_sms('快递100', '13800138000', '11', content, '123456789')
48
+print(result)

+ 52 - 0
utils/kuaidi/subscribe.py

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

+ 48 - 0
utils/kuaidi/synquery.py

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

kodo - Gogs: Go Git Service

No Description

Brightcells: 4547c709bf Add api get_server_time_api 8 years ago
..
__init__.py 4547c709bf Add api get_server_time_api 8 years ago