Python、GAS、C++、C# 、Node.js、R、Curl版本分享於此。
Python 2.7
import requests import json def SendMessageToLineNotify(Message, MessagingSenderId, Token): headers = {"content-type": "application/json", "Authorization": "key=" + MessagingSenderId} url = "https://fcm.googleapis.com/fcm/send" data = {"notification": {"title" : "iinfo資訊交流", "body" : Message, "icon" : "https://www.ccf.org.tw/new/endpoverty/images/product/product-pic1.jpg", "click_action" : "http://white5168.blogspot.tw/"}, "to": Token} req = requests.post(url, data=json.dumps(data), headers=headers) print req.text def main(): Message = "中文字~!@#$%^&*()_+123456789" MessagingSenderId = "你的MessagingSenderId" Token = "你的Token" SendMessageToLineNotify(Message, MessagingSenderId, Token) if __name__ == '__main__': main()Google Apps Script
function SendMessageByFCM() { var Message = '中文字~!@#$%^&*()_+123456789'; var PictureURL= 'https://www.ccf.org.tw/new/endpoverty/images/product/product-pic1.jpg'; var MessagingSenderId = '你的MessagingSenderId'; var Token = '你的Token'; sendMessage(Message, PictureURL, MessagingSenderId, Token); } function sendMessage(Message, PictureURL, MessagingSenderId, Token){ var URL = 'https://fcm.googleapis.com/fcm/send'; var payload = { 'notification':{ 'title' : 'iinfo資訊交流', 'body' : Message, 'icon' : PictureURL, 'click_action' : 'http://white5168.blogspot.tw/' }, "to" : Token }; var header = { 'Content-Type':'application/json', 'Authorization' : 'key=' + MessagingSenderId } var options = { 'method' : 'post', 'payload' : JSON.stringify(payload), 'headers' : header }; var response = UrlFetchApp.fetch(URL, options); Logger.log(response); }VC++
VC++ 處理 JSON 可參考 Visual Studio 2010 C++ 使用 Jsoncpp 。
#include "stdafx.h" #include "POSTJSONVC.h" #import "msxml4.dll" #include "json/json.h" #include "json/value.h" using namespace std; using namespace MSXML2; inline void THROW_IF_FAIL( HRESULT _hr ) { if FAILED(_hr) throw(_hr); } void SendMessageByFCM() { CString csMessage; OutputDebugString("測試XMLHTTP傳文字與網路圖片!\n"); try { //初始化Com元件 THROW_IF_FAIL(CoInitialize(NULL)); IXMLHTTPRequestPtr xmlrequest=NULL; VARIANT vAsync; vAsync.vt = VT_BOOL; vAsync.boolVal = FALSE; VARIANT vUser; vUser.vt = VT_BOOL; vUser.bstrVal = NULL; VARIANT vPassword; vPassword.vt = VT_BOOL; vPassword.bstrVal = NULL; //指定的FCM Token bstr_t MessagingSenderId = "你的MessagingSenderId"; bstr_t Token = "你的Token"; //網路圖片連結 家扶娃娃撲滿 CString PicURL = "http://www.ccf.org.tw/new/endpoverty/images/product/product-pic1.jpg"; //FCM網址 bstr_t sUrl = "https://fcm.googleapis.com/fcm/send"; //文字訊息 CString csMessage = "中文字~!@#$%^&*()_+123456789"; Json::Value root; Json::Value notification; notification["title"] = "iinfo資訊交流"; notification["body"] = Json::Value(csMessage); notification["icon"] = Json::Value(PicURL); notification["click_action"] = "http://white5168.blogspot.tw/"; root["notification"] = notification; root["to"] = Json::Value(Token); Json::StyledWriter fw; string outputConfig = fw.write( root ); CString payload = outputConfig.c_str(); printf("%s\n", payload); // // 建立 MSXML2.XMLHTTP 物件. // THROW_IF_FAIL(xmlrequest.CreateInstance("MSXML2.XMLHTTP")); // // 傳送 HTTPPOSTrequest. // bstr_t sMethod = "POST"; THROW_IF_FAIL(xmlrequest->open(sMethod, sUrl, vAsync, vUser, vPassword)); //Header內容設定 THROW_IF_FAIL(xmlrequest->setRequestHeader("Content-Type:", "application/json")); THROW_IF_FAIL(xmlrequest->setRequestHeader("Authorization", "key=" + MessagingSenderId)); // // 傳送 request 到 server. // THROW_IF_FAIL(xmlrequest->send(_variant_t(payload))); // // 取得執行狀態 // long lStatus; xmlrequest->get_status(&lStatus); if(lStatus == 200) { BSTR bstrResponseText; xmlrequest->get_responseText(&bstrResponseText); _bstr_t bstrtbody(bstrResponseText); csMessage.Format("responseText = %s\n", (char*)(bstr_t)bstrtbody); MessageBox(NULL, csMessage, "執行成功", MB_ICONASTERISK); } else { BSTR bstrResp; xmlrequest->get_statusText(&bstrResp); csMessage.Format("statusText = %s\n", (char*)(bstr_t)bstrResp); MessageBox(NULL, csMessage, "執行失敗", MB_ICONERROR); } } catch (_com_error &e) { if(BSTR(e.Description())) { csMessage.Format("Description = %s", BSTR(e.Description())); OutputDebugString(csMessage); } } CoUninitialize(); OutputDebugString("執行結束\n"); } int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { SendMessageByFCM(); return 0; }C#
透過 Nuget 安裝 Newtonsoft.Json,並使用 using Newtonsoft.Json。
安裝指令:
Install-Package Newtonsoft.Json
using System; using System.IO; using System.Net; using System.Text; using Newtonsoft.Json; namespace POSTJSON { class Program { static void Main(string[] args) { // Create a request using a URL that can receive a post. WebRequest request = WebRequest.Create("https://fcm.googleapis.com/fcm/send"); // Set the Method property of the request to POST. request.Method = "POST"; // Create POST data and convert it to a byte array. string MessagingSenderId = "你的MessagingSenderId"; string Token = "你的Token"; string message = "中文字~!@#$%^&*()_+123456789"; string PictureURL = "http://www.ccf.org.tw/new/endpoverty/images/product/product-pic1.jpg"; var payload = new { notification = new { title = "iinfo資訊交流", body = message, icon = PictureURL, click_action = "http://white5168.blogspot.tw/" }, to = Token }; string postData = JsonConvert.SerializeObject(payload); byte[] byteArray = Encoding.UTF8.GetBytes(postData); // Set the ContentType property of the WebRequest. request.ContentType = "application/json"; // Set the Header property of the WebRequest. request.Headers["Authorization"] = "key=" + MessagingSenderId; // Set the ContentLength property of the WebRequest. request.ContentLength = byteArray.Length; // Get the request stream. Stream dataStream = request.GetRequestStream(); // Write the data to the request stream. dataStream.Write(byteArray, 0, byteArray.Length); // Close the Stream object. dataStream.Close(); // Get the response. WebResponse response = request.GetResponse(); // Display the status. Console.WriteLine(((HttpWebResponse)response).StatusDescription); // Get the stream containing content returned by the server. dataStream = response.GetResponseStream(); // Open the stream using a StreamReader for easy access. StreamReader reader = new StreamReader(dataStream); // Read the content. string responseFromServer = reader.ReadToEnd(); // Display the content. Console.WriteLine(responseFromServer); // Clean up the streams. reader.Close(); dataStream.Close(); response.Close(); } } }Node.js
var MessagingSenderId = "你的MessagingSenderId" var Token = "你的Token"; var PictureURL = "http://www.ccf.org.tw/new/endpoverty/images/product/product-pic1.jpg"; var Message = "中文字~!@#$%^&*()_+123456789"; sendMessage(Message, PictureURL, MessagingSenderId, Token) function sendMessage(Message, PictureURL, MessagingSenderId, Token) { var FCMURL = "https://fcm.googleapis.com/fcm/send"; var strMessage = { "notification" :{ "title" : "iinfo資訊交流", "body" : Message, "icon" : PictureURL, "click_action" : "http://white5168.blogspot.tw/" } , "to" : Token }; var payload = JSON.stringify(strMessage); var XMLHttpRequest = require("w3c-xmlhttprequest").XMLHttpRequest; var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function () { if (xhttp.readyState === 4) { console.log(xhttp.responseText); console.log(xhttp.status); } }; xhttp.open('POST', FCMURL, true); xhttp.setRequestHeader('Content-Type', 'application/json'); xhttp.setRequestHeader('Authorization', 'key=' + MessagingSenderId); xhttp.send(payload); }R
需在Rstudio上先安裝rjson套件。
install.packages("rjson")再使用以下程式碼。
library(httr) library(rjson) MessagingSenderId <- "key=你的MessagingSenderId" token <- "你的Token" url <- "https://fcm.googleapis.com/fcm/send" title <- "iinfo資訊交流" body <- "中文測試~@#$%^&*()123456789" icon <- "http://www.ccf.org.tw/new/endpoverty/images/product/product-pic1.jpg" click_action <- "http://white5168.blogspot.tw/" notification <- list(title=iconv(title, "big5", "utf8"), body=iconv(body, "big5", "utf8"), icon=iconv(icon, "big5", "utf8"), click_action=iconv(click_action, "big5", "utf8")) payload <- toJSON(list(notification=notification, to=token)) header <- add_headers("Content-Type"="application/json", "Authorization"=MessagingSenderId) req <- POST(url, header, body = payload, encode = "json") status <- content(req , as ="text", encoding = "utf-8") status更精進的寫法,置換第10、11行成以下程式碼。
notification <- c(title=title, body=body, icon=icon, click_action=click_action) payload <- toJSON(list(notification=iconv(notification, "big5", "utf8"), to=token))Curl
透過外部工具 Curl 指令執行,中文字無法處理。
curl -X POST -H "Authorization: key=你的MessagingSenderId" -H "Content-Type: application/json" https://fcm.googleapis.com/fcm/send -d "{\"to\":\"你的Token\",\"notification\":{\"title\":\"iinfo資訊交流\", \"body\":\"中文字~!@#$%^&*()_+123456789\",\"icon\":\"http://www.ccf.org.tw/new/endpoverty/images/product/product-pic1.jpg\", \"click_action\":\"http://white5168.blogspot.tw/\"}}"
執行結果:
參考資料: