Брат, твой заказ прибыл

Апплет WeChat

Соответствующий кодовый адрес этой статьи:githubОригинальная ссылка:Оригинальная ссылка

Типы мини-сообщений программы Push

  • Подписаться на новости
  • Шаблон сообщения
  • Единая служба обмена сообщениями
  • Сообщение службы поддержки клиентов

из-заШаблон сообщенияне в сети, пример сообщения здесьПодписаться на новости

Чтобы реализовать сообщение о подписке, нам нужно знать значения параметров нескольких небольших программ.

  • апплет

  • ключ апплета

  • Идентификатор шаблона подписки на мини-программу (template_id)

Вышеуказанные параметры могут быть вОпыт управления небольшими программаминайти на

апплет

  • Перед разработкой необходимо получить идентификатор шаблона настройки апплета.Если шаблон сообщения не установлен, вы можете добавить новый шаблонmp.weixin.qq.com

  • После того, как у вас есть идентификатор шаблона, вам необходимо получить разрешение на отправку сообщений

Разрешение пользователя на отправку push-сообщений

Когда заказ или другие операции завершены, вызовите апплет на стороне клиента, чтобы подписаться на интерфейс сообщений и получить результат операции пользователя.

// index.wxml
<button bindtap="bindSubscribeMessage"> 获取下发权限 </button>

// index.js
bindSubscribeMessage() {
  wx.requestSubscribeMessage({
    tmplIds: ['tmplIds'],
    success (res) { 
      console.log(res)
      }
  })
}

отправить код пользователя

Поскольку серверу отправки сообщений нужен апплетopenidИтак, нам нужно пройтиwx.loginАпплет входа будетcodeотправить на сервер

bindLogin() {
  /* 1. 获取code 请求开发服务器 
    * 2. 开发服务器通过 code + appid + secret 请求微信服务器获取 openid
    */
  wx.login({
    success: res => {
      if (res.code) {
        const { task } = this.data;
        this.request(Object.assign(task, { code: res.code }));
      }
    }
  });
}

Сервер

Здесь, поскольку он имитирует сам сервер, я используюKoaЧтобы реализовать базовый процесс, другие внутренние процессы реализации должны быть такими же.

Поскольку для push-сообщений требуется апплетaccess_tokenа такжеopenid, поэтому нам сначала нужно получить эти два параметра

Получить процесс

流程

Получить код параметра апплета на стороне клиента

Отправить интерфейс через клиентapp/sendполучить параметрыcode

function getBodyMessage(ctx) {
  const { body } = ctx.request;
  return body;
}

получить openid

пройти черезcode + secret(小程序密钥) + appidПолучатьopenid

function getOpenId(js_code) {
 return new Promise(resolve => {
   http(
	{
	  url: `https://api.weixin.qq.com/sns/jscode2session`,
	  method: 'get',
      qs: {
    		grant_type: 'authorization_code',
    		js_code,
    		appid: APP.appid,
    		secret: APP.secret
    	},
    	json: true //设置返回的数据为json
     },
     (error, response, body) => {
    	if (!error && response.statusCode == 200) {
    		resolve(body);
    	}
     });
 });
}

получить access_token

function getAccessToken() {
	return new Promise(resolve => {
		http(
			{
				url: `${WX_API}/token`,
				method: 'get',
				qs: {
					grant_type: 'client_credential', // 注意 type 类型
					appid: APP.appid,
					secret: APP.secret
				},
				json: true //设置返回的数据为json
			},
			(error, response, body) => {
				if (!error && response.statusCode == 200) {
					const { access_token } = body;
					resolve(access_token);
				}
			}
		);
	});
}

вперед новости

мы получилиopenidа такжеaccess_tokenЗатем вы можете отправить сообщение пользователю

function sendMessage({ access_token, openid, msg }) {
	const requestData = {
		touser: openid,
    template_id: APP.template_id,
    // 模板消息属性和属性值需要注意内容限制
		data: {
			thing1: {
				value: msg.taskName
			},
			thing10: {
				value: msg.remarks
			},
			thing9: {
				value: msg.className
			}
		}
  };
  console.log(requestData);
	return new Promise((resolve, reject) => {
		http(
			{
			    // 注意 access_token 需要在接口形式传送 
				url: `${WX_API}/message/subscribe/send?access_token=${access_token}`,
				headers: {
					'content-type': 'application/json'
				},
				method: 'post',
				body: requestData, // 需要注意是放在 body 上,而不是 form 上
				json: true // 设置返回的数据为json
			},
			(error, response, body) => {
				if (!error && response.statusCode == 200) {
					resolve(body);
				} else {
					reject();
				}
			}
		);
	});
}

Здесь нам нужноУведомление:

  • Шаблон доставленного сообщения должен обращать внимание на ограничение содержания значения параметра сообщения о подписке.Ссылаться на

  • Выдано атрибуты сообщения шаблона

  • В режиме разработки разрешить отправку сообщения за раз

  • запуск бэкэндаnpm run dev

добиться эффекта

2020-03-05 Обновление

В сообщении шаблона апплета есть два шаблона

  • разовая подписка
  • долгосрочная подписка

Эти два шаблона различаются в зависимости от типа услуги Мини-программы, и доступны только некоторые типы услуг: выбор библиотеки шаблонов долгосрочной подписки для автономных услуг, таких как медицинское обслуживание, средства к существованию людей, транспорт и образование.

В сообществе есть статьисообщениеНекоторые различия подробно объясняются


Добро пожаловать, чтобы обратить внимание на официальный аккаунт, каждый может общаться и прогрессировать вместе.