이 기사는 주로 WeChat 공개 플랫폼의 대량 메시징 개발을 소개합니다. 여기에서는 WeChat 공개 플랫폼의 대량 메시징 프로세스를 설명하기 위해 여기에 정리했습니다.
1. 목적
위챗 공식 계정에서 단체 메시지 발송이 완료되었습니다. 여기까지만 하면 간단한 문자 전송이 완료됩니다. 음성 사진 등을 보낼 수도 있지만 데이터 형식이 다릅니다. 데이터 형식의 데이터 전송 형식을 쿼리하려면 아래 링크가 있습니다.
2. 그룹 문자 발송 과정
테스트 공개 계정 받기(계정이 있는 분은 테스트 계정이 필요하지 않습니다.) , 그러나 공식 계정에는 더 많은 제한이 있습니다 )
사용자는 위의 공개 계정을 따릅니다
appid 및 appsecret을 통해 access_token을 받으세요
access_token을 통해 그룹 문자 메시지 보내기
3. 테스트 공개 계정 받기 + 공개 계정 팔로우
1) 공개 테스트 계정을 받으세요
위 링크에 접속해 '인터페이스 테스트 번호 신청'을 선택하면 http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo가 바로 열립니다. ?action=showinfo&t=sandbox/index via WeChat 고객 로그인하려면 QR 코드를 스캔하세요.
로그인 후 테스트 공개 계정 정보를 확인하실 수 있습니다. 공식 계정을 고유하게 식별하는 매개변수는 주로 appId와 appsecret 두 가지가 있으며, 이를 사용자 정보를 얻기 위한 매개변수로 사용해야 합니다. ,
2) 인터페이스 정보 구성
이 단계에서는 WeChat 액세스 지침을 참조할 수 있습니다. 이 페이지에서는 PHP 예제 다운로드를 제공합니다. 매우 간단하고 기본적으로 사용자 정의 TOKEN을 수정한 다음 자체 서버에 확인 페이지를 넣기만 하면 됩니다.
여기에 제가 수행한 작업의 예가 나와 있습니다.
리소스 준비:
도메인 이름 + 공백(내 것은 sae 공백 + Wanwang 도메인 이름), 확인용 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; } } } ?>
를 생성했습니다. 도메인 이름을 입력한 후 구성 정보 토큰(위 wx_sample.php의 토큰과 일치해야 함), URL(wx_sample.php 주소)
을 입력한 후 제출하세요.
프롬프트가 실패하면 토큰과 URL을 확인하세요. [자신의 도메인 이름과 공간인 경우 파일을 제출하세요. Baidu sae와 Sina sae는 직접 신청하고 인증을 받아야 합니다. 신분증을 들고 있는 손 사진을 업로드하세요. 매우 간단하고 최단 2일 소요됩니다. 이 단계가 필요합니다.]
3) JS 인터페이스 보안 도메인 이름 구성
이 도메인 이름을 입력할 때 프로토콜을 포함하지 마십시오(예: http://www.sagosoft.com/). 이것은 잘못된 것입니다. 도메인 이름이 아닙니다.
도메인 이름 www.sagosoft.com과 유사해야 합니다. [그렇지 않으면 WeChat js-sdk에 액세스할 때 잘못된 URL 도메인이 표시됩니다.]
4) 공개 계정 팔로우
공개 계정을 팔로우해야만 사용자는 공개 계정 정보로 링크를 열어 제3자 로그인을 승인하고 사용자 정보를 얻을 수 있습니다. 따라서 위챗 ID를 따라가려면 위챗을 사용해야 합니다.
로그인에 성공한 후에도 여전히 점프한 페이지입니다. QR 코드를 스캔할 수 있습니다. QR 코드를 따라가면 오른쪽의 "사용자 목록"에 사용자 정보가 한 명 더 표시됩니다. 아래 그림과 같습니다.
5) 콜백 기능 구성
타사 웹 페이지(예: 당사 자체 웹 페이지)에 액세스합니다. ) WeChat 클라이언트에서 WeChat을 사용할 때 WeChat 웹 페이지 인증 메커니즘을 사용할 수 있습니다. 이전에 얻은 appid 및 appsecret이 필요할 뿐만 아니라 사용자가 인증한 후 콜백에 대한 도메인 이름 설정도 필요합니다. 사용자가 승인한 후 페이지가 이동하는 위치입니다. 구체적인 구성은 다음과 같습니다.
아직 페이지에 "사용자 기본 정보를 얻기 위한 웹페이지 승인"이 있습니다.
뒤에 있는 수정 사항을 클릭하세요.콜백 도메인 이름 입력:
위의 "인터페이스 구성 정보"에 입력한 URL이 zcr.sinaaappc.com/wx_sample.php인 경우 도메인 이름은 위에서 구성한 루트 도메인 이름입니다. , 여기에 zcr.sinaaappc를 입력하면 됩니다.
블랙리스트에 등록되지 않은 URL은 상단에 표시됩니다.
참고:
1. 여기에는 URL이 아닌 도메인 이름(문자열)이 입력되므로 http://와 같은 프로토콜 헤더를 추가하지 마세요.
2. 콜백 도메인 이름 구성 사양은 전체 도메인 이름입니다. 예를 들어 웹 페이지 인증이 필요한 도메인 이름은 www.qq.com입니다. 구성 후 이 도메인 이름 아래의 페이지는 http://www.qq.com/입니다. music.html 및 http://www.qq .com/login.html은 OAuth2.0 인증을 수행할 수 있습니다. 하지만 ttp://pay.qq.com, http://music.qq.com, http://qq.com에서는 OAuth2.0 인증을 수행할 수 없습니다
이제 끝났습니다. 공개 계정 테스트 계정을 획득하고 구성한 후 사용자는 이미 WeChat 공개 계정을 팔로우했습니다.
4. 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 |
반환 설명
일반적인 상황에서 WeChat은 다음 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=wx41cb8dbd827a16e9&secret=d4624c36b6795d1d99dcf0547af5443d
返回数据:
{ "access_token": "qR5UK2vMf5aTHV8e-uB10FZW0caTZm_1kbkUe4OPK2ILVvNaoa7pLzYWqLUAmx6Sjq1E7pKHrVAtuG0_1MPkqmDfOkm2750kaLWNk59DS-iDOpjjxompJtXa3WhbN5FKRWNhADAVAR", "expires_in": 7200 }
5、通过access_token群发短信
在公众平台网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限。而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发能力。
请注意:
1、对于认证订阅号,群发接口每天可成功调用1次,此次群发可选择发送给全部用户或某个分组;
2、对于认证服务号虽然开发者使用高级群发接口的每日调用限制为100次,但是用户每月只能接收4条,无论在公众平台网站上,还是使用接口群发,用户每月只能接收4条群发消息,多于4条的群发将对该用户发送失败;
3、具备微信支付权限的公众号,在使用群发接口上传、群发图文消息类型时,可使用标签加入外链;
4、开发者可以使用预览接口校对消息样式和排版,通过预览接口可发送编辑好的消息给指定用户校验效果。
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.欢迎来到百度
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.php.cn/‘>欢迎希沃学院</a>"} }
返回数据:
{ "errcode": 0, "errmsg": "send job submission success", "msg_id": 3147483654 }
使用postman模拟发送请求如下:
微信号接收到的内容:
更多WeChat 공개 플랫폼 개발 - 그룹 메시징相关文章请关注PHP中文网!