WeChat アプレット サブスクリプションのニュースと遭遇したさまざまな問題の解決策 (全文)

「テンプレート メッセージ」との違いは
、ユーザーがトリガーをクリックするか支払いが成功した後、開発者は 7 日以内に 1 ~ 3 つのサービス通知をプッシュできることです。「サブスクリプション メッセージ」では、開発者がユーザーにメッセージ通知をプッシュする前に、ユーザーがメッセージ通知を積極的にサブスクライブする必要がありますが、時間による制限はありません。送信されるメッセージの具体的な数は、さまざまなタイプの機能によって異なります。

さらに、「メッセージの購読」を使用した後、元のミニ プログラム テンプレート メッセージ インターフェイスは 2020 年 1 月 10 日にオフラインになり、元のインターフェイスを使用してテンプレート メッセージをプッシュすることはできなくなることに注意してください。インターフェースのタイムリーな調整に注意を払う必要があります。ただし、WeChat サービス アカウント テンプレート メッセージは当面は影響を受けません。

特徴
1. 選択権はユーザーの手に戻ります。アプレットでは、「ニュースの購読」はスイッチのようなものです。ユーザーが積極的に承認をクリックした後にのみ、アプレットはサービス通知をアプレットにプッシュできます。もちろん、ユーザーはアプレットのサービス通知の受信を拒否することもできますいつでも。以前は、ユーザーはメッセージを受動的に受信することしかできませんでした。

2. 期間は制限されません。「サブスクリプション メッセージ」により、7 日以内のメッセージ プッシュの期限が解除され、ユーザーがメッセージ プッシュの受信を積極的に拒否しない限り、開発者はいつでもサービス通知をプッシュできます。サービスサイクルが 7 日を超える小規模なプログラムの場合、これで以前の疑問が完全に解決されます。

さて、この購読メッセージの使い方を見てみましょう~

大まかな処理を簡単に説明すると
アプレットが起動する認可ポップアップウィンドウの処理
ちなみに、ユーザの認可情報wx.gettingを取得する方法と、ユーザが認可を閉じる際に設定認可ページに飛ぶ方法について説明します。

認可後、サーバーはサブスクリプションメッセージプロセスを送信して、
サブスクリプションによって送信された各パラメーターの具体的な意味を整理します。ドキュメントはありますが、例があった方が理解しやすいです。

さまざまな難病を収集して解決します。
アプレット端末によって開始される承認ポップアップ ウィンドウ プロセスは、クライアント
アプレット購読メッセージ インターフェイスを呼び出し、ユーザーの購読メッセージの操作結果を返します。ユーザーが購読パネルで「常に上記の選択を保持し、再度質問しない」にチェックを入れると、テンプレート メッセージがユーザーのアプレット設定ページに追加され、関連するテンプレート メッセージに対するユーザーの購読ステータスをwx.getSetting インターフェース。

ドキュメント内のこの文に注目してください。 → ユーザーが以前に質問しないように設定している場合、承認ポップアップ ウィンドウを調整することはできません。では、ユーザーの承認情報を取得するにはどうすればよいでしょうか?

wx.getSetting はこの情報を取得できます。対応する wx.getting ドキュメントには
サンプル コードがドキュメントの最後にありますが、ここには掲載しません。

サブスクリプション メッセージのサブスクリプション ステータスを取得したい場合は、withSubscriptions を true に設定する必要があります (デフォルトは false、開かないと取得できません)。取得に成功すると、authSetting にはいくつかのアクセス許可が与えられます。ユーザーについて、subscriptionsSetting は必要なサブスクリプション許可情報です。内部には、現在のアプレットのサブスクリプション情報を受け入れるかどうかを示すメイン スイッチ mainSwitch があります。これが false の場合、実際にはポップを調整することはできません。窓を少しでも開けると、小さな友達は、許可が閉じられていることを知らせたいかどうか、そしてどうやってそこに案内するかを尋ねます。

最初にコードを投稿します。

サブスクリプションメッセージ送信ロジック処理

const SUBSCRIBE_ID = 'RHPuVfEyGe0q0n7lZyzz4r-zyGe07lZyzz4r3' // 模板ID
goCollectSet() {
    let that = this;
    if (wx.requestSubscribeMessage) {
      wx.requestSubscribeMessage({
        tmplIds: [SUBSCRIBE_ID],
        success(res) {
          if (res[SUBSCRIBE_ID] === 'accept') {
            // 用户主动点击同意...do something
          } else if (res[SUBSCRIBE_ID] === 'reject') {
            // 用户主动点击拒绝...do something
          } else {
            wx.showToast({
              title: '授权订阅消息有误',
              icon: 'none'
            })
          }
        },
        fail(res) {
          // 20004:用户关闭了主开关,无法进行订阅,引导开启
          if (res.errCode == 20004) {
          	// 显示引导设置弹窗
            that.setData({
              isShowSetModel: true
            })
          }else{
          	// 其他错误信息码,对应文档找出原因
            wx.showModal({
              title: '提示',
              content: res.errMsg,
              showCancel: false
            })
          }
        }
      });
    } else {
      wx.showModal({
        title: '提示',
        content: '请更新您微信版本,来获取订阅消息功能',
        showCancel: false
      })
    }
  }

[wx.requestSubscribeMessage ドキュメント]

上記のコードを簡単に説明すると、 goCollectSet メソッドはサブスクリプションメッセージパーミッションの実行を認可するメソッドです 基本ライブラリ 2.4.4 以降では wx.requestSubscribeMessage のサポートが必要となるため、判断が必要になります。ユーザーの現在の WeChat にこのメソッドがない場合は、WeChat バージョンの更新を求めるプロンプトが表示され、対応するサブスクリプション テンプレート ID を tmplIds 配列フィールドに入力します。

[Q] サブスクリプション テンプレート ID はどこで取得して、新しい ID を作成できますか?
·
[回答]
WeChat公式アカウントプラットフォームにログインした後、複数のアプレットがある場合は、現在開発されているアプレットを選択し、インターフェイスに正常に入った後、機能セクションに移動 -> ニュースを購読すると、新しいテンプレートを作成できますまたはパブリック サブスクリプション テンプレートを使用します。テンプレートの場合は、対応する ID を直接コピーするだけです

この時点でユーザーがサブスクリプション メッセージ通知権限を有効にしている場合は、図に示すように、サブスクリプション メッセージを承認するためのウィンドウが表示されます。
ここに画像の説明を挿入

 このときユーザーが [許可] をクリックした場合は accept その時点でステータスが返され、それ以外の場合はユーザーが [キャンセル] をクリックした場合にステータスが返されます reject。具体的なステータス フィールドは図に示されています。

ここに画像の説明を挿入

この戻り値はテンプレート ID をキーとして使用していることがわかります。そのため、それを取得するときは、テンプレート ID に従って取得する必要があります。ここでは、許可と拒否の戻りについてのみ説明します。フィルターの戻り値はフィルター処理されています。テンプレートのタイトルが同じなので、新規作成する際は、既存のタイトルと同名のテンプレートを区別することを忘れずに行ってください。通常はこれで成功します。主にユーザー自身の操作です。[許可]後, それは一度だけサブスクライブされます. これは 1 回限りのサブスクリプションのサブスクリプション メッセージであることに注意してください。

[Q] 1 回限りのサブスクリプション テンプレートと永久サブスクリプションの違いは何ですか? 永久サブスクリプションを使用する必要がある場合はどうすればよいですか?
·
[回答]
1. 1 回限りのメッセージ購読: ユーザーが一度購読すると、開発者は期限なくメッセージを送信できます。ユーザーが「常に上記の選択を保持し、再度質問しない」にチェックを入れて「許可」をクリックすると、今後はデフォルトでこのメッセージを購読することに同意することになります。ユーザーは複数の選択を行うことがなくなり、開発者は煩わしいリマインダーを回避できます。
2.
メッセージの長期購読: ユーザーは一度購読すると、複数のメッセージを長期間送信できます。現在、長期購読ニュースは行政、医療、交通、金融、教育などのオフライン公共サービスに公開されていますが、今後は業界のニーズを総合的に評価し、ユーザーエクスペリエンスの向上を継続してまいります。(長期サブスクリプションメッセージは特定の業界のみに提供されているため、一般の開発者は使用できません)

さて、本題に戻りますが、現時点では、ユーザーによる 1 回のクリックは 1 回のサブスクリプションに相当し、システム通知を 1 回取得するためのチケットを持つことに相当します。理論的には、ユーザーによる複数回のクリックは、複数回のサブスクリプションに相当します。現時点では、これらのサブスクリプションの数が保存され、サーバーが通知を送信すると、1 つのサブスクリプションが消費されます (理論的にはこれが当てはまりますが、ドキュメントには記載されていません。前に必ずサブスクリプション インタラクションをトリガーするようにしてください)配信ごとに行われるため、長期のサブスクリプションについて検討してください)、一度承認されたら生涯使用できます~)

次に、ポップアップ ウィンドウの [常に上記の選択を維持し、再度尋ねない] について説明します。これがチェックされていない場合、サブスクライブするたびにウィンドウがポップアップします。ユーザーがチェックすると、ロジックが実行されます。チェックを入れて[許可]をクリックすると受け入れ時のロジックが直接実行されますが、それ以外の場合はチェックを入れて[キャンセル]をクリックすると常に拒否時のロジックが実行されるので、友達もいます。毎回承認するたびにポップアップも出ずに自動的に拒否されてしまうのですが、実は[キャンセル]は拒否を意味しており、チェックを入れると恥ずかしいので二度と聞かないと思います…。

この誤操作の代償は非常に高くなります。将来的には、ポップアップ ウィンドウや直接の拒否はなくなります。ユーザーがいつか購読したいと思っても、どこで購読すればよいか分からなくなります。設定(設定ページ)がオンになっているのですが、拒否ロジックにガイドポップアップウィンドウを追加すれば十分ではないかと友人が言っていました。ただ、実行ロジック的には、「もう聞かない」にチェックを入れてクリックして拒否するかという拒否のロジックなので、ここで設定ページに誘導するのはちょっとおかしいので、これが実は面倒なんですお尻、そして私はWeChatのために祈ることしかできません。小さなプログラム開発の兄弟にとって、それ以上質問しない拒否のリターンサインを追加して、開発者もユーザーが通常の拒否か拒否かを判断できるようにするのは素晴らしいことです。対応するロゴの返却に基づく問答無用の拒否

対応する祈りのフォーラムはここでご覧いただけます → https://developers.weixin.qq.com/community/develop/doc/00044c5ef086b0c616594cb9651809

もちろん、上記の問題には解決策がないわけではありません。ポップアップ ウィンドウをカスタマイズするだけで済みます。これについては以下で詳しく説明します。ゆっくり考えてみましょう... まず失敗のロジックについて話しましょう

失敗のロジックについては、ドキュメントのエラー コード テーブルを直接確認できます。一般的なものをいくつか示します。

[質問] 返されるエラーコード 20001、20002、20003、20004 の意味と解決方法を教えてください。
·
[回答]
20001: テンプレート データがありません。通常、テンプレート ID が存在しないか、テンプレートの種類に対応していません。20001 の
解決策: 一般的に、コードに記述されているテンプレート ID が WeChat 公式アカウントにあるかどうかに注意してください。そうでない場合は、新しいものを作成します。tmplIds に注意してください: ['subscription template id1', 'subscription template id2'] この形式を間違えないでください。 20002 : テンプレート メッセージ タイプには、1 回限りのソリューションと永続的な 20002 ソリューションの両方が
あり
ます
。ドキュメントには混在できないと記載されているので、 tmplIds に入力された ID が同じ種類であるかどうかを確認して書き込みます

20003: テンプレート メッセージの数が上限を超えています。
20003 解決策: 必要なメッセージ テンプレートの ID のコレクション1 回の通話で最大 3 つのメッセージを購読できます (注: iOS クライアント バージョン 7.0.6、Android クライアントのバージョン 7.0.7 以降では、1 回限りのサブスクリプション/長期サブスクリプションのみが複数のテンプレート メッセージをサポートします。 iOS クライアント バージョン 7.0.5 および 7.0.6 より前の Android クライアント バージョンの 1 つのサブスクリプションで
は、1 つのテンプレート メッセージのみがサポートされます。このメッセージに遭遇した場合は、まず作業を開始する製品を見つけてください。ユーザーに対して一度に多くのサブスクリプションをサブスクライブするのはなぜですか選択して、分離できる場合は分離しますか? 一緒に購読する場合は、バージョンを更新するようにユーザーに通知するだけです。そうしないと、機能に影響します。 20004 : ユーザーがメイン スイッチをオフにしたため、購読できません。エッジは
ガイド
でき
ますユーザーは設定ページを開きます

さて、ここでは主に 20004 のエラー リターン、つまり、ユーザーがページを設定するようにガイドする方法について説明します。インターネット上での操作をガイドするパターンを使用する代わりに、ボタン ラベル open-type="openSetting" を直接使用します。 WeChat で直接アクセスするには、まずこの関数の基本ライブラリ 2.0.7 を見てみましょう。慌てなければ、サブスクリプション テンプレート メッセージ 2.4.4 を使用できます。その後、この関数も使用できます。では、wxmlを見てみましょう 対応するスタイルは掲載されていません カスタマイズDIY

ブートストラップ認証設定 wxml
 

  <!-- 自定义模态框 -- 引导跳授权设置页面 -->
  <view class="jumpSetModel" wx:if="{
   
   {isShowSetModel}}">
    <view class="jumpSetBox">
     <view class="m-title">提示</view>
      <view class="m-content">检测到您未开启订阅消息通知权限,是否去设置?</view>
      <view class="m-control">
        <button class="m-cancel" catchtap="closeSetModel">取消</button>
        <button class="m-confirm" open-type="openSetting" bindopensetting="openSetCallback">去设置</button>
      </view>
    </view>
  </view>

 ここに画像の説明を挿入


上の図に示すように、20004 に戻ると、ポップアップ ウィンドウが表示され、設定をクリックすると、設定ページにジャンプします。これは快適です ~設定がオンになっていると、友達も言うでしょう。、ジェスチャの戻りが監視されますか。これは心配する必要はありません。サブスクリプション通知のマスター スイッチのステータスは自動的に更新され、再実行のロジックには影響しません。

さて、注意深く読んだ方は、上に質問が残っていることを覚えていますか。ユーザーがこれ以上質問をクリックせずにキャンセルした場合、次のようにプレイできます (通常の拒否と併用)
ここに画像の説明を挿入

承認後、サーバーはサブスクリプションメッセージプロセスを送信します
。メッセージサブスクリプションインターフェイスwx.requestSubscribeMessageを呼び出し、送信許可を取得した後、次のステップはサブスクリプションメッセージを送信することです~

トレインによるドキュメント:
承認後、サーバーはサブスクリプション メッセージ プロセスを送信します。

ドキュメントから、HTTPS 呼び出しとクラウド機能を使用する 2 つの配信方法があることがわかります。

ミニ プログラム · クラウド開発 – クラウド関数クラウド
呼び出しは、ミニ プログラム · クラウド開発によって提供される、クラウド関数で WeChat オープン インターフェイスを呼び出す機能です。wx-server-sdk を通じてクラウド関数で使用する必要があります。クラウド呼び出しでは、access_token の取得を回避することもできます。

コードは以下のように表示されます。
 

const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
  try {
    const result = await cloud.openapi.subscribeMessage.send({
        touser: 'wx12345645645zawqead',  // 接受当前模板消息的用户openid
        templateId: 'TEMPLATE_ID',   // 当前下发的模板ID,不可写多个,目前只支持一个
        page: 'index?id=666',   // 定义用户点击该模板消息跳转的小程序路径
        // 模板所需要的键值
        data: {
          thing1: {
            value: '情感咨询课程'
          },
          amount1: {
            value: '9.99'
          },
          date1: {
            value: '2020-03-10 15:24:08'
          }
        }
      })
    return result
  } catch (err) {
    return err
  }
}

 

このようにして、対応するテンプレートを指定されたユーザーに送信できます~

バックエンドサーバーがサブスクリプションメッセージを送信します

<?php 
$data = json_decode(file_get_contents('php://input'), true);
 
$post_data = array(
  // 用户的 openID,可用过 wx.getUserInfo 获取
  "touser"           => $data["touser"],
  // 小程序后台申添加的订阅消息模板 ID
  "template_id"      => $data["template_id"],
  // 点击模板消息后跳转到的页面,可以传递参数
  "page"             => $data["page"],
  // 发送给用户的数据
  "data"             => $data["data"]
 
);
 
// 发送 POST 请求的函数
function send_post($url, $post_data)
{
  $options = array(
    'http' => array(
      'method'  => 'POST',
      'header'  => 'Content-type:application/json',
      'content' => $post_data,
      'timeout' => 60
    )
  );
 
  $context = stream_context_create($options);
  $result = file_get_contents($url, false, $context);
 
  return $result;
}
 
// 小程序 appID 和 appSecret 获取 token
function getAccessToken($appid, $appsecret)
{
  $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $appsecret;
  $html = file_get_contents($url);
  $output = json_decode($html, true);
  $access_token = $output['access_token'];
 
  return $access_token;
}
 
// 这里替换为你的 appID 和 appSecret
$url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" . getAccessToken($appid, $appsecret);
 
$data = json_encode($post_data, true);
 
$return = send_post($url, $data);
var_dump($return);

 ここに掲載されているのは、アプレットのサブスクリプション メッセージを送信するための php デモ コードです。  対応する アプレットの公式アカウントの 開発設定で取得appID でき ます。appSecret

ここに画像の説明を挿入

バックエンドの友人が Java を使用して記述している場合は、この記事を参照してください。コードはここには投稿されません >>> WeChat アプレットのサブスクリプション メッセージ (Java バックエンドの実装)

【Q】ミニプログラムクラウド機能はどのように作成すればよいですか?
·
[回答]
ミニプログラムクラウド開発を使用してクラウドを作成する手順については、こちらの記事を参照してください: WeChat ミニプログラムクラウド開発のためのクラウド機能の作成と環境設定 · [質問] 配信レポートの何が問題です

。そしてそれをどうやって解決するのか?
·
【回答】
40003 touser フィールドの openid が空か間違っています
40003 解決策: ここでの openid は、購読メッセージを受け入れるユーザーのものであることに注意してください
43101
ユーザーはメッセージの受け入れを拒否しています。ユーザーがサブスクリプション関係をキャンセルしたことを意味します
。 : このエラー レポートでは、アプレットによって開始された認証ポップアップ ウィンドウ中にユーザーのサブスクリプション認証が正常に取得されたかどうかに注意してください。取得できなかった場合は、認証操作で問題を見つけてください

47003
テンプレート パラメータが不正確です。空である可能性があるか、ルールを満たしていません。errmsg はどのフィールドが間違っているかをプロンプトします。 47003 解決策:ワン
タイム メッセージを購読しますが、送信時に失敗することがあります。これはコンテンツに関連している可能性があります。テンプレート データ パラメーターは、入力する対応するテンプレート ID によって開かれたテンプレート フィールドを参照する必要があります (サブスクリプション メッセージ テンプレートのコンテンツ パラメーターは非常に厳密で、あと 1 文字ある場合、またはパラメーターの指定された値と矛盾する場合は、送信エラーが発生します) 、単語の数を判断することを忘れないでください。対応するパラメータを入力するときは、背景のテンプレートに従って入力してください(thing03、name05、デジタルの後に続きます)

ここに画像の説明を挿入

41030 ページ パスが正しくありません。app.json と一致して、アプレットのオンライン バージョンに存在することを保証する必要があります。 41030 解決策:
正しく入力する必要があります。パスはアプレット内に存在する必要があります。

これはサーバーからサブスクリプションメッセージを送信するプロセスについてです~

さまざまな難病の収集と解決
、ニュースの購読は素晴らしい機能です。開発中にさまざまな問題が発生することは避けられません。上記のプロセスでいくつかの問題とその解決策が掲載されています。ここでは上で書いたことを繰り返しません。ここで言及されていないものを追加します

1. 開発者ツールはデバッグできません

その後、実機で認証ポップアップウィンドウを解除できるか試してみたところ、開発コミュニティを閲覧したところ、これはよくある問題であることがわかりました。

しかし、今回のプロンプトは非常に単純です。私たちはこの責任を負いません。実機でデバッグすることを忘れないでください。

2. 2 つのサブスクリプション テンプレート メッセージを開始したが、ユーザーがそのうちの 1 つだけを受信した場合、どうなりますか?
まず、tmplIds フィールドに同じタイプの 2 つのテンプレート ID ['template id1', 'template id2'] が記述されていることを確認し、コードに間違いがなければ認可ウィンドウは正常に解除されます (ただし、ユーザーがチェックを入れていない場合は、常に上記のオプションを維持します)、ユーザーが 2 つのテンプレートを受信したい場合は、2 つのテンプレートをチェックする必要があります。ユーザーがいずれかをキャンセルした場合、当然、対応するテンプレート メッセージは受信できなくなります。 wx.requestSubscribeMessage の成功ロジックで対応する戻り値を処理するリクエストが複数のテンプレート ID を許可する場合、テンプレート ID をキーとして対応する戻り値も返されるため、それに応じて処理できます。

さて、上記は、ユーザーが「常に上記のオプションを保持し、質問しない」にチェックを入れなかった場合です。チェックが入っている場合、ポップアップ ウィンドウは表示されず、「設定」でのみ再度開くことができます。 " インターフェースは、現時点では表示されないためです。ポップアップウィンドウについては、上記のガイドに記載されているので、ここで文句を言うつもりはありません

さらに、ユーザーは、購読通知を送信する WeChat サービス アカウントで購読通知をキャンセルすることもできます。これにより、設定で対応する通知の受信が直接オフになります。ガイダンスは上記と同じです。
 

success(res) {
   // 模板id1的处理逻辑
   if (res['模板id1'] === 'accept') {
     // 用户主动点击同意...do something
   } else if (res['模板id1'] === 'reject') {
     // 用户主动点击拒绝...do something
   }
	
   // 模板id2的处理逻辑
   if (res['模板id2'] === 'accept') {
     // 用户主动点击同意...do something
   } else if (res['模板id2'] === 'reject') {
     // 用户主动点击拒绝...do something
     wx.showModal({
       title: '提示',
       content: '你取消了xxx的通知',
       showCancel: false
     })
  }
 }

ここに画像の説明を挿入 

3. wx.requestSubscribeMessage を使用して正常にデバッグしたときに、認証ボックスを解除しなかったのはなぜですか?
まず、呼び出しが成功したことを確認する必要があります (基本ライブラリでサポートされており、コードにエラーがない)。この時点では、「常に上記のオプションを保持し、質問しない」オプションが以前にチェックされています。 2 つ目は、テンプレート ID が長期サブスクリプション タイプに属していることです。このタイプでは、確認する限り、認証ウィンドウはポップアップ表示されません。ユーザーが設定で開くことを許可できるのは、スターテス。

4. 複数のテンプレート ID フィールドを同時に入力すると、次のエラーが報告されました: テンプレート数が最大範囲を超えています
(注: iOS クライアント バージョン 7.0.6 および Android クライアント バージョン 7.0 以降は、1 回限りのサブスクリプション/長期サブスクリプションのみ) .7 では、複数のテンプレート メッセージ、iOS クライアント バージョン 7.0.5、および Android クライアント バージョン 7.0.6 がサポートされています。サブスクリプションは 1 つのテンプレート メッセージのみをサポートします) メッセージ テンプレート
ID は、[WeChat パブリック プラットフォーム - 機能 - サブスクリプション メッセージ] で構成されます。各 tmplId に対応するテンプレート タイトルは異なる必要があります。そうしないとフィルタリングされてしまいます。そのため、テンプレート ID を 3 つ入力したのに、最終的に 2 つしか表示されないのはなぜかと言う友人がいたので、公式アカウント プラットフォームにアクセスして確認しました。同じタイトルが出ました問題〜

-------------------------------------------------- -- 2021.01.30 更新 -------------------------------------- --- -------

私の返信コメントがなぜ消えてしまったのかわかりません。奇妙です...そうですね、コメント エリアで寄せられた質問を更新して整理するためにここにいます

5. 1 回限りのサブスクリプション認証ポップアップ ウィンドウで、[許可] をクリックした後、アプレット設定にサブスクリプション メッセージが表示されないのはなぜですか?
1 回限りのサブスクリプション メッセージの場合、[常に上記の選択を保持し、再度プロンプトを表示しない] チェックボックスをオンにしない場合、そのメッセージはアプレット設定ページに追加されません。それ以外の場合、アプレットはユーザーをデフォルトのアプレットでの認証操作。

同様に、長期購読メッセージの場合、ユーザーはメッセージを許可または拒否した後、メッセージを設定に直接保存します (長期購読の購読ステータスは設定で確認できます)。

また、wx.getSetting インターフェイスを通じて、ユーザー関連のテンプレート メッセージのサブスクリプション ステータスを取得できます。
詳細については、公式ドキュメントを参照してください: wx.getSetting

6. ユーザーの openid を取得するにはどうすればよいですか?
まずopenidの取得ですが、以下の3つの方法があります。

wx.login() を通じてフォアグラウンド アプレットによって取得されるコード ユーザー ログイン資格情報 (5 分間有効)。次に、開発者サーバーのバックグラウンドで auth.code2Session を呼び出し、そのコードを使用して openid や session_key などの情報を交換する必要があります
[この操作にはユーザーの承認は必要ありません]

クラウド開発を使用している場合は、クラウド関数を呼び出してこの情報を取得できます。具体的なコードは次のとおりです。

このクラウド関数cloud.getWXContext()を使用するだけです(クラウドのデプロイメントなどについては詳しく説明しません。質問がある場合は、上記のクラウド関数のデプロイメントの記事を参照してください)

getopenid クラウド関数の Index.js にクラウド関数を記述した後、忘れずにアップロードしてデプロイしてください。
 

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}

 次に、必要なインターフェイスでクラウドを呼び出します

page{
	data{
		openid:'',
	},
	onLuanch(){
		this.getopenid()
	}
	// 定义调用云函数获取openid
	getOpenid(){
	  let page = this;
	  wx.cloud.callFunction({
	    name:'getOpenid',
	    complete:res=>{
	      var openid = res.result.openid
	      page.setData({
	        openid:openid
	      })
	    }
	  })
	},
}

 

【この操作もユーザー認証は必要ありません】

wx.getUserInfo インターフェースを介してユーザー情報を取得する

このメソッドを呼び出すには、ユーザー認証 (つまり、通常表示されるドロワー認証情報ポップアップ ウィンドウ) が必要です。openid やその他の機密情報を取得したい場合は、withCredentials パラメーターも true に設定する必要があり、 wx before.login と呼ばれ、ログイン ステータスの有効期限が切れていない場合、この時点で返されるデータには、encryptedData、iv などの機密情報が含まれます。ただし、インターフェイスから返される openid はプレーン テキストで送信されず、暗号化されたプレーンテキスト値を取得するにはデータ復号化アルゴリズムが必要なので、単純に openid を取得したい場合は、それほど手間をかける必要はなく、最初の方法と 2 番目の方法を使用するだけです。

さらに、この操作にはユーザーの承認と同意も必要です。ユーザーが失敗ロジックに直接進むことを拒否する場合は、この記事を参照してください (製品の方向性 >>> WeChat ログイン機能の最適化)

話題から外れた補足: ユーザーの openid は変更されますか、それとも一意の値ですか?
この質問にはケースバイケースで対応します。

同じユーザーが同じアプレットにアクセスしても、その openid は変わりません。最初のエントリは何で、その後に入るアプレットは同じ openid (一意性) です。同じユーザーが異なるアプレットにアクセスすると、その openid は異なります
。各アプレットでは
、異なるユーザーが同じアプレットにアクセスし、各ユーザーの openid は異なります。
要約: 各アプレットには ID 値があり、一意であり、それが appid です (RMB と同様です。同じコードが存在する可能性があります)。偽のお金と思われます)、openid は appid と関連付けて管理されるため、実際には openid は一意の値になります
[拡張] 7. クリックして購読メッセージが特定の時点で送信されることを実現するにはどうすればよいですか? (2021.4.13 更新)
この質問は @qq_32921557 の質問に含まれています。ここでは、クラウド関数がこのステップをどのように実装するかについて簡単に説明します。バックエンドの場合は、定期的に配信を直接トリガーできます。

おすすめ

転載: blog.csdn.net/aaa123aaasqw/article/details/132023408