踩过很多坑,希望这篇文可以为大家开发公众号领取红包,做个引导。更重要的是,我发现我有点忘了,所以为了下次再用到这方面的功能,特此,来做个记录
PS:可以多看看api文档,吐槽一下,微信开发api文档很坑,相比之下,支付宝api看着就舒服多了。
前期准备,公众号+有红包功能的商户号
因为没有可用的域名,所有我用了菜单点击事件
简单直接上代码,可以自己下载一个官方提供的源码对比着看。
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public void weChatConnect(HttpServletRequest req, HttpServletResponse resp, HttpSession session) throws IOException{
req.getInputStream();
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
Map<String ,String> map= MessageUtil.xmlToMap(req);
String fromUserName = map.get("FromUserName");
String toUserName = map.get("ToUserName");
String msgType = map.get("MsgType");
String content = map.get("Content");
session.setAttribute("requestMap",map);
String message=null;
System.out.println(msgType+",,,,"+map.get("Event"));
try{
//事件,消息自动推送
if(Const.MsgType.MESSAGE_EVNET.equals(msgType)){
//获取推送事件
String eventType=map.get("Event");
//菜单点击
if(Const.MsgType.MESSAGE_CLICK.equals(eventType)){
String key=map.get("EventKey");
if(key.equals("sendredpack")){
//红包事件
sendRedPackController.sendRedPack(req,resp,map);
}
}
}
out.print(message);
}catch (Exception e){
e.printStackTrace();
}finally {
out.close();
}
}
红包领取controller
@Controller
@RequestMapping("/redhandle/")
public class SendRedPackController {
private Logger logger = LoggerFactory.getLogger(SendRedPackController.class);
@Autowired
private ISendRedPackService iSendRedPackService;
@RequestMapping(value = "sendredpack.do")
@ResponseBody
public void sendRedPack(HttpServletRequest req,HttpServletResponse resp,Map map) throws IOException {
//开始发送红包
System.out.println("红包发送开始");