找回密码
 立即注册

QQ登录

只需一步,快速开始

wchangwei 讲师达人认证 活字格认证
金牌服务用户   /  发表于:2019-5-15 10:26  /   查看:28449  /  回复:41
本帖最后由 wchangwei 于 2019-5-15 11:01 编辑

本人不懂代码,经官方大神多次指导,终于打通微信模板消息通知,特将微信服务号如何发送模板消息详细教程给大家推荐下:
第一 微信服务号配置信息:
1.1 微信服务号需要官方认证
1.2 添加功能插件,开通模板消息
1.3 微信服务号与活字格集成,论坛里面已有相关案例
https://gcdn.grapecity.com.cn/fo ... hlight=%CE%A2%D0%C5

第二  活字格配置
2.1 解压附件 SendWechatTempInfo.zip,用VS打开SendWechatTempInfo.sln文件
image.png364814452.png
其中你们微信公众的APPID和你们微信公众的AppSecret,在做微信服务号与活字格集成时已用到,可直接复制过来。
image.png480286254.png
2.2 通过VS生成后,找到生成的dll文件
image.png418381041.png
2.3 在活字格中文件--设置--自定义web api 中上传SendWechatTempInfo.dll 文件

2.4 配置需要发送微信模板消息的页面
image.png10302123.png
2.5 设置发送按钮 js命令
image.png136650389.png
此处注意设置的关键字与JS命令中的关键字一致。
JS代码如下:
var url=Forguncy.ForguncyData.ForguncyRoot+'customapi/wechat/SendTemplateMessage';

var data =
{
    "openid": Forguncy.Page.getCell("openid").getValue(),
    "first": Forguncy.Page.getCell("first").getValue(),
    "keyword1": Forguncy.Page.getCell("keyword1").getValue(),
    "keyword2": Forguncy.Page.getCell("keyword2").getValue(),
    "keyword3": Forguncy.Page.getCell("keyword3").getValue(),
    "keyword4": Forguncy.Page.getCell("keyword4").getValue(),
    "remark": Forguncy.Page.getCell("remark").getValue(),
     "url": Forguncy.Page.getCell("url").getValue()
};

$.post(url, data, function (result) {});


上述操作即可实现微信服务号模板消息。

延申两个知识点
1. 同一模板消息多处使用
设置不同的关键字和js代码略改即可,如下图
image.png444363707.png
image.png734493407.png

2 设置多个微信通知消息模板
需要用VS打开SendWechatTempInfo.sln文件,复制如下代码修改即可,修改完成后重新生成上传即可
image.png233330077.png
上传后会自动生成 新的post api 地址
image.png430012816.png
发送按钮调用js命令即可
image.png472098693.png


image.png68612059.png
image.png331580809.png

SendWechatTempInfo.zip

6.96 MB, 下载次数: 1350

评分

参与人数 5金币 +666 满意度 +20 收起 理由
laity + 5
软件圈 + 5
zgchen + 5 很给力!
amtath + 5 很给力!
Tracy.Liu + 666 太棒了!双击666~感谢分享!

查看全部评分

41 个回复

倒序浏览
zgchen
注册会员   /  发表于:2019-12-2 14:54:01
推荐
企业微信也可以用您这个吗?
回复 使用道具 举报
Simon.hu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2019-5-16 11:32:26
板凳
感谢分享哟~
回复 使用道具 举报
hannanjd
金牌服务用户   /  发表于:2019-5-24 09:34:16
地板
请问一下  我用了你的方法   第一个发送成功了,第二条模板消息  也重命名了  但是上传之后 没有生成一个行的API是不是还有其他地方需要修改?!
回复 使用道具 举报
wchangwei讲师达人认证 活字格认证
金牌服务用户   /  发表于:2019-5-24 10:08:48
4#
hannanjd 发表于 2019-5-24 09:34
请问一下  我用了你的方法   第一个发送成功了,第二条模板消息  也重命名了  但是上传之后 没有生成一个行 ...

设置多个消息模板  需要改的地方我标注了啊  
回复 使用道具 举报
wchangwei讲师达人认证 活字格认证
金牌服务用户   /  发表于:2019-5-24 10:09:52
5#
wchangwei 发表于 2019-5-24 10:08
设置多个消息模板  需要改的地方我标注了啊

修改post  下面我标注的那个地方,修改后这个地方需要与js代码对应下
回复 使用道具 举报
hannanjd
金牌服务用户   /  发表于:2019-5-24 10:12:32
6#
wchangwei 发表于 2019-5-24 10:09
修改post  下面我标注的那个地方,修改后这个地方需要与js代码对应下

就是重命名那个地方吗?? 我也修改了   还有模板ID哪些都改了    但是没有自动生成新的api~   好费解额。。
回复 使用道具 举报
hannanjd
金牌服务用户   /  发表于:2019-5-24 10:15:54
7#
hannanjd 发表于 2019-5-24 10:12
就是重命名那个地方吗?? 我也修改了   还有模板ID哪些都改了    但是没有自动生成新的api~   好费解额 ...

如果你方便的话。。 能不能随便发我一个你的dll 或者另一个VS工程文件   把appid哪些删掉    我看我上传能不能生成出新的API吗?     麻烦你了。我弄了好久   都只有一个API
回复 使用道具 举报
Simon.hu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2019-5-24 16:34:31
8#
hannanjd 发表于 2019-5-24 10:15
如果你方便的话。。 能不能随便发我一个你的dll 或者另一个VS工程文件   把appid哪些删掉    我看我上传 ...

你直接找一下我们的小姐姐,tracy
回复 使用道具 举报
wchangwei讲师达人认证 活字格认证
金牌服务用户   /  发表于:2019-5-24 16:44:15
9#
hannanjd 发表于 2019-5-24 10:15
如果你方便的话。。 能不能随便发我一个你的dll 或者另一个VS工程文件   把appid哪些删掉    我看我上传 ...

namespace SendWechatTempInfo
{
    public class Wechat: ForguncyApi
    {
        static string AppID = "微信ID";
        static string AppSecret = "微信密钥";
        static string _lastAccessToken;
        static DateTime _lastAccessTokenTimeOut;

        [Post] /*此处第一个post*/
        public void SendTemplateMessage()
        {
            var task = this.Context.Request.ReadFormAsync();
            task.Wait();
            var form = task.Result;
            var openid = form["openid"];
            var first = form["first"];
            var keyword1 = form["keyword1"];
            var keyword2 = form["keyword2"];
            var keyword3 = form["keyword3"];
            var keyword4 = form["keyword4"];
            var remark = form["remark"];
            var templateMessageid = "消息ID";
            var url = form["url"];
            var color = "#1C86EE";
            var colorb = "#525252";

            var msg = new TemplateMsg { touser = openid, template_id = templateMessageid, url = url };
            msg.data = new Dictionary<string, TemplateDataItem>();
            msg.data.Add("first", new TemplateDataItem { value = first, color = color });
            msg.data.Add("keyword1", new TemplateDataItem { value = keyword1, color = color });
            msg.data.Add("keyword2", new TemplateDataItem { value = keyword2, color = color });
            msg.data.Add("keyword3", new TemplateDataItem { value = keyword3, color = color });
            msg.data.Add("keyword4", new TemplateDataItem { value = keyword4, color = color });
            msg.data.Add("remark", new TemplateDataItem { value = remark, color = colorb });
            var data = JsonConvert.SerializeObject(msg);
            string postUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + GetAccessToken();
            var response = new PostData().Post(postUrl, data);
            if (string.IsNullOrEmpty(response))
            {
                Trace.Write("openWeixin get user info failed.(1), result: " + response);

            }
        }
        [Post] /*此处第二个post*/
        public void SendTemplateMessage1()
        {
            var task = this.Context.Request.ReadFormAsync();
            task.Wait();
            var form = task.Result;
            var openid = form["openid"];
            var first = form["first"];
            var keyword1 = form["keyword1"];
            var keyword2 = form["keyword2"];
            var keyword3 = form["keyword3"];
            var keyword4 = form["keyword4"];
            var keyword5 = form["keyword5"];
            var remark = form["remark"];
            var templateMessageid = "消息ID";
            var url = form["url"];
            var color = "#1C86EE";
            var colorb = "#525252";

            var msg = new TemplateMsg { touser = openid, template_id = templateMessageid, url = url };
            msg.data = new Dictionary<string, TemplateDataItem>();
            msg.data.Add("first", new TemplateDataItem { value = first, color = color });
            msg.data.Add("keyword1", new TemplateDataItem { value = keyword1, color = color });
            msg.data.Add("keyword2", new TemplateDataItem { value = keyword2, color = color });
            msg.data.Add("keyword3", new TemplateDataItem { value = keyword3, color = color });
            msg.data.Add("keyword4", new TemplateDataItem { value = keyword4, color = color });
            msg.data.Add("keyword5", new TemplateDataItem { value = keyword5, color = color });
            msg.data.Add("remark", new TemplateDataItem { value = remark, color = colorb });
            var data = JsonConvert.SerializeObject(msg);
            string postUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + GetAccessToken();
            var response = new PostData().Post(postUrl, data);
            if (string.IsNullOrEmpty(response))
            {
                Trace.Write("openWeixin get user info failed.(1), result: " + response);

            }
        }
/*下面的代码 都不用动,复制了一部分*/
    protected string GetAccessToken()
        {
            if (!string.IsNullOrEmpty(_lastAccessToken))
            {
                if (DateTime.Now < _lastAccessTokenTimeOut)
                {
                    return _lastAccessToken;
                }
            }
            string result = "";
            try
            {

                PostData postData = new PostData();
                result = postData.Get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + AppID + "&secret=" + AppSecret);
                var jd = JsonConvert.DeserializeObject(result) as JObject;
                _lastAccessToken = jd["access_token"].ToString();
                _lastAccessTokenTimeOut = DateTime.Now.AddSeconds((int)jd["expires_in"]);
                return _lastAccessToken;
            }
            catch (Exception)
            {
                Trace.WriteLine("GetAccessToken Failed");

                if (result != null)
                {

                    Trace.WriteLine(result);
                }
回复 使用道具 举报
hannanjd
金牌服务用户   /  发表于:2019-5-27 10:36:18
10#
wchangwei 发表于 2019-5-24 16:44
namespace SendWechatTempInfo
{
    public class Wechat: ForguncyApi

谢谢
回复 使用道具 举报
12345下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部