前节【项目搭建】 讲述了如何搭建一个SpringMVC的Maven项目,这节我们将关注回调模式的相关事宜。
开启应用的回调模式
当你开启应用的回调模式时,企业号会要求你填写应用的URL、Token、EncodingAESKey三个参数。
URL是企业应用接收企业号推送请求的访问协议和地址,支持http或https协议。
Token可由企业任意填写,用于生成签名。
EncodingAESKey用于消息体的加密,是AES密钥的Base64编码。
登陆企业服务号之后,管理员可以添加企业应用:
点击添加按钮之后,按照提示创建一个WeChat的应用
点击进入WeChat配置
选中回调模式下面的进入按钮,
选择右上角的开启按钮,将会弹出对话框,让你输入接口信息:
URL 是第三方平台用来接收微信转发消息的地址,需要提供GET和POST两种方法,GET主要是用来验证URL有效性, POST主要用来接收消息。
Token 和 AESKey可以随便定义,也可以用他后面的随机获取。
我们这里定义 Token = “A8888888888888888888A”, EncodingAESKey = "A88888888888888888888888888888888888888888A"。
URL我们要填写SpringMVC的crontroller的地址,比如 http://www.xxx.com/msg.
这样我们就可以开始来设计Spring MVC中的Controller类。
创建包: com.boyi.wechat.controller
创建类: com.boyi.wechat.controller.MsgController
package com.boyi.wechat.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.boyi.wechat.utils.CommonUtils; import com.boyi.wechat.wx.msg.in.model.InMsg; import com.boyi.wechat.wx.msg.in.model.ReplyMsg; import com.boyi.wechat.wx.msg.model.MsgType; import com.boyi.wechat.wx.msg.parser.MsgParser; import com.boyi.wechat.wx.utils.WXBizMsgCrypt; import com.boyi.wechat.wx.utils.WXBizMsgCryptManager; @Controller @RequestMapping("/msg") public class MsgController { @RequestMapping(method = RequestMethod.GET) public @ResponseBody String valid(@RequestParam(value = "msg_signature") String signature, @RequestParam(value = "timestamp") String timestamp, @RequestParam(value = "nonce") String nonce, @RequestParam(value = "echostr") String echostr) throws Exception { String sEchoStr = ""; WXBizMsgCrypt wxcpt = WXBizMsgCryptManager.getChatWXBizMsgCrypt(); try { sEchoStr = wxcpt.VerifyURL(signature, timestamp, nonce, echostr); System.out.println("sEchoStr : " + sEchoStr); } catch (Exception e) { e.printStackTrace(); } return sEchoStr; } @RequestMapping(method = RequestMethod.POST) public @ResponseBody String message( @RequestParam(value = "msg_signature") String signature, @RequestParam(value = "timestamp") String timestamp, @RequestParam(value = "nonce") String nonce, @RequestBody String encryptMsg) throws Exception { String sEncryptMsg = null; WXBizMsgCrypt wxcpt = WXBizMsgCryptManager.getChatWXBizMsgCrypt(); try { String msg = wxcpt.DecryptMsg(signature, timestamp, nonce, encryptMsg); System.out.println("decode msg = " + msg); //parse the xml message to InMsg object InMsg inMsg = MsgParser.parse(msg); if (inMsg != null) { System.out.println("msg id = " + inMsg.getMsgId()); System.out.println("msg type = " + inMsg.getMsgType().name()); String content = "你刚才发的是[" + inMsg.getMsgType().name() + "]"; //create the reply message ReplyMsg replyMsg = new ReplyMsg(); replyMsg.setToUserName(inMsg.getFromUserName()); replyMsg.setFromUserName(inMsg.getToUserName()); replyMsg.setCreateTime(CommonUtils.getCurrentSecond()); replyMsg.setMsgType(MsgType.text); replyMsg.setContent(content); //convert the reply msg object to xml String xmlString = MsgParser.convert(replyMsg); System.out.println("reply message = " + xmlString); //Encrypt the xml message sEncryptMsg = wxcpt.EncryptMsg(xmlString, CommonUtils.getCurrentSecond(), nonce); System.out.println("encrypt message = " + sEncryptMsg); } } catch (Exception e) { e.printStackTrace(); } return sEncryptMsg; } }
在这个Controller里我们定义了2个方法,一个是RequestMethod 是GET的方法valid, 另外一个是POST的方法message, 由于我们在配置文件里面加入了JackSon的配置,所以就不需要去写其他的方法去获取POST发过来的数据了,直接通过@RequestBody就可以获取微信发过来的加密的消息。
WXBizMsgCrypt 这个类可以从微信官方下载到,http://qydev.weixin.qq.com/java.zip
package com.boyi.wechat.wx.utils; import java.util.HashMap; import java.util.Map; public class WXBizMsgCryptManager { public static final String sToken = "A8888888888888888888A"; /** * replace the sCorpID to your corp id */ public static final String sCorpID = "corpId"; public static final String sEncodingAESKey = "A88888888888888888888888888888888888888888A"; private static Map<String, WXBizMsgCrypt> crypts = new HashMap<String, WXBizMsgCrypt>(); public static WXBizMsgCrypt getChatWXBizMsgCrypt(){ return getWXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID); } public static WXBizMsgCrypt getWXBizMsgCrypt(String token, String encodingAesKey, String corpId) { WXBizMsgCrypt wxcpt = null; String key = corpId + "-" + token; if (crypts.containsKey(key)) { wxcpt = crypts.get(key); } else { try { wxcpt = new WXBizMsgCrypt(token, encodingAesKey, corpId); } catch (Exception e) { e.printStackTrace(); } } return wxcpt; } }
为了测试回调模式,可以先把message方法注释掉。 然后打个包,部署到你们的云主机上面,再回到回调模式页面,测试一下.
同时把下面几个选项都打开,特别是用户消息上报,如果关闭的话第三方将收不到任何消息。
本节结束,下节讲述消息的解析和发送。
相关推荐
### 微信小程序对APP市场扰动的博弈论分析 #### 微信小程序的概念及其影响 微信小程序是由腾讯公司推出的一款应用程序,无需下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开...
在IT领域,特别是游戏开发部分,博弈算法是一个重要的研究方向,尤其在开发棋类游戏时。本项目聚焦于“五子棋”的Java实现,通过博弈算法来实现智能对战功能。下面将详细介绍五子棋的基本规则、Java编程语言在游戏...
> 微信小程序,可以说是近半年来开发和运营者们讨论最多的话题之一。自己也尝试入坑玩了一把,感觉还挺有意思,非常适合生活服务和阅读类项目。 对于微信小程序的一些理解 : 小程序正如其名,小/轻。 是一套独立...
平治信息,凭借其独特的“百足模式+CPS模式”,成为首批成功接入微信渠道的数字阅读公司;以及华扬联众,凭借技术优势,成为腾讯和其他互联网巨头的核心广告代理商。 然而,互联网广告市场也面临技术迭代、广告代理...
【电子支付与结算:第三方支付】\n\n第三方支付是一种在网络交易中扮演关键角色的支付方式,由独立的、有信誉的机构提供,通过与各大银行合作,为商家和消费者提供安全、便捷的支付结算服务。它主要有两种业务模式:...
《微信与手机QQ的内部博弈:移动互联网时代的战略转变》 在互联网发展的浪潮中,微信与手机QQ的内部博弈成为了腾讯公司内部一个重要的议题。微信的崛起,以其简洁易用的特性,迅速席卷了移动互联网市场,对原有的...
在当前的电子商务环境下,家电零售商与第三方物流的合作日益成为行业关注的焦点。文章“电商家电零售商与第三方物流合作行为的演化博弈分析.pdf”深入探讨了双方合作行为的演化博弈,揭示了在有限理性与信息不对称的...
《微信与手机QQ的内部博弈:移动互联网时代的竞争与变革》 互联网的发展日新月异,尤其是移动互联网的崛起,给传统互联网巨头带来了前所未有的挑战与机遇。在腾讯的内部,微信与手机QQ的博弈正是这种变革的生动体现...
【JAVA五子棋人机博弈游戏】是一款基于JAVA编程语言实现的简单互动游戏,它集成了人工智能算法,使得用户可以与计算机进行对弈。这款五子棋游戏的开发旨在教授和展示JAVA编程语言在游戏开发领域的应用,以及如何构建...
总的来说,这篇论文将博弈论应用于电商家电零售商与第三方物流公司的合作行为分析,揭示了他们在动态市场环境下如何通过策略互动寻求共赢,并为电商平台和物流公司提供战略决策的理论依据。通过深入理解这种演化博弈...
基于演化博弈的水生态PPP项目第三方监管策略.pdf
微信独立成为腾讯七大事业部之一,标志着腾讯内部的一次重大结构调整,同时也预示着新一轮的利益博弈。这次变革的主要知识点包括: 1. **微信的战略升级**:微信事业部的成立,表明微信从内部孵化项目晋升为企业...
在此模式下,涉及的委托代理关系主要是指第三方物流作为商业银行的代理人,以及融资企业委托第三方物流进行金融服务。由于物流金融服务过程涉及的信息往往是不对称的,因此博弈理论成为分析这些关系的重要工具,可以...
微信小程序自2017年推出以来,对整个移动应用市场产生了深远影响,尤其是对传统APP的市场格局。本文将从博弈论的角度深入探讨这一现象,揭示其中的策略选择、竞争态势以及市场动态。 博弈论是研究决策者之间互动...