1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jfinal-jfinal-weixin

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 12 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 04.03.2025 02:37 3c7057a

JFinal Weixin Быстрое развитие

JFinal Weixin — это библиотека для быстрого развития приложений с использованием JFinal, основанная на WeChat. Для начала работы достаточно просмотреть примеры в демонстрационной части. Поддержка нескольких аккаунтов была добавлена начиная с версии 1.2.

Адрес документации

Документация: https://gitee.com/jfinal/jfinal-weixin/wikis

0. Maven координаты

<dependency>
    <groupId>com.jfinal</groupId>
    <artifactId>jfinal-weixin</artifactId>
    <version>3.4</version>
</dependency>

1. Конфигурация WeixinConfig

Подробнее здесь: Конфигурация WeixinConfig в JFinal weixin

2. WeixinMsgController

public class WeixinMsgController extends MsgController {
    protected void processInTextMsg(InTextMsg inTextMsg) {
        String msgContent = inTextMsg.getContent().trim();
        // Помощь
        if ("help".equalsIgnoreCase(msgContent)) {
            OutTextMsg outMsg = new OutTextMsg(inTextMsg);
            outMsg.setContent(helpStr);
            render(outMsg);
        }
        // Тест сообщения с картинками
        else if ("news".equalsIgnoreCase(msgContent)) {
            OutNewsMsg outMsg = new OutNewsMsg(inTextMsg);
            outMsg.addNews("Заголовок", "Описание", "Ссылка на изображение", "Ссылка");
            render(outMsg);
        }
        // Тест музыкального сообщения
        else if ("music".equalsIgnoreCase(msgContent)) {
            OutMusicMsg outMsg = new OutMusicMsg(inTextMsg);
            outMsg.setTitle("Day By Day");
            outMsg.setDescription("Рекомендовано прослушивание в условиях Wi-Fi");
            outMsg.setMusicUrl("https://jfinal.com/DayByDay-T-ara.mp3");
            outMsg.setHqMusicUrl("https://jfinal.com/DayByDay-T-ara.mp3");
            outMsg.setFuncFlag(true);
            render(outMsg);
        } else if ("美女".equalsIgnoreCase(msgContent)) {
            OutNewsMsg outMsg = new OutNewsMsg(inTextMsg);
            outMsg.addNews("秀色可餐", "JFinal Weixin Быстрое развитие так удобно, есть ли?", "http://mmbiz.qpic.cn/mmbiz/zz3Q6WSrzq2GJLC60ECD7rE7n1cvKWRNFvOyib4KGdic3N5APUWf4ia3LLPxJrtyIYRx93aPNkDtib3ADvdaBXmZJg/0", "http://mp.weixin.qq.com/s?__biz=MjM5ODAwOTU3Mg==&mid=200987822&idx=1&sn=7eb2918275fb0fa7b520768854fb7b80#rd");
            render(outMsg);
        }
        // Возврат других текстовых сообщений с помощью помощи
        else {
            OutTextMsg outMsg = new OutTextMsg(inTextMsg);
            outMsg.setContent("\tТекстовое сообщение успешно получено, содержание: " + inTextMsg.getContent() + "\n\n" + helpStr);
            render(outMsg);
        }
    }

    protected void processInImageMsg(InImageMsg inImageMsg) {
        OutImageMsg outMsg = new OutImageMsg(inImageMsg);
        // Возвращаем полученное изображение обратно
        outMsg.setMediaId(inImageMsg.getMediaId());
        render(outMsg);
    }

    protected void processInVoiceMsg(InVoiceMsg inVoiceMsg) {
        OutVoiceMsg outMsg = new OutVoiceMsg(inVoiceMsg);
        // Возвращаем полученное голосовое сообщение обратно
        outMsg.setMediaId(inVoiceMsg.getMediaId());
        render(outMsg);
    }

    protected void processInVideoMsg(InVideoMsg inVideoMsg) {
        /* Tencent API имеет ошибку, поэтому невозможно отправить видео сообщение. Временно используем текстовое сообщение для тестирования
        OutVideoMsg outMsg = new OutVideoMsg(inVideoMsg);
        outMsg.setTitle("Отправка OutVideoMsg");
        outMsg.setDescription("Полученное видео отправлено обратно");
        // Отправляем полученное видео обратно, но проверка показывает, что проблема в официальном API Tencent
        outMsg.setMediaId(inVideoMsg.getMediaId());
        render(outMsg);
        */
        OutTextMsg outMsg = new OutTextMsg(inVideoMsg);
        outMsg.setContent("\tВидео сообщение успешно получено, mediaId этого видео: " + inVideoMsg.getMediaId());
        render(outMsg);
    }

    protected void processInLocationMsg(InLocationMsg inLocationMsg) {
        OutTextMsg outMsg = new OutTextMsg(inLocationMsg);
        outMsg.setContent("Получено геолокационное сообщение:"
                + "\nlocation_X = " + inLocationMsg.getLocation_X()
                + "\nlocation_Y = " + inLocationMsg.getLocation_Y()
                + "\nscale = " + inLocationMsg.getScale()
                + "\nlabel = " + inLocationMsg.getLabel());
        render(outMsg);
    }

    protected void processInLinkMsg(InLinkMsg inLinkMsg) {
        OutNewsMsg outMsg = new OutNewsMsg(inLinkMsg);
        outMsg.addNews("Ссылочное сообщение успешно получено", "Ссылка отправлена вам в виде новостей, также можно использовать текстовый способ отправки.", "http://mmbiz.qpic.cn/mmbiz/zz3Q6WSrzq1ibBkhSA1BibMuMxLuHIvUfiaGsK7CC4kIzeh178IYSHbYQ5eg9tVxgEcbegAu22Qhwgl5IhZFWWXUw/0", inLinkMsg.getUrl());
        render(outMsg);
    }

    protected void processInFollowEvent(InFollowEvent inFollowEvent) {
        OutTextMsg outMsg = new OutTextMsg(inFollowEvent);
        outMsg.setContent("Благодарю за подписку на JFinal Weixin Быстрое развитие, которое экономит ваше время." + helpStr);
        // Если событие отмены подписки, то информация не будет передана обратно
        render(outMsg);
    }

    protected void processInQrCodeEvent(InQrCodeEvent inQrCodeEvent) {
        OutTextMsg outMsg = new OutTextMsg(inQrCodeEvent);
        outMsg.setContent("Метод processInQrCodeEvent() успешно протестирован");
        render(outMsg);
    }

    protected void processInLocationEvent(InLocationEvent inLocationEvent) {
        OutTextMsg outMsg = new OutTextMsg(inLocationEvent);
        outMsg.setContent("Метод processInLocationEvent() успешно протестирован");
        render(outMsg);
    }

    protected void processInMenuEvent(InMenuEvent inMenuEvent) {
        OutTextMsg outMsg = new OutTextMsg(inMenuEvent);
        outMsg.setContent("Метод processInMenuEvent() успешно протестирован");
        render(outMsg);
    }

    protected void processInSpeechRecognitionResults(InSpeechRecognitionResults inSpeechRecognitionResults) {
        OutTextMsg outMsg = new OutTextMsg(inSpeechRecognitionResults);
        outMsg.setContent("Метод processInSpeechRecognitionResults() успешно протестирован");
        render(outMsg);
    }
}

DemoController наследует методы WeixinController для удобства получения и отправки сообщений

3. WeixinApiController

public class WeixinApiController extends ApiController {
    public void index() {
        render("/api/index.html");
    }

    /**
     * Получение меню публичного аккаунта
     */
    public void getMenu() {
        ApiResult apiResult = MenuApi.getMenu();
        if (apiResult.isSucceeded()) {
            renderText(apiResult.getJson());
        } else {
            renderText(apiResult.getErrorMsg());
        }
    }

    /**
     * Получение подписчиков публичного аккаунта
     */
    public void getFollowers() {
        ApiResult apiResult = UserApi.getFollows();
        renderText(apiResult.getJson());
    }
}

Используя методы таких как MenuApi и UserApi, вы можете получить данные, упакованные в объект ApiResult, который затем может быть быстро выведен с помощью методов render

4. Два способа получения всех зависимых jar файлов для пользователей, не использующих Maven

  • Импортировать проект в Eclipse JEE и использовать функцию экспорта для создания WAR файла, где зависимости будут автоматически созданы в WEB-INF/lib
  • Убедиться, что ваши друзья используют Maven для сборки WAR файла, где зависимости будут автоматически созданы в WEB-INF/lib
  • Оба этих подхода требуют установки типа экспорта в WAR, добавив <packaging>war</packaging> в pom.xml
  • Зависит от Jackson или FastJSON## 5. Подробное описание зависимостей jar файлов Подробнее здесь: JFinal weixin Jar зависимости

6. WIKI постоянно обновляется

WIKI: http://git.oschina.net/jfinal/jfinal-weixin/wikis/home

Приветствуем новых участников!

7. Настройка среды разработки и отладки

В процессе разработки важно иметь канал связи между локальной машиной разработчика и платформой WeChat для эффективного отладки. Без такого канала каждый новый функционал придется разворачивать на общедоступном сервере для тестирования.

Настройка среды разработки и отладки подробно описана в моем блоге: Перейти Также доступна в документации jfinal-weixin: Перейти

Кроме того: если ваша машина разработки использует Linux или MacOS, вы можете создать обратный туннель с помощью следующей команды SSH: ssh -R <remote_host_ip>:<port>:localhost:<local_port> root@<remote_host_ip>

8. Дополнительная поддержка

  • Официальный сайт JFinal: https://jfinal.com
  • Быстрый вход в JFinal-weixin через Spring Boot: https://gitee.com/596392912/mica-weixin
  • Подпишитесь на официальный WeChat аккаунт для немедленного использования демонстрационных функций JFinal Weixin SDK

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/jfinal-jfinal-weixin.git
git@api.gitlife.ru:oschina-mirror/jfinal-jfinal-weixin.git
oschina-mirror
jfinal-jfinal-weixin
jfinal-jfinal-weixin
master