微信公众平台开发笔记4(关注回复自定义消息)

基于WXJava开发,最终目的:实现关注回复自定义消息(一条文本、一条图片),点击菜单发送视频或音频。音乐可以发送但是不能正常播放,猜测是填写的地址有问题。音频上传时需要先在接口测试平台多媒体文件上传接口上传缩略图(jpeg)

新建WxMessageService类

@Service
@Slf4j
public class WxMessageService {

    @Autowired
    private WxMpService wxService;

    @Autowired
    private WxMpQrcodeService qrcodeService;

    @Autowired
    private WxMpMaterialService materialService;

    @Autowired
    private WxMpKefuService wxMpKefuService;


    public String messageHandler(WxMpXmlMessage inMessage) throws WxErrorException {
        String out = null;
        String msgType = inMessage.getMsgType();
        log.info("[AN MESSAGE TYPE] - {} ", msgType);
        switch (msgType) {
            case "text":
                if (inMessage.getContent().startsWith("二维码-")){
                    try {
                        String name = inMessage.getContent().substring(4);
                        WxMpQrCodeTicket ticket = qrcodeService.qrCodeCreateTmpTicket(name, 2592000);
                        File qrPic = qrcodeService.qrCodePicture(ticket);
                        out = generateImgOutMessage(inMessage, qrPic);
                    } catch (WxErrorException e) {
                        e.printStackTrace();
                    }
                }
                else if(inMessage.getContent().contains("你好")){
                    out = generateTextOutMessage(inMessage, inMessage.getContent());
                }else if(inMessage.getContent().contains("客服")){
                    out = generateTextOutMessage(inMessage, "如您需要帮助请联系客服,联系电话:12345678910");
                }else if(inMessage.getContent().contains("视频")){
                    File in = new File("D:\\1111_Trim.mp4");
                    out = generateVideoOutMessage(inMessage, in);
                }else if(inMessage.getContent().contains("音乐")){
                    File in = new File("D:\\11111.jpeg");
                    out = generateMusicOutMessage(inMessage, in);
                }
                else {
                    out = generateTextOutMessage(inMessage, "这是文本消息");
                }
                break;
            case "event":
                String event = inMessage.getEvent();
                String key = inMessage.getEventKey();
                log.info("[AN EVENT MESSAGE] - {}", event);
                if (event.equals("subscribe")) {
                    WxMpKefuMessage message = new WxMpKefuMessage();
                    message.setContent("感谢您的关注!");
                    message.setMsgType("text");
                    message.setToUser(inMessage.getFromUser());
                    wxMpKefuService.sendKefuMessage(message);
                    WxMpQrCodeTicket ticket = qrcodeService.qrCodeCreateTmpTicket("猪八戒吃西瓜", 2592000);
                    File qrPic = qrcodeService.qrCodePicture(ticket);
                    out = generateImgOutMessage(inMessage, qrPic);
                } else if (event.equals("SCAN")) {
                    log.info("{} - 你好", inMessage.getEventKey());
                    out = generateTextOutMessage(inMessage, inMessage.getEventKey());
                } else if (event.equals("CLICK")) {
                    if(key.equals("video")){

                        log.info("{} - Music", inMessage.getEventKey());
                        File in = new File("D:\\1111_Trim.mp4");
                        out = generateVideoOutMessage(inMessage, in);


                    }else if(key.equals("music")){
                        log.info("{} - 每日推荐", inMessage.getEventKey());
                        File in = new File("D:\\11111.jpeg");
                        out = generateMusicOutMessage(inMessage, in);
                        //out = generateTextOutMessage(inMessage,  "<大力水手>");
                    }

                }
                break;
            case "image":
                out = generateTextOutMessage(inMessage, "这是图片消息");
                break;
            case "voice":
                out = generateTextOutMessage(inMessage, "这是语音消息");
                break;
            case "video":
                out = generateTextOutMessage(inMessage, "这是视频消息");
                break;
            case "shortvideo":
                out = generateTextOutMessage(inMessage, "这是短视频消息");
                break;
            case "location":
                out = generateTextOutMessage(inMessage, "这是地理位置消息");
                break;
            case "link":
                out = generateTextOutMessage(inMessage, "这是链接消息");
                break;
            default:
                out = "success";
        }
        return out;
    }

    private String generateTextOutMessage(WxMpXmlMessage inMessage, String content) {
        WxMpXmlOutTextMessage textMessage = WxMpXmlOutTextMessage.TEXT()
                                                .toUser(inMessage.getFromUser())
                                                .fromUser(inMessage.getToUser())
                                                .content(content)
                                                .build();
        return textMessage.toXml();
    }

    private String generateImgOutMessage(WxMpXmlMessage inMessage, File img) {
        WxMediaUploadResult result = null;
        try {
            result = materialService.mediaUpload("image", img);
        } catch (WxErrorException e) {
            e.printStackTrace();
        }
        WxMpXmlOutImageMessage outImageMessage = WxMpXmlOutImageMessage.IMAGE()
            .toUser(inMessage.getFromUser())
            .fromUser(inMessage.getToUser())
            .mediaId(result.getMediaId())
            .build();
        return outImageMessage.toXml();
    }

    /**
     * @Description: TODO 点击菜单回复视频消息
     * @author: chenhf
     * @date: 2023/7/5 11:29
     * @param: [inMessage, video]
     * @return: java.lang.String
     **/
    private String generateVideoOutMessage(WxMpXmlMessage inMessage, File video) {
        WxMediaUploadResult result = null;
        try {
            result = materialService.mediaUpload(WxConsts.MediaFileType.VIDEO, video);
        } catch (WxErrorException e) {
            e.printStackTrace();
        }
        assert result != null;
        WxMpXmlOutVideoMessage outVideoMessage = WxMpXmlOutVideoMessage.VIDEO()
                .toUser(inMessage.getFromUser())
                .fromUser(inMessage.getToUser())
                .title("洛水之神--片头")
                .description("视频消息")
                .mediaId(result.getMediaId())
                .build();
        return outVideoMessage.toXml();
    }

    /**
     * @Description: TODO 点击回复音乐
     * @author: chenhf
     * @date: 2023/7/5 10:13
     * @param: [inMessage, music]
     * @return: java.lang.String
     **/
    private String generateMusicOutMessage(WxMpXmlMessage inMessage, File music) {
        WxMediaUploadResult result = null;
        try {
            result = materialService.mediaUpload(WxConsts.MediaFileType.THUMB, music);
        } catch (WxErrorException e) {
            e.printStackTrace();
        }
        assert result != null;
        String classes_path = ClassUtils.getDefaultClassLoader().getResource("").getPath();
        File classes = new File(classes_path);
        // web-inf目录
        File webInf = classes.getParentFile();
        // 项目目录
        File packageName = webInf.getParentFile();
        // tomcat webapps 目录
        String webapps = packageName.getParent();
        // tomcat 下的文件路径
        File tomcatPath = new File(webapps+File.separator+"纯吉他曲子---和煦的风.mp3");
        String path =tomcatPath.getPath();
        //String path = classes_path+File.separator+"纯吉他曲子---和煦的风.mp3";
        WxMpXmlOutMusicMessage outMusicMessage = WxMpXmlOutMusicMessage.MUSIC()
                .toUser(inMessage.getFromUser())
                .fromUser(inMessage.getToUser())
                .title("纯吉他曲子---和煦的风")
                .description("音乐消息")
                .musicUrl(path)
                .hqMusicUrl(path)
                .thumbMediaId(result.getThumbMediaId())
                .build();
        return outMusicMessage.toXml();
    }


}

 修改WxPortalController

 需要注意的是:

接收微信请求

接收微信请求:[openid=[oEAz66Rby2HT7OSsHk8m9bZemSoc], [signature=[316236c773c7309cbf8523e18a15a4e410f4fa93], encType=[null], msgSignature=[null], timestamp=[1689233969], nonce=[1223137028], requestBody=[
<xml><ToUserName><![CDATA[gh_c4d62187395d]]></ToUserName>
<FromUserName><![CDATA[oEAz66Rby2HT7OSsHk8m9bZemSoc]]></FromUserName>
<CreateTime>1689233969</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[music]]></EventKey>
</xml>
]

以上完成就能用测试号试验能不能正常收发消息了

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值