小程序模板消息--新增模板和删除模板

调用接口:组合模板并添加至帐号下的个人模板库  

http请求方式:POST
https://api.weixin.qq.com/cgi-bin/wxopen/template/add?access_token=ACCESS_TOKEN

POST数据示例如下:

{
"id":"AT0002",
"keyword_id_list":[3,4,5]
}
@{
    ViewBag.Title = "模板消息列表";
    Layout = "~/Areas/Admin/Views/Shared/_Layout.cshtml";
}

<style>
    .page-count {
         40px;
    }

    .order-count {
        font-size: 1rem;
        font-weight: 600;
    }
</style>


<div class="row-content am-cf" id="templete-set">

    <div class="row">

        <div class="am-u-sm-12 am-u-md-12 am-u-lg-12">
            <div class="widget am-cf">
                <div class="widget-head am-cf">
                    <div class="widget-title am-fl">模板消息设置</div>
                    <div class="widget-function am-fr">
                        <a href="javascript:;" class="am-icon-cog"></a>
                    </div>
                </div>
                <div class="widget-body ">

                    <form class="am-form tpl-form-line-form">
                        <div class="am-form-group">
                            <label for="user-name" class="am-u-sm-3 am-form-label">付款成功通知 <span class="tpl-form-line-small-title"></span></label>
                            <div class="am-u-sm-5">
                                <input type="text" class="tpl-form-input" v-model="paysuccesstempid" id="pay-success" name="pay-success" placeholder="点击右侧按钮获取模板ID" readonly>

                            </div>

                            <div class="am-u-sm-4">
                                <input type="button" class="tpl-form-input am-btn am-btn-success" id="get-pay-success-temp" name="get-pay-success-temp" value="获取模板ID" v-on:click="gettemplete('AT0005')">
                                <input type="button" class="tpl-form-input am-btn am-btn-danger" id="del-pay-success-temp" name="del-pay-success-temp" value="删除模板ID" v-on:click="deltemplete('AT0005')">

                            </div>
                        </div>

                        <div class="am-form-group">
                            <label for="user-name" class="am-u-sm-3 am-form-label">付款失败通知 <span class="tpl-form-line-small-title"></span></label>
                            <div class="am-u-sm-5">
                                <input type="text" class="tpl-form-input " v-model="payfalitempid" id="pay-fail" name="pay-fail" placeholder="点击右侧按钮获取模板ID" readonly>

                            </div>

                            <div class="am-u-sm-4">
                                <input type="button" class="tpl-form-input am-btn am-btn-success" id="get-pay-fail-temp" name="get-pay-fail-temp" value="获取模板ID" v-on:click="gettemplete('AT0006')">
                                <input type="button" class="tpl-form-input am-btn am-btn-danger" id="del-pay-fail-temp" name="del-pay-fail-temp" value="删除模板ID" v-on:click="deltemplete('AT0006')">

                            </div>
                        </div>


                        <div class="am-form-group">
                            <label for="user-name" class="am-u-sm-3 am-form-label">待付款提醒 <span class="tpl-form-line-small-title"></span></label>
                            <div class="am-u-sm-5">
                                <input type="text" class="tpl-form-input " v-model="paywaittempid" id="pay-wait" name="pay-wait" placeholder="点击右侧按钮获取模板ID" readonly>

                            </div>

                            <div class="am-u-sm-4">
                                <input type="button" class="tpl-form-input am-btn am-btn-success" id="get-pay-wait-temp" name="get-pay-wait-temp" value="获取模板ID" v-on:click="gettemplete('AT0008')">
                                <input type="button" class="tpl-form-input am-btn am-btn-danger" id="del-pay-wait-temp" name="del-pay-wait-temp" value="删除模板ID" v-on:click="deltemplete('AT0008')">
                            </div>
                        </div>

                        <div class="am-form-group">
                            <label for="user-name" class="am-u-sm-3 am-form-label">退款通知 <span class="tpl-form-line-small-title"></span></label>
                            <div class="am-u-sm-5">
                                <input type="text" class="tpl-form-input " id="pay-refund" v-model="payrefundtempid" name="pay=refund" placeholder="点击右侧按钮获取模板ID" readonly>

                            </div>

                            <div class="am-u-sm-4">
                                <input type="button" class="tpl-form-input am-btn am-btn-success" id="get-pay-refund-temp" name="get-pay-refund-temp" value="获取模板ID" v-on:click="gettemplete('AT0036')">
                                <input type="button" class="tpl-form-input am-btn am-btn-danger" id="del-pay-refund-temp" name="del-pay-refund-temp" value="删除模板ID" v-on:click="deltemplete('AT0036')">
                            </div>
                        </div>

                    </form>
                </div>
            </div>
        </div>
    </div>

    <div class="am-modal am-modal-alert" tabindex="-1" id="alert-msg">
        <div class="am-modal-dialog">
            <div class="am-modal-hd">提示</div>
            <div class="am-modal-bd">
                {{tipmessage}}
            </div>
            <div class="am-modal-footer">
                <span class="am-modal-btn">确定</span>
            </div>
        </div>
    </div>
</div>

<script type="text/javascript">

    var basicset = new Vue({
        el: '#templete-set',
        data: {
            paysuccesstempid: '',//支付成功
            payfalitempid: '',//支付失败
            paywaittempid: '',//待支付
            payrefundtempid: '',//支付成功
            tipmessage: ''
        },
        computed: {

        },

        mounted: function () {
            var _this = this;
            _this.getdata();
        },
        methods: {
            getdata: function () {
                var _this = this;
                var url = '/Admin/WxaTemplete/GetTempleteList';
                var param = {

                };
                axios.post(url, param)
                    .then(function (res) {
                        console.log(res);
                        var result = res.data;
                        if (result.success) {
                            _this.paysuccesstempid = "";
                            _this.payfalitempid = "";
                            _this.paywaittempid = "";
                            _this.payrefundtempid = "";
                            var templetes = result.data;
                            for (var i = 0; i < templetes.length; i++) {
                                var templete = templetes[i];
                                if (templete.templete_type == "AT0005") {
                                    //付款成功通知
                                    _this.paysuccesstempid = templete.templete_id;
                                } else if (templete.templete_type == "AT0006") {
                                    //付款失败通知
                                    _this.payfalitempid = templete.templete_id;
                                } else if (templete.templete_type == "AT0008") {
                                    //待付款提醒
                                    _this.paywaittempid = templete.templete_id;
                                } else if (templete.templete_type == "AT0036") {
                                    //退款通知
                                    _this.payrefundtempid = templete.templete_id;
                                }
                            }
                        } else {
                            _this.tipmessage = res.data.message;
                            $('#alert-msg').modal('open');
                        }
                    })
                 .catch(function (err) {

                 });
            },
            gettemplete: function (type) {
                var _this = this;
                keyword = '';
                if (type == "AT0005") {
                    //付款成功通知
                    //{"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元"}
                    keyword = '13,16,22,27,3';
                } else if (type == "AT0006") {
                    //付款失败通知
                    //{"keyword_id":10,"name":"订单编号","example":"12381238101231"},{"keyword_id":11,"name":"订单金额","example":"123元"},{"keyword_id":20,"name":"商品名称","example":"123"}{"keyword_id":2,"name":"失败原因","example":"网络异常"}
                    keyword = '10,11,20,2';
                } else if (type == "AT0008") {
                    //待付款提醒
                    //{"keyword_id":8,"name":"订单号","example":"12345678"}{"keyword_id":33,"name":"待付金额","example":"100元"},{"keyword_id":6,"name":"商品详情","example":"桔子水晶酒店(北京世贸天阶店),商务大床房(无早)"},,{"keyword_id":9,"name":"支付提醒","example":"请在13:57之前完成支付"},{"keyword_id":4,"name":"下单时间","example":"2016年8月8日"}
                    keyword = '8,33,6,9,4';
                } else if (type == "AT0036") {
                    //退款通知

                    //{"keyword_id":14,"name":"订单编号","example":"NO20161128001"},{"keyword_id":37,"name":"商品详情","example":"红盒子社区 1号会议室"}{"keyword_id":4,"name":"退款原因","example":"运营商忙碌"},{"keyword_id":5,"name":"退款时间","example":"2016年11月"},{"keyword_id":35,"name":"退款商家","example":"一口酥蛋糕店"}
                    keyword = '14,65,4,35,5';
                }
                var url = '/Admin/WxaTemplete/AddTemplete';
                var param = {
                    temptype: type,
                    keyword: keyword
                };
                axios.post(url, param)
                    .then(function (res) {
                        console.log(res);
                        var result = res.data;
                        if (result.success) {
                            alert("获取模板ID成功");
                            _this.getdata();
                        } else {
                            _this.tipmessage = res.data.message;
                            $('#alert-msg').modal('open');
                        }
                    })
                 .catch(function (err) {

                 });
            },
            deltemplete: function (type) {
                var _this = this;
                var url = '/Admin/WxaTemplete/DelTemplete';
                var param = {
                    temptype: type,

                };
                axios.post(url, param)
                    .then(function (res) {
                        console.log(res);
                        var result = res.data;
                        if (result.success) {
                            alert("删除模板ID成功");
                            _this.getdata();
                        } else {
                            _this.tipmessage = res.data.message;
                            $('#alert-msg').modal('open');
                        }
                    })
                 .catch(function (err) {

                 });
            }

        }
    });
    Vue.filter('money', function (value, type) { //type单位如元
        return 'u00A5' + parseFloat(parseFloat(value).toFixed(2)) + type
    });

</script>

  后台代码:

  [HttpPost]
        public ActionResult AddTemplete(string temptype, string keyword)
        {
            if (string.IsNullOrWhiteSpace(temptype))
            {
                _result.success = false;
                _result.message = "模板类型参数为空";
                return Json(_result, JsonRequestBehavior.DenyGet);
            }
            if (string.IsNullOrWhiteSpace(keyword))
            {
                _result.success = false;
                _result.message = "模板关键词列表";
                return Json(_result, JsonRequestBehavior.DenyGet);
            }
            if (_wxAppTempleteService.Exists(a => a.shopid == shopid && a.templete_type == temptype))
            {
                _result.success = false;
                _result.message = "该类型模板已存在,请先进行删除操作";
                return Json(_result, JsonRequestBehavior.DenyGet);
            }
            var strKws = keyword.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
            var intKws = new int[strKws.Length];
            for (int i = 0; i < strKws.Length; i++)
            {
                int intKw = 0;
                if (!int.TryParse(strKws[i], out intKw))
                {
                    _result.success = false;
                    _result.message = "开发者自行组合好的模板关键词列表存在非数字";
                    return Json(_result, JsonRequestBehavior.DenyGet);
                }
                intKws[i] = intKw;
            }
            try
            {

                var wxAppSet = _wxAppSetService.Get(a => a.shopid == shopid);
                if (wxAppSet == null)
                {
                    _result.success = false;
                    _result.message = "未找到该商户小程序设置";
                    return Json(_result, JsonRequestBehavior.DenyGet);
                }
                var componentToken = Senparc.Weixin.MP.Sample.CommonService.Custom.TokenHelper.GetComponentAccessToken(component_AppId, component_Secret).component_access_token;
                var authToken = Senparc.Weixin.MP.Sample.CommonService.Custom.TokenHelper.GetAuthorizerAccessToken(component_AppId, componentToken, wxAppSet.appid, wxAppSet.authorizer_refresh_token).authorizer_access_token;
                // var data = Senparc.Weixin.WxOpen.AdvancedAPIs.Template.TemplateApi.Add(authToken, temptype, intKws);
                var url = "https://api.weixin.qq.com/cgi-bin/wxopen/template/add?access_token=" + authToken;
                var obj = new PostAddTemplete()
                {
                    id = temptype,
                    keyword_id_list = intKws
                };
                var data = JsonConvert.DeserializeObject<AddTempleteResult>(SissO2O.Framework.Common.NetHelper.WxAppHttpPost(url, obj, SerializationType.Json));
                Logger.Debug("data=" + JsonConvert.SerializeObject(data));
                if (data.errcode == 0)
                {
                    var templete = _wxAppTempleteService.Get(a => a.shopid == shopid && a.templete_type == temptype);
                    if (templete == null)
                    {
                        templete = new t_wxa_templete();
                        templete.operdate = DateTime.Now;
                        templete.shopid = shopid;
                        templete.templete_id = data.template_id;
                        templete.templete_type = temptype;
                        templete.keyword_id_list = keyword;
                        _wxAppTempleteService.Add(templete);
                        _wxAppTempleteService.Commit();
                    }
                    else
                    {
                        templete.operdate = DateTime.Now;
                        templete.templete_id = data.template_id;
                        templete.templete_type = temptype;
                        templete.keyword_id_list = keyword;
                        _wxAppTempleteService.Update(templete);
                        _wxAppTempleteService.Commit();
                    }
                }
                else
                {
                    _result.message = "错误代码:" + data.errcode + "  " + data.errmsg;
                    _result.success = false;
                }
            }
            catch (Exception ex)
            {
                _result.success = false;
                _result.message = ex.Message;
                Logger.Error("商户" + shopid + "添加模板类型:" + temptype + "出错,因为:" + ex.Message + " 错误代码行:" + ex.StackTrace);
            }

            return Json(_result, JsonRequestBehavior.DenyGet);
        }

        #region 删除模板消息
        [HttpPost]
        public ActionResult DelTemplete(string temptype)
        {
            if (string.IsNullOrWhiteSpace(temptype))
            {
                _result.success = false;
                _result.message = "模板类型参数为空";
                return Json(_result, JsonRequestBehavior.DenyGet);
            }
            var wxAppSet = _wxAppSetService.Get(a => a.shopid == shopid);
            if (wxAppSet == null)
            {
                _result.success = false;
                _result.message = "未找到该商户小程序设置";
                return Json(_result, JsonRequestBehavior.DenyGet);
            }
            var wxaTemplete = _wxAppTempleteService.Get(a => a.shopid == shopid && a.templete_type == temptype);
            if (wxaTemplete == null)
            {
                _result.success = false;
                _result.message = "未关联到模板ID";
                return Json(_result, JsonRequestBehavior.DenyGet);
            }
            try
            {
                var componentToken = Senparc.Weixin.MP.Sample.CommonService.Custom.TokenHelper.GetComponentAccessToken(component_AppId, component_Secret).component_access_token;
                var authToken = Senparc.Weixin.MP.Sample.CommonService.Custom.TokenHelper.GetAuthorizerAccessToken(component_AppId, componentToken, wxAppSet.appid, wxAppSet.authorizer_refresh_token).authorizer_access_token;
                // var data = Senparc.Weixin.WxOpen.AdvancedAPIs.Template.TemplateApi.Add(authToken, temptype, intKws);
                var url = "https://api.weixin.qq.com/cgi-bin/wxopen/template/del?access_token=" + authToken;
                var obj = new PostDelTemplete()
                {
                    template_id = wxaTemplete.templete_id,
                };
                var data = JsonConvert.DeserializeObject<BaseWxResult>(SissO2O.Framework.Common.NetHelper.WxAppHttpPost(url, obj, SerializationType.Json));
                Logger.Debug("data=" + JsonConvert.SerializeObject(data));
                if (data.errcode != 0)
                {
                    _result.success = false;
                    _result.message = "错误代码:" + data.errcode + " " + data.errmsg;
                }
                else
                {
                    _wxAppTempleteService.Delete(wxaTemplete);
                    _wxAppTempleteService.Commit();
                }
            }
            catch (Exception ex)
            {
                Logger.Error("商户" + shopid + "删除模板类型:" + temptype + "出错,因为:" + ex.Message + " 错误代码行:" + ex.StackTrace);
                _result.message = ex.Message;
                _result.success = false;
            }
            return Json(_result, JsonRequestBehavior.DenyGet);
        }
        #endregion

  

注意点:关键字模板设置 ,组合成int类型数组,得自己调用接口:

获取模板库某个模板标题下关键词库

 http请求方式:POST
https://api.weixin.qq.com/cgi-bin/wxopen/template/library/get?access_token=ACCESS_TOKEN

示例如下:

 

原文地址:https://www.cnblogs.com/WQ1992/p/8951285.html