因爲不同業務的需求不同,這裏只是簡單DEMO
代碼
import hashlib
import json
import time
# 計算md5的函數
def md5(s):
return hashlib.new("md5", s.encode("utf8")).hexdigest()
# 消息描述
description = '老黃曆'
# 要推送的消息
title = '今日運勢'
message = '宜上分;忌打碼'
# 過期時間
expireTime = '2020-05-28 14:11:54'
appkey = '5ece088f0cafb2b1b200015f'
app_master_secret = 'a8lkbfq8sy1v24tmszy4iefmsgdrrbk1'
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
timestamp = int(round(time.time() * 1000))
method = 'POST'
url = 'https://msgapi.umeng.com/api/send'
params = {
"policy": {
"expire_time": expireTime
},
"description": description,
"production_mode": True,
"appkey": appkey,
"payload": {
"body": {
"title": title,
"ticker": title,
"text": message,
"after_open": "go_app",
"play_vibrate": "false",
"play_lights": "false",
"play_sound": "true"
},
"display_type": "notification"
},
"type": "broadcast",
"timestamp": timestamp
}
post_body = json.dumps(params)
# 計算簽名
sign = md5('%s%s%s%s' % (method, url, post_body, app_master_secret))
print()
# 輸出接口地址
print(url + '?sign=' + sign)
print()
# 輸出請求體
print(post_body)
# <<<<<<<<<<<<<<<<<<<<<<<<<<<
運行後輸出
爲什麼要把輸出的圖片貼出來呢?因爲這裏有下面要說的一個坑,如果只是複製下面的輸出就遇不到,但是如果是複製控制檯的輸出很可能就會遇到。
https://msgapi.umeng.com/api/send?sign=8ca87b046ce71c04f329bd17b05ad287
{"policy": {"expire_time": "2020-05-28 14:11:54"}, "description": "\u8001\u9ec4\u5386", "production_mode": true, "appkey": "5ece088f0cafb2b1b200015f", "payload": {"body": {"title": "\u4eca\u65e5\u8fd0\u52bf", "ticker": "\u4eca\u65e5\u8fd0\u52bf", "text": "\u5b9c\u4e0a\u5206\uff1b\u5fcc\u6253\u7801", "after_open": "go_app", "play_vibrate": "false", "play_lights": "false", "play_sound": "true"}, "display_type": "notification"}, "type": "broadcast", "timestamp": 1590569405625}
然後複製URL
和參數去模擬請求一下API
結果失敗了!
這就是一個坑的地方,上圖中的紅框圈出來的地方是一個換行,而參與計算簽名的JSON字符串沒有換行,所以簽名就不正確,解決方式很簡單,去掉最後一個換行就可以了
查看 一下手機,需要打開應用後才能收到
PS:
AppKey
和App Master Secret
從控制檯中獲得