zoukankan      html  css  js  c++  java
  • 小程序模板消息--新增模板和删除模板

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

    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

    示例如下:

     

  • 相关阅读:
    Vue2 后台管理系统解决方案
    vuejs 和 element 搭建的一个后台管理界面
    Composer 是什么
    解决无限 This file is indented with tabs instead of 4 spaces
    (七)boost库之单例类
    (六)boost库之内存管理shared_ptr
    (五)boost库之随机数random
    (四)boost库之正则表达式regex
    (二)boost库之字符串格式化
    (一)boost库之日期、时间
  • 原文地址:https://www.cnblogs.com/WQ1992/p/8951285.html
Copyright © 2011-2022 走看看