Nodejs での WeChat アプレット メッセージ プッシュの実装

Nodejs での WeChat アプレット メッセージ プッシュの実装

サブスクリプションメッセージテンプレートを選択または作成する

WeChat アプレットにログインし、「機能」->「メッセージの購読」を見つけます。公開テンプレート ライブラリから必要なテンプレートを選択できます。必要なものが見つからない場合は、自分で作成してレビューを待つこともできます。

テンプレートを選択して詳細を表示すると、テンプレート ID とプッシュ通知の送信に必要なフィールドが表示されます。

アプレットはサブスクリプションリクエストを送信します

前の手順で取得したテンプレートIDが必要です

// ミニプログラム<Text className='rights-buy' onClick={this.messageSubmit}>
 入学願書</Text>

// 決済申請メッセージを購読する messageSubmit = () => {
 太郎.requestSubscribeMessage({
  tmplIds: ['SuGMwqyYY9cocuP-LxfElcM3a7ITaF34lKNux6EaE9'],
  成功: (res) => {
   // サーバー インターフェイスを呼び出して、データベースにサブスクリプション レコードを書き込みます // this.subscribeDeal()
  }
 })
}

サーバーがプッシュを開始する

プッシュには一般的に2つの種類がある

  • 手動トリガー、
  • もう 1 つは、メッセージをサブスクライブした後、特定の条件が満たされると、プッシュが自動的にトリガーされることです。

最初のケースでは、WeChat のプッシュ インターフェースを直接呼び出すだけです。 2 番目の状況は少し面倒です。時間指定のタスクを追加するか、関連するキュー ライブラリを使用して条件が満たされたときにトリガーすることができます。

注意事項

  • プッシュを送信する場合、ユーザーの openid とテンプレート ID が必要です。特定のプッシュ コンテンツ フィールドは、最初のステップ テンプレートの詳細で確認できます。
  • WeChat プッシュ インターフェースを呼び出すときは、access_token が必要です。これをキャッシュしておくことをお勧めします。頻繁に呼び出すと無効化される可能性があります。

access_tokenを取得してキャッシュする

非同期getAccessToken() {
 const { appId、 appSecert、 host } = this.app.config.idolWxAConfig;

 新しい Promise(async (resolve) => { を返します。
  定数 currentTime = 新しい Date().getTime()

  const redisToken = this.app.redis.get('wxtoken').get('token') を待機 || '{access_token: "", expries_time: 0}'
  const accessTokenJson = JSON.parse(redisToken)

  accessTokenJson.access_token === '' || accessTokenJson.expries_time < currentTime の場合 {
   const res = this.ctx.curl(`${host}/cgi-bin/token?appid=${appId}&secret=${appSecert}&grant_type=client_credential`, { dataType: 'json' }) を待機します。

   (res.data)の場合{

    accessTokenJson.access_token = res.data.access_token
    accessTokenJson.expries_time = 新しい Date().getTime() + (parseInt(res.data.expires_in) - 200) * 1000

    this.app.redis.get('wxtoken').set('token', JSON.stringify(accessTokenJson)) を待ちます。
    accessTokenJson を解決します
   }
  } それ以外 {
   accessTokenJson を解決します
  }
 })
}

WeChatにプッシュリクエストを送信する

非同期sendSubscribeMsg(openid) {

 リクエストデータ = {
  "touser": `${openid}`,
  "テンプレートID": "SuGMwqyYY9cocuP-LxfElcM3a7ITaF34lKNux6EaE9",
  "ページ": `/pages/certification/index`,
  "データ": {
    「フレーズ2」: {
     "値": `承認済み`
    },
    "もの3": {
     "value": `あなたの申請は審査され、承認されました`
    }
  }
 }

 定数 { ホスト } = this.app.config.idolWxAConfig;
 // access_toekn を取得する
 const tokenJson = this.ctx.service.wx.getAccessToken() を待機します
 const res = this.ctx.curl(`${host}/cgi-bin/message/subscribe/send?access_token=${tokenJson.access_token} を待機します。
 `、{
  メソッド: 'POST'、
  コンテンツタイプ: 'json',
  データ: リクエストデータ、
  データ型: 'json'
 });

 res.data.errmsg === 'ok'の場合{
  console.log('========プッシュに成功しました========')
  //やるべきこと
 } それ以外 {
  console.log('========プッシュに失敗しました========')
  //やるべきこと
 }
}

Nodejs WeChat アプレット メッセージ プッシュの実装に関するこの記事はこれで終わりです。より関連性の高い Nodejs アプレット メッセージ プッシュ コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • ノードイベントループとプロセスモジュールの例の分析
  • node.js のイベントループの理解と応用例
  • Node.jsにおけるノンブロッキングI/Oとイベントループに関する知識ポイントのまとめ
  • Nodejs 監視イベント ループ例外例の詳細な説明
  • Nodeの非同期IOとイベントループについての簡単な説明
  • DingTalk グループ ロボットを通じてメッセージをプッシュするための Nodejs 実装コード
  • node.js での WeChat アプレット設定メッセージ プッシュの実装
  • node.js での socket.io のブロードキャストメッセージ
  • ノードイベントループとメッセージキューの分析

<<:  Centos7にnginxをインストールする方法

>>:  MySQL 5.7.17 無料インストールバージョンの設定方法グラフィックチュートリアル (Windows10)

推薦する

CSSボックスモデルの紹介を読めば、混乱することはなくなるでしょう

Web デザインでよく耳にするプロパティ名: content、padding、border、marg...

Reactは二次連結(左右連結)を実現する

この記事では、二次リンクを実現するためのReactの具体的なコードを参考までに共有します。具体的な内...

HTML での位置の使用に関する簡単な紹介

昨日 HTML を少し学んだばかりで、JD.com の検索バーを作るのが待ちきれませんでした。 作っ...

JSON.stringify の簡易版の実装とその 6 つの主要機能の詳細な説明

目次序文JSON.stringify の 6 つの機能特集1特集2特集3特集4特集5特集6手動で文字...

MySQL 8.0はJSONを扱えるようになりました

目次1. 概要2. JSON基本ツール3. JSONパス式4. JSONを検索して変更する序文:長い...

MySQL でメタデータ ロックがブロックされている場所を確認する方法

MySQL でメタデータ ロックがブロックされている場所を確認する方法手順: 1. セッション1の実...

Linux プラットフォームの MySQL でリモート ログインを有効にする

開発中、MySQL へのリモートアクセスでよく問題に遭遇します。そのたびに検索する必要があり、面倒に...

MySQL テーブル削除操作の実装 (delete、truncate、drop の違い)

この記事では主に、MySQL でテーブルを削除する 3 つの操作、つまり delete ステートメン...

Vue2.x プロジェクトのパフォーマンス最適化のためのコード最適化の実装

目次1 v-ifとv-showの使用2. 計算と監視を区別する3 v-for トラバーサルでは、アイ...

MySQL 文字列分割の例 (区切り文字なしの文字列抽出)

区切り文字なしの文字列抽出質問の要件データベース内のフィールド値:実装効果: 1行のデータを複数行に...

CSSコンテンツ属性の具体的な使用法

コンテンツ属性は通常、::before および ::after 疑似要素で使用され、疑似要素のコンテ...

MySQL でローカル ユーザーを作成し、データベース権限を付与する方法の例

序文MySQL をインストールすると、通常はスーパーユーザー root を作成します。多くの人がこの...

React で Antd の Form コンポーネントを使用してフォーム機能を実装する方法

1. 構造部品1. フォームには、入力コントロール、標準フォーム フィールド、ラベル、ドロップダウン...

ボリュームを使用してホストと Docker コンテナ間でファイルを転送する方法

以前、Docker コンテナとローカル マシン間のファイル転送に関する記事を書きました。しかし、この...

ページ下部のフッターを修正する方法(複数の方法)

フロントエンド Web エンジニアとして、ページ効果を作成するときに次の現象に遭遇したことがあるはず...