一、目的php
完成在微信公衆號中羣發消息。這裏只是完成簡單的文字發送。也能夠發送語音圖片等,只是發送數據格式不一樣而已,下面有連接,能夠查詢數據類型的數據發送格式。html
二、羣發短信的流程json
三、獲取測試公衆帳號 + 關注公衆號api
1)、公衆測試帳號獲取安全
訪問上面的鏈接,選擇「接口測試號申請」得到直接打開http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index經過微信客戶端掃碼登陸便可登陸。服務器
登陸完便可獲取到一個測試公衆帳號的信息。主要有appId和appsecret兩個參數,這將惟一標示一個公衆號,而且須要將他們做爲參數獲取用戶的信息。、微信
2)、配置接口信息微信開發
這一步能夠參照微信接入說明 ,該頁提供一個php的實例下載,很簡單基本上修改一下自定義的TOKEN就行了,而後把驗證頁面放到本身的服務器上。app
這裏我提供我作的一個例子:微信公衆平臺
準備資源:
域名+空間(個人是sae空間+萬網域名)、僅做驗證的php文件
域名指向的空間根目錄我建立了一個wx_sample.php
wx_sample.php
<?php /** * wechat php test */ //define your token define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; if(!empty( $keyword )) { $msgType = "text"; $contentStr = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } } private function checkSignature() { // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
而後填寫配置信息Token (必定要與上面的wx_sample.php中的token一致)、URL(wx_sample.php的地址)
而後提交就能夠了
若是提示失敗,請檢查Token與URL【若是是本身的域名和空間,請備案; 百度sae、新浪sae的須要本身申請並且認證經過(就是本身拍一個手握證件照上傳,很簡單的 最短2天就o了),這一步必須】
3)配置JS接口安全域名
填這個域名是必定不要帶protocol的,好比說 http://www.sagosoft.com/ 這樣是不對的,這是URL不是域名
域名應該是相似 www.sagosoft.com這樣的 【不然在微信js-sdk接入時會提示invalid url domain】
4)關注公衆號
用戶只有關注了這個公衆號了,才能經過打開有公衆號信息的連接去受權第三方登陸,並獲取用戶信息的操做。故咱們還須要用咱們的微信關注微信號,操做以下:
5)配置回調函數
咱們在微信客戶端訪問第三方網頁(即咱們本身的網頁)的時候,咱們能夠經過微信網頁受權機制,咱們不只要有前面獲取到的appid和appsecret還須要有當用戶受權以後,回調的域名設置,即用戶受權後,頁面會跳轉到哪裏。具體的配置以下:
仍是在剛剛的頁面,有一個「網頁受權獲取用戶基本信息」,點擊後面的修改
填寫回調的域名:
域名是上面配置的根域名,假如你上面 「接口配置信息」 填寫的url 爲zcr.sinaaappc.com/wx_sample.php,這裏只要填寫zcr.sinaaappc.com 就能夠了。
若是你的網址沒有被列入過黑名單,就會在頂部出現
注意:
一、這裏填寫的是域名(是一個字符串),而不是URL,所以請勿加http://等協議頭; 二、受權回調域名配置規範爲全域名,好比須要網頁受權的域名爲:www.qq.com,配置之後此域名下面的頁面http://www.qq.com/music.html 、 http://www.qq.com/login.html 均可以進行OAuth2.0鑑權。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com沒法進行OAuth2.0鑑權
到這裏,咱們就完成了公衆號測試帳號的獲取和配置,已經用戶關注微信公衆號。
四、經過appid和appsecret獲取咱們的access_token
access_token是公衆號的全局惟一票據,公衆號調用各接口時都需使用access_token。開發者須要進行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前爲2個小時,需定時刷新,重複獲取將致使上次獲取的access_token失效。
獲取方法:
http請求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
參數說明
參數 | 是否必須 | 說明 |
---|---|---|
grant_type | 是 | 獲取access_token填寫client_credential |
appid | 是 | 第三方用戶惟一憑證 |
secret | 是 | 第三方用戶惟一憑證密鑰,即appsecret |
返回說明
正常狀況下,微信會返回下述JSON數據包給公衆號:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
參數 | 說明 |
---|---|
access_token | 獲取到的憑證 |
expires_in | 憑證有效時間,單位:秒 |
錯誤時微信會返回錯誤碼等信息,JSON數據包示例以下(該示例爲AppID無效錯誤):
{"errcode":40013,"errmsg":"invalid appid"}
例子:
獲取access_token:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx4d1cb8dbd827a16e9&secret=d462d4c36b116795d1d99dcf0547af5443d
返回數據:
{ "access_token": "qR5UK2vMf5aTHV8e-uB10FZW0caTZm_1kbkUe4OPK2ILVvNaoa7pLzYWqLUAmx6Sjq1E7pKHrVAtuG0_1MPkqmDfOkm2750kaLWNk59DS-iDOpjjxompJtXa3WhbN5FKRWNhADAVAR", "expires_in": 7200 }
五、經過access_token羣發短信
在公衆平臺網站上,爲訂閱號提供了天天一條的羣發權限,爲服務號提供每個月(天然月)4條的羣發權限。而對於某些具有開發能力的公衆號運營者,能夠經過高級羣發接口,實現更靈活的羣發能力。
請注意:
1、對於認證訂閱號,羣發接口天天可成功調用1次,這次羣發可選擇發送給所有用戶或某個分組; 2、對於認證服務號雖然開發者使用高級羣發接口的每日調用限制爲100次,可是用戶每個月只能接收4條,不管在公衆平臺網站上,仍是使用接口羣發,用戶每個月只能接收4條羣發消息,多於4條的羣發將對該用戶發送失敗; 三、具有微信支付權限的公衆號,在使用羣發接口上傳、羣發圖文消息類型時,可以使用<a>標籤加入外鏈; 四、開發者可使用預覽接口校對消息樣式和排版,經過預覽接口可發送編輯好的消息給指定用戶校驗效果。
1)根據分組進行羣發【訂閱號與服務號認證後都可用】
調用接口:
http請求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN
在body添加以下數據(以JSON格式數據發送)——發送其餘格式數據,只須要改裏面參數信息便可,具體可查看微信官方文檔:
{ "filter":{ "is_to_all":false, "group_id":2 }, "text":{ "content":"CONTENT" }, "msgtype":"text" }
參數說明:
參數 | 是否必須 | 說明 |
---|---|---|
filter | 是 | 用於設定圖文消息的接收者 |
is_to_all | 否 | 用於設定是否向所有用戶發送,值爲true或false,選擇true該消息羣發給全部用戶,選擇false可根據group_id發送給指定羣組的用戶 |
group_id | 否 | 羣發到的分組的group_id,參加用戶管理中用戶分組接口,若is_to_all值爲true,可不填寫group_id |
mpnews | 是 | 用於設定即將發送的圖文消息 |
media_id | 是 | 用於羣發的消息的media_id |
msgtype | 是 | 羣發的消息類型,圖文消息爲mpnews,文本消息爲text,語音爲voice,音樂爲music,圖片爲image,視頻爲video,卡券爲wxcard |
title | 否 | 消息的標題 |
description | 否 | 消息的描述 |
thumb_media_id | 是 | 視頻縮略圖的媒體ID |
例子:發送給全部人
url:
https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=KBoNONaJZ4-KhafQVJoQ6VBX0F-bls7nAsJBn8Fy7GLwav4Be1lRJcob1RHH6wW35IxxFwkJnZfnc-On9EQITg3oxEWUw7O2YyVW9naDknu6PQX9fnSmQcr8ojTK8Ug-HDTcAAABXN
發送的json數據:發送給全部人
{ "filter":{ "is_to_all":true }, "text":{ "content":"CONTENT" }, "msgtype":"text" }
返回數據:
{ "errcode": 0, "errmsg": "send job submission success", "msg_id": 1000000003 }
參數意義:
參數 | 說明 |
---|---|
type | 媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb),圖文消息爲news |
errcode | 錯誤碼 |
errmsg | 錯誤信息 |
msg_id | 消息發送任務的ID |
msg_data_id | 消息的數據ID,該字段只有在羣發圖文消息時,纔會出現。能夠用於在圖文分析數據接口中,獲取到對應的圖文消息的數據,是圖文分析數據接口中的msgid字段中的前半部分,詳見圖文分析數據接口中的msgid字段的介紹。 |
錯誤碼及其以及查詢:
使用postman模擬https請求發送以下圖所示:
2)根據OpenID列表羣發【訂閱號不可用,服務號認證後可用】
發送的http請求url:(注意:和上面的不一樣)
http請求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN
數據格式:
{ "touser":[ "OPENID1", "OPENID2" ], "msgtype": "text", "text": { "content": "hello from boxer."} }
其中 OPENID1和OPENID2是咱們要發送的微信用戶openId(用戶的惟一標示)。
例子:
發送"oF3PcsnsrMiJzEwalZZbAfWQpxCI","oF3PcshH1CUIhR_WYau6swUiPzlw" 兩個用戶。
內容爲:hello from boxer.<a href='www.baidu.com'>歡迎來到百度</a>
url:
https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=wRyTbnsiu18ssEhMPLf4bDfeT-Bt6e6tgR4CQGVLBipRcyJPkdAKPYfM6-qkKuHUN8uRKJh6Xvm0OuAdFgqOo8Ru8hoDxl-cGc9bh-ezJb2ZUcJSnQk2s416zI8kbEOfOGYdAFARJB
json數據:
{ "touser":[ "oF3PcsnsrMiJzEwalZZbAfWQpxCI", "oF3PcshH1CUIhR_WYau6swUiPzlw" ], "msgtype": "text", "text": { "content": "hello from boxer.<a href='http://www.seewoedu.com/'>歡迎希沃學院</a>"} }
返回數據:
{ "errcode": 0, "errmsg": "send job submission success", "msg_id": 3147483654 }
使用postman模擬發送請求以下:
微信號接收到的內容:
相關微信開發:
致謝:感謝您的閱讀!轉文請加上原文連接。謝謝! 接外包開發