微信公众号之被动消息回复和客服消息

本文为博主原创 转载请注明出处 尊重笔者劳动成果 十分感谢

场景:用户关注公众号后给用户回复一个消息

 效果如下:

 

实现公众号和用户产生特定动作的交互有两种方式可以实现:

1. 被动回复用户消息

2. 客服消息

这两种有何不同呢? 被动消息回复本质是对微信服务器发过来消息的一次回复。因此需要开发者在5秒内做出响应 否则将会提示“该公众号暂时无法提供服务” 而客服消息其实是一个接口 当不能保证5秒内对为微信服务器响应的时候可以先回复“success”然后调用发送客服消息异步发送消息

注意:客服消息是有次数限制的!!! 具体查看接口权限处的次数 且开发者收到微信服务的推送在48小时内可以调用客服接口

发送客服消息需要先检查公众号是否有客服消息权限 查看客服消息权限可以在微信公众号控制台 最后一个接口权限查看,如下图:

 下面附上被动消息回复以及客服消息的代码 此处被动消息未做排重处理

被动消息回复

1.构造一个消息 例如文本消息

2.响应消息 即发送消息给微信服务器

定义一个消息类型枚举类

package com.net.wx;

/**
 * 被动回复消息类型
 * Created by zhangq on 2019/1/23.
 */
public enum MessageType {
    TEXT,IMAGE,VOICE,VIDEO,MUSIC,NEWS
}

 编写构造消息的工具类 注意此处的字段 FromUserName 和 ToUserName 这两个数据来自微信服务器给开发者服务器推送的XML中的字段,因此响应微信服务器消息的时候,发送方和接受方反过来即可

package com.net.wx;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.json.JSONObject;

import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 构造被动回复工具类
 * Created by zhangq on 2019/1/23.
 */
public class MessageUtil {

    /**
     * 根据消息类型 构造返回消息数据
     * @param jsonObject 承装消息数据
     * @param msgType 消息类型  取自消息类型枚举类
     * @return 构造后消息数据结构
     */
    public static String buildXml(JSONObject jsonObject, MessageType msgType) {
        String result = "";
        switch (msgType) {
            case TEXT:
                result =buildTextMessage(jsonObject);
                break;
            case IMAGE:
                result =buildImageMessage(jsonObject);
                break;
            case NEWS:
                result =buildNewsMessage(jsonObject);
                break;
            default:
                break;
        }
        return result;
    }


    /**
     * 构造文本消息
     * @param json 文本消息参数
     * @return String
     */
    private static String buildTextMessage(JSONObject  json) {
        String fromUserName = json.get("FromUserName").toString();
        String toUserName = json.get("ToUserName").toString();
        String content = json.get("content").toString();

        return String.format("<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>",
                fromUserName, toUserName, g
### PHP 实现微信公众号被动回复图片的方法 为了通过PHP实现微信公众号被动回复图片功能,需遵循特定的消息结构接口调用方式。当接收到用户的请求时,应解析XML格式的数据包并构建相应的响应。 #### 解析接收消息 在处理来自微信服务器的消息前,先要对接收的信息进行解码: ```php $postStr = file_get_contents('php://input'); if (!empty($postStr)){ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); } ``` 此段代码读取POST过来的内容,并将其转换成可操作的对象形式[^2]。 #### 构建图像回复消息体 对于发送图片类型的回复,需要按照指定的XML模板来创建回应内容。以下是用于构造此类响应的具体方法: ```php function responseImageMsg($toUser, $fromUser, $mediaId){ $time = time(); $msgType = "image"; $template = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%d</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Image> <MediaId><![CDATA[%s]]></MediaId> </Image> </xml>"; return sprintf($template, $toUser, $fromUser, $time, $msgType, $mediaId); } ``` 上述函数接受三个参数:目标用户ID (`$toUser`)、源用户ID(`$fromUser`), 媒体文件标识符(`$mediaId`). 它们共同组成了完整的XML字符串表示形式. #### 设置Access Token 值得注意的是,在实际应用过程中可能还需要定期更新 `access_token`, 以便能够正常使用微信公众平台所提供的API服务。通常来说,这一步骤涉及向官方提供的URL发起HTTP GET请求以换取最新的访问令牌[^3]: ```php $appid = 'YOUR_APP_ID'; $secret = 'YOUR_APP_SECRET'; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}"; $response = json_decode(file_get_contents($url)); $accessToken = $response->access_token; ``` 不过请注意,这里的 `$mediaId` 需要在上传多媒体素材之后由微信端返回获得,而不仅仅是简单的字符串替换。 最后,确保已正确设置了回调验证中的Token值以及URL路径指向自己的服务器地址[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值