小程序模板消息--發送模板消息

接口地址:https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKENhtml

HTTP請求方式:post小程序

 
 

POST參數說明api

參數 必填 說明
touser 接收者(用戶)的 openid
template_id 所需下發的模板消息的id
page 點擊模板卡片後的跳轉頁面,僅限本小程序內的頁面。支持帶參數,(示例index?foo=bar)。該字段不填則模板無跳轉。
form_id 表單提交場景下,爲 submit 事件帶上的 formId;支付場景下,爲本次支付的 prepay_id
data 模板內容,不填則下發空模板
color 模板內容字體的顏色,不填默認黑色
emphasis_keyword 模板須要放大的關鍵詞,不填則默認無放大

 

 

 

本實例的form_id參數爲支付場景下的prepay_id微信

本身封裝的模板消息發送接口:(C# WebApi)app

本身封裝的post的接口參數:post

#region 發送模板消息
    public class PostSendTemplete
    {
        /// <summary>
        /// 加密的
        /// </summary>
        public string shopid { get; set; }

        /// <summary>
        /// 付款成功通知  AT0005 
        /// 付款失敗通知  AT0006
        /// 待付款提醒    AT0008
        /// 退款通知      AT0036
        /// </summary>
        public string temptype { get; set; }

        /// <summary>
        /// 接收者(用戶)的 openid
        /// </summary>
        public string openid { get; set; }


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

        /// <summary>
        /// 表單提交場景下,爲 submit 事件帶上的 formId;支付場景下,爲本次支付的 prepay_id
        /// </summary>
        public string form_id { get; set; }

        /// <summary>
        /// 內容
        /// </summary>
        public string content { get; set; }

        /// <summary>
        /// 模板須要放大的關鍵詞,不填則默認無放大
        /// </summary>
        public string emphasis_keyword { get; set; }

    }


    #endregion

  封裝的post的小程序接口參數測試

/// <summary>
    /// 小程序模板消息模板
    /// </summary>
    public class WxaTempleteModel
    {
        /// <summary>
        /// 是	接收者(用戶)的 openid
        /// </summary>
        public string touser { get; set; }

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

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

        /// <summary>
        /// 是	表單提交場景下,爲 submit 事件帶上的 formId;支付場景下,爲本次支付的 prepay_id
        /// </summary>
        public string form_id { get; set; }

        /// <summary>
        /// 是	模板內容,不填則下發空模板
        /// </summary>
        public object data { get; set; }

        /// <summary>
        /// 否	模板內容字體的顏色,不填默認黑色
        /// </summary>
        public string color { get; set; }

        /// <summary>
        /// 否	模板須要放大的關鍵詞,不填則默認無放大
        /// </summary>
        public string emphasis_keyword { get; set; }
    }

    #region  付款成功通知  AT0005
    /// <summary>
    ///  //付款成功通知
    //{"keyword_id":13,"name":"商家名稱","example":"早安豆漿店"}{"keyword_id":16,"name":"門店","example":"汽車4s店"} {"keyword_id":22,"name":"訂單編號","example":"123658635455"}  {"keyword_id":27,"name":"商品信息","example":"魚香肉絲"},  {"keyword_id":3,"name":"付款金額","example":"8元"}
    /// </summary>
    public class PaySuccessTemplete
    {
        /// <summary>
        /// {"keyword_id":13,"name":"商家名稱","example":"早安豆漿店"}
        /// </summary>
        public TempleteItemData keyword1 { get; set; }

        /// <summary>
        /// {"keyword_id":16,"name":"門店","example":"汽車4s店"}
        /// </summary>
        public TempleteItemData keyword2 { get; set; }

        /// <summary>
        /// {"keyword_id":22,"name":"訂單編號","example":"123658635455"} 
        /// </summary>
        public TempleteItemData keyword3 { get; set; }

        /// <summary>
        /// {"keyword_id":27,"name":"商品信息","example":"魚香肉絲"}
        /// </summary>
        public TempleteItemData keyword4 { get; set; }

        /// <summary>
        /// {"keyword_id":3,"name":"付款金額","example":"8元"}
        /// </summary>
        public TempleteItemData keyword5 { get; set; }
    }
    #endregion

  

後臺接口代碼字體

#region 發送模板消息
        [HttpPost]
        public Result SendTemplete(PostSendTemplete model)
        {
            Logger.Debug("發送模板接口:3" + JsonConvert.SerializeObject(model));
            if (string.IsNullOrWhiteSpace(model.shopid))
            {
                _result.success = false;
                _result.message = "商戶號爲空";
                return _result;
            }

            if (string.IsNullOrWhiteSpace(model.form_id))
            {
                _result.success = false;
                _result.message = "form_id爲空";
                return _result;
            }

            if (string.IsNullOrWhiteSpace(model.openid))
            {
                _result.success = false;
                _result.message = "微信ID爲空";
                return _result;
            }

            if (string.IsNullOrWhiteSpace(model.temptype))
            {
                _result.success = false;
                _result.message = "模板類別爲空";
                return _result;
            }

            try
            {
                var shopid = DESEncrypt.Decrypt(model.shopid);
                var wxAppSet = _wxAppSetService.GetFromCache(shopid);
                var wxaTemplete = new t_wxa_templete();
                if (_wxaTempleteService.Exists(a => a.shopid == shopid && a.templete_type == model.temptype))
                {
                    wxaTemplete = _wxaTempleteService.Get(a => a.shopid == shopid && a.templete_type == model.temptype);
                }
                else
                {
                    var componentToken2 = Senparc.Weixin.MP.Sample.CommonService.Custom.TokenHelper.GetComponentAccessToken(component_AppId, component_Secret).component_access_token;
                    var authToken2 = Senparc.Weixin.MP.Sample.CommonService.Custom.TokenHelper.GetAuthorizerAccessToken(component_AppId, componentToken2, wxAppSet.appid, wxAppSet.authorizer_refresh_token).authorizer_access_token;
                    // var data = Senparc.Weixin.WxOpen.AdvancedAPIs.Template.TemplateApi.Add(authToken, temptype, intKws);
                    var url2 = "https://api.weixin.qq.com/cgi-bin/wxopen/template/add?access_token=" + authToken2;
                    var obj2 = new PostAddTemplete();
                    obj2.id = model.temptype;
                    switch (model.temptype)
                    {
                        case "AT0005"://付款成功通知

                            obj2.keyword_id_list = new int[5] { 13, 16, 22, 27, 3 };
                            break;
                        case "AT0006"://付款失敗通知
                            obj2.keyword_id_list = new int[4] { 10, 11, 20, 2 };
                            break;
                        case "AT0008"://待付款提醒
                            obj2.keyword_id_list = new int[5] { 8, 33, 6, 9, 4 };
                            break;
                        case "AT0036"://退款通知
                            obj2.keyword_id_list = new int[5] { 14, 65, 4, 35, 5 };
                            break;
                        default:
                            _result.success = false;
                            _result.message = "未知模板類型";
                            return _result;
                            break;
                    }

                    var data2 = JsonConvert.DeserializeObject<AddTempleteResult>(SissO2O.Framework.Common.NetHelper.WxAppHttpPost(url2, obj2, SerializationType.Json));
                    Logger.Debug("data=" + JsonConvert.SerializeObject(data2));
                    if (data2.errcode == 0)
                    {
                        var templete = new t_wxa_templete();
                        templete = new t_wxa_templete();
                        templete.operdate = DateTime.Now;
                        templete.shopid = shopid;
                        templete.templete_id = data2.template_id;
                        templete.templete_type = model.temptype;
                        templete.keyword_id_list = obj2.keyword_id_list.ToList().ToString();
                        _wxaTempleteService.Add(templete);
                        _wxaTempleteService.Commit();
                    }
                    else
                    {
                        _result.message = "錯誤代碼:" + data2.errcode + "  " + data2.errmsg;
                        _result.success = false;
                    }
                }
                Logger.Debug("wxaTemplete=" + JsonConvert.SerializeObject(wxaTemplete));

                var temppleteModel = new WxaTempleteModel();
                temppleteModel.template_id = wxaTemplete.templete_id;
                temppleteModel.page = model.page;
                temppleteModel.color = "#173177";
                temppleteModel.emphasis_keyword = model.emphasis_keyword;
                temppleteModel.form_id = model.form_id;
                temppleteModel.touser = model.openid;

                switch (model.temptype)
                {
                    case "AT0005"://付款成功通知
                        temppleteModel.data = JsonConvert.DeserializeObject<PaySuccessTemplete>(model.content);
                        break;
                    case "AT0006"://付款失敗通知
                        temppleteModel.data = JsonConvert.DeserializeObject<PayFailTemplete>(model.content);
                        break;
                    case "AT0008"://待付款提醒
                        temppleteModel.data = JsonConvert.DeserializeObject<PayWaitTemplete>(model.content);
                        break;
                    case "AT0036"://退款通知
                        temppleteModel.data = JsonConvert.DeserializeObject<PayRefundTemplete>(model.content);
                        break;
                    default:
                        _result.success = false;
                        _result.message = "未知模板類型";
                        return _result;
                        break;
                }
                Logger.Debug("temppleteModel=" + JsonConvert.SerializeObject(temppleteModel));
                var componentToken = Senparc.Weixin.MP.Sample.CommonService.Custom.TokenHelper.GetComponentAccessToken(component_AppId, component_Secret).component_access_token;
                Logger.Debug("componentToken=" + componentToken);
                var authToken = Senparc.Weixin.MP.Sample.CommonService.Custom.TokenHelper.GetAuthorizerAccessToken(component_AppId, componentToken, wxAppSet.appid, wxAppSet.authorizer_refresh_token).authorizer_access_token;
                Logger.Debug("authToken=" + authToken);
                var url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" + authToken;
                Logger.Debug("url2333=" + url);
                var result = Senparc.Weixin.CommonAPIs.CommonJsonSend.Send<BaseWxResult>(authToken, url, temppleteModel);
                //   var strResult = SissO2O.Framework.Common.NetHelper.WxAppHttpPost(url, temppleteModel, SerializationType.Json);
                // var strResult = SissO2O.Framework.Common.PostDataToUrl.PostData(url, JsonConvert.SerializeObject(temppleteModel));

                Logger.Debug("strResult=" + JsonConvert.SerializeObject(result));

                // var result = JsonConvert.DeserializeObject<BaseWxResult>(strResult);
                if (result.errcode != 0)
                {
                    _result.message = "錯誤代碼:" + result.errcode + " " + result.errmsg;
                    _result.success = false;
                    Logger.Error("商戶:" + shopid + "小程序發佈模板消息出錯" + "錯誤代碼:" + result.errcode + " " + result.errmsg);
                }
            }
            catch (Exception ex)
            {
                _result.message = ex.Message;
                _result.success = false;
                Logger.Error("商戶:" + JsonConvert.SerializeObject(model) + "小程序發佈模板消息出錯,由於:" + ex.Message + "錯誤代碼:" + ex.StackTrace);
            }
            return _result;
        }
        #endregion

  

後臺調用接口的代碼加密

//測試發送模板消息
            var postSendTemplete = new PostSendTemplete();
            postSendTemplete.form_id = order.form_id;
            postSendTemplete.openid = order.openid;
            postSendTemplete.page = "";
            postSendTemplete.shopid = model.shopid;
            postSendTemplete.temptype = "AT0005";
            postSendTemplete.content = Common.Common.PaySuccessTempleteContentToString(shopInfoModel.shopname, order.branchname, model.orderno, order.orderdesc, order.amt);
            Logger.Debug("發送模板消息接口1:" + JsonConvert.SerializeObject(postSendTemplete));
            var tempUrl = "http://wxapp.sissyun.com.cn/api/WxAppApi/SendTemplete";
            var tempResult = SissO2O.Framework.Common.NetHelper.WxAppHttpPost(tempUrl, postSendTemplete, SerializationType.Json);

  此處的keyword關鍵字,命名從1開始,url

/// <summary>
        /// 獲取支付成功的模板消息內容
        /// </summary>
        /// <param name="shopname">商家名稱</param>
        /// <param name="branchname">門店名稱</param>
        /// <param name="orderno">訂單編號</param>
        /// <param name="productinfo">商品信息</param>
        /// <param name="amt">付款金額 </param>
        /// <returns></returns>
        public static string PaySuccessTempleteContentToString(string shopname, string branchname, string orderno, string productinfo, decimal amt)
        {
            var model = new PaySuccessTemplete()
            {
                keyword1 = new TempleteItemData()
                {
                    value = shopname,
                },
                keyword2 = new TempleteItemData()
                {
                    value = branchname,
                },
                keyword3 = new TempleteItemData()
                {
                    value = orderno,
                },
                keyword4 = new TempleteItemData()
                {
                    value = productinfo,
                },
                keyword5 = new TempleteItemData()
                {
                    value = amt.ToString("0.00") + "元"
                }
            };
            return JsonConvert.SerializeObject(model);
        }
效果
 

效果 第一條的關鍵字排列錯誤,第二條爲正確的關鍵字組合  ,關鍵字組合有數量限制

相關文章
相關標籤/搜索