小程序訂閱消息使用(一次性)


小程序代碼

<view class='func-item' data-funcname='subscript_notice' bindtap='toFunc'>
      <view class="func-item-icon">
        <text class="iconfont icon-qingchu iconfont-size" style="color:#FE7873;"></text>

      </view>
      <view class='func-item-title'>
        訂閱消息
      </view>
      <view class='func-item-nav'>
        <view class="iconfont icon-nav-right"></view>
      </view>
    </view>
  subscriptNotice: function () {
    wx.requestSubscribeMessage({
      tmplIds: ['Ue2WWXj6Bm58Ayzau3B1RCTIFFal1aDCXJ0WfyHo5_w'],
      success: (res) => {
        console.log('訂閱結果');
        console.log(res);
        if (res.errMsg == 'requestSubscribeMessage:ok') {
          let status = res['Ue2WWXj6Bm58Ayzau3B1RCTIFFal1aDCXJ0WfyHo5_w'];
          console.log(status);
        } else {
          wx.showModal({
            showCancel: false,
            title: '提示',
            message: res.errMsg + ',請重新訂閱!'
          })
        }
      },
      fail: ex => {
        wx.showModal({
          title: '提示',
          message: JSON.stringify(ex),
          showCancel: false
        })
      }
    })
  },

 

后台邏輯

定義消息模板類型

 /// <summary>
    /// 訂閱模板消息  基本項
    /// </summary>
    public class MpTempleteMessageBaseItem
    {
        public string value { get; set; }

        
    }
/// <summary>
    /// 經營數據通知
    /// </summary>
    public class MpBusinessDataTempleteMessage
    {
        /// <summary>
        /// 商品總額
        /// </summary>
        public MpTempleteMessageBaseItem amount1 { get; set; }

        /// <summary>
        /// 儲值總額
        /// </summary>
        public MpTempleteMessageBaseItem amount2 { get; set; }

        /// <summary>
        /// 銷售單數
        /// </summary>
        public MpTempleteMessageBaseItem number3 { get; set; }


        /// <summary>
        /// 其他收入
        /// </summary>
        public MpTempleteMessageBaseItem amount4 { get; set; }


        /// <summary>
        /// 統計時間
        /// </summary>
        public MpTempleteMessageBaseItem time5 { get; set; }
    }

訂閱消息模型

 /// <summary>
    /// 訂閱消息模型
    /// </summary>
    public class MpTempleteMessageModel
    {
        /// <summary>
        /// string        是    接收者(用戶)的 openid
        /// </summary>
        public string touser { get; set; }


        /// <summary>
        /// string        是    所需下發的訂閱模板id
        /// </summary>
        public string template_id { get; set; }

        /// <summary>
        /// string        否    點擊模板卡片后的跳轉頁面,僅限本小程序內的頁面。支持帶參數,(示例index?foo=bar)。該字段不填則模板無跳轉。
        /// </summary>
        public string page { get; set; }

        /// <summary>
        /// Object        是    模板內容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }
        /// </summary>
        public object data { get; set; }
 /// <summary>
        /// string        否    跳轉小程序類型:developer為開發版;trial為體驗版;formal為正式版;默認為正式版
        /// </summary>
        public string miniprogram_state { get; set; }

        /// <summary>
        /// string        否    進入小程序查看”的語言類型,支持zh_CN(簡體中文)、en_US(英文)、zh_HK(繁體中文)、zh_TW(繁體中文),默認為zh_CN
        /// </summary>
        public string lang { get; set; }

獲取 token

 public Result GetAccessToken()
        {
            var _result = new Result();
            try
            {
                var tokenModel = Senparc.Weixin.MP.CommonAPIs.CommonApi.GetToken(AppId, AppSecret);
                if (tokenModel == null)
                {
                    _result.success = false;
                    _result.message = "請求token失敗";
                    return _result;
                }
                if (tokenModel.errcode != 0)
                {
                    _result.success = false;
                    _result.message = _result.message = "獲取授權token失敗,錯誤代碼:" + tokenModel.errcode + ",錯誤原因:" + tokenModel.errmsg;
                    return _result;
                }
 var cacheModel = new AccessTokenCache()
                {
                    access_token = tokenModel.access_token,
                    expires = DateTime.Now.AddSeconds(tokenModel.expires_in)
                };
                _cacheManage.GetCache(Common.CacherKeyHelper.AccessTokenCacheKey()).Set("wxapp", cacheModel, TimeSpan.FromSeconds(tokenModel.expires_in));
                _result.success = true;
                _result.data = cacheModel;
            }
            catch (Exception ex)
            {
                _result.success = false;
                _result.message = ex.Message;
            }

            return _result;

        }

封裝訂閱消息模型

 private MpBusinessDataTempleteMessage GetMpBusinessDataTempleteMessage(SendMessageRequestDto input)
        {
            return new MpBusinessDataTempleteMessage()
            {
                amount1 = new MpTempleteMessageBaseItem()
                {
                    value = input.key_word1
                },
                amount2 = new MpTempleteMessageBaseItem()
                {
                    value = input.key_word2
                },
                amount4 = new MpTempleteMessageBaseItem()
                {
                    value = input.key_word4
                },
                number3 = new MpTempleteMessageBaseItem()
                {
                    value = input.key_word3
                },
                time5 = new MpTempleteMessageBaseItem()
                {
                    value = input.key_word5
                }

            };
        }

 

接口參數模型

 /// <summary>
    /// 發送訂閱消息的參數
    /// </summary>
    public class SendMessageRequestDto
    {

        public SendMessageRequestDto()
        {
            miniprogram_state = "formal";
            lang = "zh_CN";
        }
        /// <summary>
        /// 發送者的openid
        /// </summary>
        public string openid { get; set; }

        /// <summary>
        /// 訂閱號類型 
        /// 1-經營數據通知
        /// </summary>
        public string template_type { get; set; }
  /// <summary>
        /// 點擊模板卡片后的跳轉頁面,僅限本小程序內的頁面。支持帶參數,(示例index?foo=bar)。該字段不填則模板無跳轉。
        /// </summary>
        public string page { get; set; }

        /// <summary>
        /// 跳轉小程序類型:developer為開發版;trial為體驗版;formal為正式版;默認為正式版
        /// </summary>
        public string miniprogram_state { get; set; }

        /// <summary>
        /// 進入小程序查看”的語言類型,支持zh_CN(簡體中文)、en_US(英文)、zh_HK(繁體中文)、zh_TW(繁體中文),默認為zh_CN
        /// </summary>
        public string lang { get; set; }

        /// <summary>
        /// 內容關鍵字 1
        /// </summary>
        public string key_word1 { get; set; }
  /// <summary>
        /// 內容關鍵字 2
        /// </summary>
        public string key_word2 { get; set; }

        /// <summary>
        /// 內容關鍵字 3
        /// </summary>
        public string key_word3 { get; set; }

        /// <summary>
        /// 內容關鍵字 4
        /// </summary>
        public string key_word4 { get; set; }


        /// <summary>
        /// 內容關鍵字 5
        /// </summary>
        public string key_word5 { get; set; }


        /// <summary>
        /// 內容關鍵字 6
        /// </summary>
        public string key_word6 { get; set; }

        /// <summary>
        /// 備注
        /// </summary>
        public string remark { get; set; }
    }

發送方法

  public Result SendMessage(SendMessageRequestDto input)
        {
            var _result = new Result();
            try
            {

                var _error = "";
                var _token = _cacheManage.GetCache(Common.CacherKeyHelper.AccessTokenCacheKey()).Get("wxapp", () =>
                {
                    var _tokenResult = GetAccessToken();
                    if (_tokenResult.success)
                    {
                        var cacheToken = _tokenResult.data as AccessTokenCache;
                        if (cacheToken == null)
                        {
                            return null;
                        }
                        else
                        {
                            return cacheToken;
                        }
                    }
else
                    {
                        _error = _tokenResult.message;
                        return null;
                    }
                });

                if (!string.IsNullOrWhiteSpace(_error))
                {
                    _result.success = false;
                    _result.message = _error;
                    return _result;
                }
 if (_token == null || _token.expires < DateTime.Now)
                {
                    _cacheManage.GetCache(Common.CacherKeyHelper.AccessTokenCacheKey()).Remove("wxapp");

                    var _tokenResult = GetAccessToken();
                    if (_tokenResult.success)
                    {
                        _token = _tokenResult.data as AccessTokenCache;
                    }
                    else
                    {
                        _error = _tokenResult.message;
                        _result.success = false;
                        _result.message = _error;
                        return _result;
                    }
                }
 var template_id = "";
                object message = new object();

                switch (input.template_type)
                {
                    case "1":
                        template_id = "Ue2WWXj6Bm58AyzauXJ0WfyHo5_w";
                        message = GetMpBusinessDataTempleteMessage(input);
                        break;
                }
 var messageData = new MpTempleteMessageModel
                {
                    touser = input.openid,
                    template_id = template_id,
                    page = input.page,
                    data = message,
                    lang = input.page,
                    miniprogram_state = input.miniprogram_state



                };
  var url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + _token.access_token;

                var _mpResult = CommonJsonSend.Send<MpResult>(null, url, messageData);
            }
            catch (Exception ex)
            {
                _result.message = ex.Message;
                _result.success = false;

            }

            return _result;
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM