您的位置:首页 > 移动开发 > 微信开发

jeecms添加微信推送认证接口(只是给自己用,留个编辑,文章写的不详细!!!!勿浏览)

2015-11-03 13:33 519 查看
//微信加密签名
public String getSignature(String timestamp,String nonce) {
// TODO take token from db
CmsConfig config=configMng.get();
String token=config.getWeixinToken();
String[] strarr = new String[]{token,timestamp,nonce};
String signature = "";
//对三个参数排序
Arrays.sort(strarr);
StringBuffer content = new StringBuffer();
for (int i=0; i<strarr.length; i++)
content.append(strarr[i]);
//生成signature,最好此处将echostr存起来,以后每次校验消息来源都需要用到
signature = Sha1Encoder.encodeBySHA1(content.toString()).toLowerCase();
// 确认请求来至微信
return signature;
}

/**
* 响应用户发送的消息,只是用来测试,没有实际用处
*/
public void responseMsg(Map<String, String> paramMap) {
String MsgType = WeiXinUtil.getMsgType(paramMap);
//sendMessage(MsgTyep, null, MsgTyep, null, null, null);
String token=weixinTokenCache.getToken();
switch(MsgType) {
case WeiXinUtil.Message.Text:
sendText(token, "未识别指令。将返回帮助菜单:1:帮助指令 2:获取最新消息 3:推送最新通知(管理员指令)");
break;
case WeiXinUtil.Message.Image:
sendText(token, "图片我喜欢,你是要我保存吗?");
break;
case WeiXinUtil.Message.Voice:
sendText(token, "最近上火听不清你说什么!");
break;
default:
sendText(token,"What are you 弄啥嘞?");
}

}


jeecms本身带微信推送功能,并且在发文章的时候已经将推送的代码写进去了。

contentAct.java (package com.jeecms.cms.action.admin.main;)

//微信消息发送

weiXinSvc.sendMessage(sendType, selectImg, weixinImg, bean, ext, txt);

缺少的是微信公众号中token的认证,所有添加相应代码。(部分代码,时间关系不能都贴出来。代码在上面,csdn,,,,,,blog这么难用,想起了我就不想写东西了。)

前台找到action类,spring mvc controle 添加"sing.jspx"

public void signature(HttpServletRequest request,HttpServletResponse response) {
String result = "Error";
/** 判断是否是微信接入激活验证,只有首次接入验证时才会收到echostr参数,此时需要把它直接返回 */
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
if (echostr != null && echostr.length() > 1) {
if (wx.getSignature(timestamp,nonce).equals(signature))
result = echostr;
}
ResponseUtils.renderText(response, result);
}


然后调用上面service。。。。。。(好像不符合mvc模式,是不是要写在其他包中????)管它呢。本来对jeecms分析就是不到位。

另外将token值加到数据库中,(这是我想记录的东西,其他都是顺便提一下。)jc_config_atrr追加一条记录weixinToken , test

在系统后台模板中找到api_edit.html添加

<@p.text colspan="1" width="50" label="cmsConfig.weixinToken" name="weixinToken" value=configAttr.weixinToken! style="width:200px" maxlength="100" /><@p.tr/>

然后修改cmsconfigattr.java(CmsCofig.java(com.jeecms.cor.entity.base包中),参照weixinid设置get 和set

public static final String WEIXIN_TOKEN = "weixinToken";

public String getWeixinToken() {

return getAttr().get(WEIXIN_TOKEN);

}

public void setWeixinToken(String token) {

getAttr().put(WEIXIN_TOKEN, token);

}

在cmsconfig.java中,在CmsCofig.java(com.jeecms.cor.entity.base包中,添加

public String getWeixinToken(){

CmsConfigAttr configAttr=getConfigAttr();

return configAttr.getWeixinToken();

}

api_edit.html后台api接口模板页添加下面内容:

<@p.text colspan="1" width="50" label="cmsConfig.weixinToken" name="weixinToken" value=configAttr.weixinToken! style="width:200px" maxlength="100" /><@p.tr/>

其中:cmsConfig.weixinToken 在后台模板文件夹languages\jeecms\admin\message_en_US.properties和对应的messages_zh_CN.properties中添加cmsConfig.weixinToken=Token 。

configAttr.weixinToken是从数据库中取出来,好像对应的类是CmsCofig.java(com.jeecms.cor.entity.base包中)。

从这里可以看到标签使用中,一部分来自数据库,一部分来自配置文件,例如需要显示的文字来自语言国际化的配置文件,数据来自数据库。

只是不知道如何判断从哪个类中读数据。

表:jc_config_attr中存放weixinToken ,appID, appsecret
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: