微信公众号开发之模板消息
<h1 class="_1RuRku"> </h1><p>欢迎留言、转发</p>
<p>微信极速开发系列文章:点击这里</p>
<blockquote>
<p>最近有点小感冒,文章的更新进度延误了一些,希望此系列文章对你<code>研究微信公众开发</code>有帮助。前几篇文章介绍了微信支付。 公众号支付、微信扫码支付、刷卡支付、微信买单</p>
</blockquote>
<p>此文来聊聊微信中的业务通知----微信模板消息</p>
<h3>如何查看是否有权限</h3>
<blockquote>
<p>在交流群中,总是有人问<code>个人订阅号</code>、<code>认证的订阅号</code>、<code>服务号</code> 、<code>认证的服务号</code> 某个接口是否有权限使用。</p>
</blockquote>
<p>其实这个问题很简单,在【微信公众平台】现在已经可以直接查看<code>自己</code>的公众号都能使用那些接口。</p>
<blockquote>
<p>登录【微信公众平台】进入首页>开发>接口权限</p>
</blockquote>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="1594" data-height="660"><img src="https://upload-images.jianshu.io/upload_images/1342351-3c8ea3dba9e15e07.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp" data-original-src="//upload-images.jianshu.io/upload_images/1342351-3c8ea3dba9e15e07.png" data-original-width="1594" data-original-height="660" data-original-format="image/png" data-original-filesize="130668" data-image-index="0"></div>
</div>
<div class="image-caption">模板消息-权限.png</div>
</div>
<h3>添加模板消息插件</h3>
<blockquote>
<p>注意必须是认证的服务号</p>
</blockquote>
<p>登录【微信公众平台】进入首页>添加插件功能>找到模板消息按照指引流程操作即可。</p>
<h3>模板消息接口使用规则</h3>
<blockquote>
<p>官方文档 发送消息-模板消息接口 以及 模板消息运营规范</p>
</blockquote>
<p>关于使用规则,请注意:<br>1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限;<br>2、需要选择公众账号服务所处的2个行业,每月可更改1次所选行业;<br>3、在所选择行业的模板库中选用已有的模板进行调用;<br>4、每个账号可以同时使用25个模板。<br>5、当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制。【2014年11月18日将接口调用频率从默认的日1万次提升为日10万次,可在MP登录后的开发者中心查看】。当账号粉丝数超过10W/100W/1000W时,模板消息的日调用上限会相应提升,以公众号MP后台开发者中心页面中标明的数字为准。</p>
<h3>添加模板消息</h3>
<p>按照上文<code>添加模板消息插件</code>之后【微信公众平台】首页左侧栏就会出现<code>模板消息</code>菜单,收取点击进去需要同意协议并设置公众账号服务所处的2个行业。</p>
<p>以上设置好了就可以通过关键词查模板库中已有的模板,如果没有找到可以自己申请。</p>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="2378" data-height="880"><img src="https://upload-images.jianshu.io/upload_images/1342351-e3aa3943548bbd4a.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp" data-original-src="//upload-images.jianshu.io/upload_images/1342351-e3aa3943548bbd4a.png" data-original-width="2378" data-original-height="880" data-original-format="image/png" data-original-filesize="220399" data-image-index="1"></div>
</div>
<div class="image-caption">模板消息-添加模板.png</div>
</div>
<p>找到合适的模板消息点击详情,进去查看模板详情,如果需要添加即可。添加完成会在我的模板中生成模板消息的 <code>模板ID</code>,<code>模板ID</code>在后面会用到。</p>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="1456" data-height="1352"><img src="https://upload-images.jianshu.io/upload_images/1342351-5ae434120cd1be0b.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp" data-original-src="//upload-images.jianshu.io/upload_images/1342351-5ae434120cd1be0b.png" data-original-width="1456" data-original-height="1352" data-original-format="image/png" data-original-filesize="213485" data-image-index="2"></div>
</div>
<div class="image-caption">模板消息-模板详情.png</div>
</div>
<h2>测试号添加模板消息</h2>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="2130" data-height="1096"><img src="https://upload-images.jianshu.io/upload_images/1342351-b24561c99b349254.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp" data-original-src="//upload-images.jianshu.io/upload_images/1342351-b24561c99b349254.png" data-original-width="2130" data-original-height="1096" data-original-format="image/png" data-original-filesize="312215" data-image-index="3"></div>
</div>
<div class="image-caption">测试号添加模板消息.png</div>
</div>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="2150" data-height="452"><img src="https://upload-images.jianshu.io/upload_images/1342351-86b9744487b1cd30.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp" data-original-src="//upload-images.jianshu.io/upload_images/1342351-86b9744487b1cd30.png" data-original-width="2150" data-original-height="452" data-original-format="image/png" data-original-filesize="127553" data-image-index="4"></div>
</div>
<div class="image-caption">测试号添加模板消息.png</div>
</div>
<h2>模板消息接口的使用</h2>
<blockquote>
<p>客观前面都是一些准备工作,端杯茶耐心往下看。先来点实际的看看开源项目中封装的接口是如何使用的。</p>
</blockquote>
<p><code>com.javen.weixin.controller.WeixinMsgController.java</code></p>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="1074" data-height="868"><img src="https://upload-images.jianshu.io/upload_images/1342351-cd897de3173dd2c2.png?imageMogr2/auto-orient/strip|imageView2/2/w/1074/format/webp" data-original-src="//upload-images.jianshu.io/upload_images/1342351-cd897de3173dd2c2.png" data-original-width="1074" data-original-height="868" data-original-format="image/png" data-original-filesize="255783" data-image-index="5"></div>
</div>
<div class="image-caption">模板消息的使用.png</div>
</div>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="750" data-height="1334"><img src="https://upload-images.jianshu.io/upload_images/1342351-da067b01acd1f992.PNG?imageMogr2/auto-orient/strip|imageView2/2/w/750/format/webp" data-original-src="//upload-images.jianshu.io/upload_images/1342351-da067b01acd1f992.PNG" data-original-width="750" data-original-height="1334" data-original-format="image/png" data-original-filesize="125240" data-image-index="6"></div>
</div>
<div class="image-caption">接收到的通知</div>
</div>
<h2>模板消息的封装</h2>
<p>官方参考文档 具体实现 <code>com.jfinal.weixin.sdk.api.TemplateMsgApi.java</code></p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-dart"><code class="language-dart">public <span class="token keyword">class <span class="token class-name">TemplateMsgApi <span class="token punctuation">{
private <span class="token keyword">static String sendApiUrl <span class="token operator">= <span class="token string">"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="<span class="token punctuation">;
<span class="token comment">/**
* 发送模板消息
* @param jsonStr json字符串
* @return {ApiResult}
*/
public <span class="token keyword">static ApiResult <span class="token function">send<span class="token punctuation">(String jsonStr<span class="token punctuation">) <span class="token punctuation">{
String jsonResult <span class="token operator">= HttpUtils<span class="token punctuation">.<span class="token function">post<span class="token punctuation">(sendApiUrl <span class="token operator">+ AccessTokenApi<span class="token punctuation">.<span class="token function">getAccessToken<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">.<span class="token function">getAccessToken<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">, jsonStr<span class="token punctuation">)<span class="token punctuation">;
<span class="token keyword">return <span class="token keyword">new <span class="token class-name">ApiResult<span class="token punctuation">(jsonResult<span class="token punctuation">)<span class="token punctuation">;
<span class="token punctuation">}
<span class="token punctuation">}
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>json数据的封装</p>
<p><code>com.jfinal.weixin.sdk.api.TemplateData.java</code></p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-kotlin"><code class="language-kotlin"><span class="token keyword">public <span class="token keyword">class TemplateData <span class="token punctuation">{
<span class="token keyword">private String touser<span class="token punctuation">;
<span class="token keyword">private String template_id<span class="token punctuation">;
<span class="token keyword">private String url<span class="token punctuation">;
<span class="token keyword">private String topcolor<span class="token punctuation">;
<span class="token keyword">private TemplateItem <span class="token keyword">data<span class="token punctuation">;
<span class="token keyword">public static TemplateData <span class="token function">New<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">return new <span class="token function">TemplateData<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">private <span class="token function">TemplateData<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">this<span class="token punctuation">.data <span class="token operator">= new <span class="token function">TemplateItem<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public String <span class="token function">getTouser<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">return touser<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public TemplateData <span class="token function">setTouser<span class="token punctuation">(String touser<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">this<span class="token punctuation">.touser <span class="token operator">= touser<span class="token punctuation">;
<span class="token keyword">return <span class="token keyword">this<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public String <span class="token function">getTemplate_id<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">return template_id<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public TemplateData <span class="token function">setTemplate_id<span class="token punctuation">(String template_id<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">this<span class="token punctuation">.template_id <span class="token operator">= template_id<span class="token punctuation">;
<span class="token keyword">return <span class="token keyword">this<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public String <span class="token function">getUrl<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">return url<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public TemplateData <span class="token function">setUrl<span class="token punctuation">(String url<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">this<span class="token punctuation">.url <span class="token operator">= url<span class="token punctuation">;
<span class="token keyword">return <span class="token keyword">this<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public String <span class="token function">getTopcolor<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">return topcolor<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public TemplateData <span class="token function">setTopcolor<span class="token punctuation">(String topcolor<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">this<span class="token punctuation">.topcolor <span class="token operator">= topcolor<span class="token punctuation">;
<span class="token keyword">return <span class="token keyword">this<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public TemplateItem <span class="token function">getData<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">return <span class="token keyword">data<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public TemplateData <span class="token function">add<span class="token punctuation">(String key<span class="token punctuation">, String value<span class="token punctuation">, String color<span class="token punctuation">)<span class="token punctuation">{
<span class="token keyword">data<span class="token punctuation">.<span class="token function">put<span class="token punctuation">(key<span class="token punctuation">, new <span class="token function">Item<span class="token punctuation">(value<span class="token punctuation">, color<span class="token punctuation">)<span class="token punctuation">)<span class="token punctuation">;
<span class="token keyword">return <span class="token keyword">this<span class="token punctuation">;
<span class="token punctuation">}
<span class="token comment">/**
* 直接转化成jsonString
* @return {String}
*/
<span class="token keyword">public String <span class="token function">build<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">return JsonUtils<span class="token punctuation">.<span class="token function">toJson<span class="token punctuation">(<span class="token keyword">this<span class="token punctuation">)<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public <span class="token keyword">class TemplateItem extends HashMap<span class="token operator"><String<span class="token punctuation">, Item<span class="token operator">> <span class="token punctuation">{
<span class="token keyword">private static <span class="token keyword">final long serialVersionUID <span class="token operator">= <span class="token operator">-<span class="token number">3728490424738325020L<span class="token punctuation">;
<span class="token keyword">public <span class="token function">TemplateItem<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{<span class="token punctuation">}
<span class="token keyword">public <span class="token function">TemplateItem<span class="token punctuation">(String key<span class="token punctuation">, Item item<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">this<span class="token punctuation">.<span class="token function">put<span class="token punctuation">(key<span class="token punctuation">, item<span class="token punctuation">)<span class="token punctuation">;
<span class="token punctuation">}
<span class="token punctuation">}
<span class="token keyword">public <span class="token keyword">class Item <span class="token punctuation">{
<span class="token keyword">private Object value<span class="token punctuation">;
<span class="token keyword">private String color<span class="token punctuation">;
<span class="token keyword">public Object <span class="token function">getValue<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">return value<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public void <span class="token function">setValue<span class="token punctuation">(Object value<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">this<span class="token punctuation">.value <span class="token operator">= value<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public String <span class="token function">getColor<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">return color<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public void <span class="token function">setColor<span class="token punctuation">(String color<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">this<span class="token punctuation">.color <span class="token operator">= color<span class="token punctuation">;
<span class="token punctuation">}
<span class="token keyword">public <span class="token function">Item<span class="token punctuation">(Object value<span class="token punctuation">, String color<span class="token punctuation">) <span class="token punctuation">{
<span class="token keyword">this<span class="token punctuation">.value <span class="token operator">= value<span class="token punctuation">;
<span class="token keyword">this<span class="token punctuation">.color <span class="token operator">= color<span class="token punctuation">;
<span class="token punctuation">}
<span class="token punctuation">}
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div><br><br>
来源:https://www.cnblogs.com/onesea/p/15043065.html
頁:
[1]