菜单

js_脚本之家,comWechat支付种类

2020年3月19日 - 首页
js_脚本之家,comWechat支付种类

上一篇小说:nodejsWechat民众号支付——5.素材管制接口,大家兑现了增加产能有时素材、管理恒久素材的接口,这一个接口的贯彻,使大家能够推送各类的音讯给客户。本节介绍的从头到尾的经过是有关自定蒿菜单

在Wechat接口开辟中,比很多劳务的运用都离不开Access
Token,Access
Token相当于张开这几个服务的钥匙,不奇怪处境下会在7200秒内失效,重复获取将以致上次取得的Token失效,本文将率先介绍怎样收获Access
Token,再介绍怎么着通过Access
Token来在Wechat内增多自定菊花菜单(注意,开采者须要报名测验账号来测量试验自定桐花菜单,怎么样申请请参见前文)。

1. 自定蒿菜单的牵线

 

自定义菜单能够扶助民众号增添分界面,让客户越来越好越来越快地精晓公众号的成效。关于自定桐花菜单须要精通以下几点内容:

申请Access Token

自定蒿子单最多包含3个顶尖菜单,每一个超级菜单最多包括5个二级菜单。
拔尖菜单最多4个汉字,二级菜单最多7个汉字,多出去的片段将会以“…”替代。
创造自定菊花菜单后,由于Wechat客商端缓存,需求24小时Wechat客户端才会展现出来。测量试验时能够尝尝撤废关切民众账号后再次关心,则足以看见创造后的功效。

赢得Access
Token接口的网站如下:

越多消息查阅官方文书档案:自定同蒿单成立接口

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=[*APPID*]&secret=[*APPSECRET*]

2. 创办自定菊花菜单

方括号内的参数能够在测量试验账号首页找到,被涂抹处就是:

2.1 首先罗列以下操作的号召地址:

图片 1

var api = { ... menu:{ create:prefix+'/menu/create?', //access_token=ACCESS_TOKEN 创建菜单 get:prefix+'/menu/get?', //access_token=ACCESS_TOKE 获取菜单,GET请求 delete:prefix+'/menu/delete?', //access_token=ACCESS_TOKEN 删除菜单,GET请求 getInfo:prefix+'get_current_selfmenu_info?' //access_token=ACCESS_TOKEN 获取自定义菜单配置接口 }}

 

2.2 定义createMenu函数

真正央求的实比方下:

Wechat.prototype.createMenu = function{ var that = this; return new Promise(function{ that.fetchAccessToken{ var url = api.menu.create + 'access_token=' + data.access_token; request({url:url,method:'POST',body:menu,json:true}).then{ var _data = response.body; if(_data.errcode === '0'){ resolve(); }else{ throw new Error('create menu failed!'); } }).catch{ reject;}

图片 2

参数menu由外界业务层传入。为了方便管理,将自定同蒿单的剧情单独写在三个menu.js文件中:

 

/* * 配置自定义菜单 */'use strict'module.exports = { 'button':[ { 'name':'最新', 'type':'click', 'key':'menu_click' }, { 'name':'类别', 'sub_button':[ { 'name':'科幻', 'type':'view', 'url':'music.163.com' }, { 'name':'悬疑', 'type':'scancode_push', 'key':'qr_scan' }, { 'name':'爱情', 'type':'scancode_waitmsg', 'key':'qr_scan_wait' }, { 'name':'教育', 'type':'pic_photo_or_album', 'key':'pic_photo_album' } ] }, { 'name':'地域', 'sub_button':[ { 'name':'大陆', 'type':'pic_weixin', 'key':'pic_weixin' }, { 'name':'欧美', 'type':'location_select', 'key':'location_select' } ] }]}

实行上述倡议后,接口再次回到的内容如下:

里头的品种一时半刻随意写的。我们在作业层weixin.js里面完结自定桐花菜单的利用:

图片 3

wechatApi.deleteMenu{ return wechatApi.createMenu.then{ console.log;

 

保证起见先把原本的美食做法删了,重新制造友好新的菜单。

那边大家就取得了接下去需求运用的access_token:

2.3 定义deleteMenu函数

ZiBTYeRMEMeCEM-Ol9ny_NE-XkgRbsP4snOqTRLh_nfp_UzFsYXVDtguf7jbZt70IQRkmEwU1n0cbxdWmJTdNg
Wechat.prototype.deleteMenu = function(){ var that = this; return new Promise(function{ that.fetchAccessToken{ var url = api.menu.delete + 'access_token=' + data.access_token; request.then{ var _data = response.body; if(_data.errcode === '0'){ resolve(); }else{ throw new Error('delete menu failed!'); } }).catch{ reject;}

,该Token将要7200秒,也正是2个钟头内失效,之后要求再行诉求前面包车型地铁U福睿斯L获取新的Token。

测量试验了瞬间,取关心珍视新关切后Wechat测量检验号并不曾立时表现自定菊花菜单,要等一段时间,略坑。

 

上述正是本文的全部内容,希望对我们的上学抱有利于,也期望我们不吝赐教脚本之家。

创设自定同蒿单日前服务号和通过验证的订阅号均可报名自定同蒿单,成功创立自定蒿子单后,Wechat群众账号分界面如下图所示:

前段时间自定蒿子杆单最多满含七个一级菜单,每一种一级菜单最多包括四个二级菜单。拔尖菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分会以“…”代替。请在乎,创造自定蒿子杆单后,由于Wechat顾客端缓存,必要一定时期才在Wechat顾客端表现出来,最快速的办法是再度关心Wechat大伙儿账号,这样立刻就能够看见自定桐花菜单。

时下自定蒿菜单接口可完结二种等级次序的按键:

click:客商点击click类型按键后,微信服务器会通过消息接口推送类型为event的布局给开荒者,并且带上开关中开荒者填写的key值,开辟者可以透过自定义的key值与客户展开相互。

view:客商点击view类型开关后,Wechat顾客端将会展开开荒者在按键中填入的url值(网页链接),达到张开网页的目标。提出与网页授权获取客商基本音讯接口结合,得到客商的登几人音讯。

开创菜单的接口如下:

https://api.weixin.qq.com/cgi-bin/menu/create?access_token=[*ACCESS_TOKEN*]

里面中括号内的变量ACCESS_TOKEN即为大家眼下取得的Token值。接下来大家开垦一个轻松易行的Apex网页,大家将透过那个网页来创建自定桐花菜单。

WeChatUtilityPage:网页,肩负提交创制自定桐花菜单的申请,并展现创形成功与否的结果;

WechatUtilityController:
调节器类,担当网页背后的切实可行工作逻辑管理。

WeChatUtilityPage的源代码如下:

1 <apex:page standardstylesheets="false" showHeader="false" sidebar="false" controller="WechatUtilityController">
2   <apex:form >
3       <font face="微软雅黑"><strong>菜单服务系列:</strong><br /><br />
4       <apex:commandButton value="注册微信菜单"  action="{!register}" id="register"  />
5         </apex:form>
6   {!msg}
7   <apex:pageMessages />
8 </apex:page>

 

画面极度轻巧,独有一段文字展现以至二个“注册Wechat菜单”按键,点击按键将重罚WechatUtilityController里的register方法,重回音讯通过msg对象来显示,该目的的概念也在WechatUtilityController里,假诺有系统非常,则将通过<apex:
pageMessage/>来突显相当商旅音信。上边大家看来看代码:

 1 public class WechatUtilityController {
 2     public static String msg{get;set;}
 3 
 4     public String accessToken{get;set;}
 5     public WechatUtilityController (){
 6         accessToken = ‘ZiBTYeRMEMeCEM-Ol9ny_NE-XkgRbsP4snOqTRLh_nfp_UzFsYXVDtguf7jbZt70IQRkmEwU1n0cbxdWmJTdNg’;
 7     }
 8     
 9     public void register(){
10         Http h = new Http();
11         HttpRequest req = new HttpRequest();
12         req.setMethod('POST');
13         req.setHeader('Accept-Encoding','gzip,deflate');
14         req.setHeader('Content-Type','text/xml;charset=UTF-8');
15         req.setHeader('User-Agent','Jakarta Commons-HttpClient/3.1');
16         
17         String xml = '{"button":[{"name":"关于我们","sub_button":[{"type":"click","name":"公司简介","key":"公司简介"},{"type":"click","name":"社会责任","key":"社会责任"},{"type":"click","name":"联系我们","key":"联系我们"}]},{"name":"产品服务","sub_button":[{"type":"click","name":"微信平台","key":"微信平台"},{"type":"click","name":"微博应用","key":"微博应用"},{"type":"click","name":"手机网站","key":"手机网站"}]},{"name":"技术支持","sub_button":[{"type":"click","name":"文档下载","key":"文档下载"},{"type":"click","name":"技术社区","key":"技术社区"},{"type":"click","name":"服务热线","key":"服务热线"}]}]}';
18         
19         req.setBody(xml);
20         req.setEndpoint('https://api.weixin.qq.com/cgi-bin/menu/create?access_token=‘ + accessToken);
21         String bodyRes = ‘’;
22 
23    try{
24             HttpResponse res = h.send(req);
25             bodyRes = res.getBody();
26         }
27         catch(System.CalloutException e) {
28             System.debug('Callout error: '+ e);
29             ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, e.getMessage()));
30         }
31         msg = bodyRes;
32     }
33 
34 }

 

位置的代码布局了一段XML文,并将此XML问Post到req.setEnpoint方法里拟定的U大切诺基L。XML里即包罗了对自定蒿子杆单内容的求实定义,该XML的接口必要如下:

图片 4

 

变成后保存代码就能够以知道到后边Wechat截图所呈现的效果。

 

成立菜单点击事件管理方法

前边的美食指南中大家定义的都以click类型的美食指南,但该类型菜单被点击的时候,Wechat将路过Tencent服务器向开荒者钦命的UENVISIONL发送一段XML文,该XML的构造表达如下:

图片 5

 

那和我们方今管理客户发送新闻的点子实际上是同等的,大家能够在前文绸缪的秘籍构造底子上增加管理代码,找到前文的如下代码段:

1 if(msgType.equals('text')){
2     rtnMsg = handleText(inMsg);
3 }

 

在该代码段的功底上点击else管理分支:

1 if(msgType.equals('text')){
2 
3         rtnMsg = handleText(inMsg);
4 
5 }
6 else if(msgType.equals('event')){
7         rtnMsg = handleEvent(inMsg);
8 }

 

下面的代码else分支推断如若客户发送来的音信类型是event类型则调用handleEvent方法来拍卖,那时客商大概是关切了Wechat账号,恐怕是收回了关爱,也可能有可能是点击了菜单…,在handleEvent方法里要尤其认清,在乎方法里的eventKey是前方XML里顾客自定义的:

 1 private static String handleEvent(IncomingMsg msg){
 2         String event = msg.event;
 3         String strTmp = '';
 4         if(event.equals('subscribe')){
 5             strTmp = '欢迎关注本账号!';
 6         }
 7         else if(event.equals('unsubscribe')){
 8             strTmp = '';
 9         }
10         else if(event.equals('CLICK')){
11             strTmp = '您点击了' + msg.eventKey;
12         }
13         String result = composeTextReply(msg, strTmp);
14         return result;
15 }

 

中间composeTextReply方法的定义如下:

1  private static String composeTextReply(IncomingMsg msg, String content){
2         String strTmp = '<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[{2}]]></Content></xml>';
3         String[] arguments = new String[]{msg.fromUserName, msg.toUserName, content};
4         String strReply = String.format(strTmp, arguments);
5         return strReply;
6 }

 

方法运维效果如下,当客商点击了Wechat菜单后,系统会自行将eventKey里蕴涵的音讯发送给客户,这里是为了演示效果开展的简化,真实风貌里能够依照须求开展具体效率订制:

 

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图