赞
踩
接口名称
|
未认证订阅号
|
微信认证订阅号
|
未认证服务号
|
微信认证服务号
|
基础支持-获取access_token
|
有
|
有
|
有
|
有
|
基础支持-获取微信服务器IP地址
|
有
|
有
|
有
|
有
|
接收消息-验证消息真实性、接收普通消息、接收事件推送、接收语音识别结果
|
有
|
有
|
有
|
有
|
发送消息-被动回复消息
|
有
|
有
|
有
|
有
|
发送消息-客服接口
|
有
|
有
| ||
发送消息-群发接口
|
有
|
有
| ||
发送消息-模板消息接口(发送业务通知)
|
有
| |||
发送消息-一次性订阅消息接口
|
有
|
有
| ||
用户管理-用户分组管理
|
有
|
有
| ||
用户管理-设置用户备注名
|
有
|
有
| ||
用户管理-获取用户基本信息
|
有
|
有
| ||
用户管理-获取用户列表
|
有
|
有
| ||
用户管理-获取用户地理位置
|
有
| |||
用户管理-网页授权获取用户openid/用户基本信息
|
有
| |||
推广支持-生成带参数二维码
|
有
| |||
推广支持-长链接转短链接口
|
有
| |||
界面丰富-自定义菜单
|
有
|
有
|
有
| |
素材管理-素材管理接口
|
有
|
有
| ||
智能接口-语义理解接口
|
有
| |||
多客服-获取多客服消息记录、客服管理
|
有
| |||
微信支付接口
|
需申请
| |||
微信小店接口
|
需申请
| |||
微信卡券接口
|
需申请
|
需申请
| ||
微信设备功能接口
|
需申请
| |||
微信发票接口
|
有
|
有
| ||
微信JS-SDK-基础接口
|
有
|
有
|
有
|
有
|
微信JS-SDK-分享接口
|
有
|
有
| ||
微信JS-SDK-图像接口
|
有
|
有
|
有
|
有
|
微信JS-SDK-音频接口
|
有
|
有
|
有
|
有
|
微信JS-SDK-智能接口(网页语音识别)
|
有
|
有
|
有
|
有
|
微信JS-SDK-设备信息
|
有
|
有
|
有
|
有
|
微信JS-SDK-地理位置
|
有
|
有
|
有
|
有
|
微信JS-SDK-界面操作
|
有
|
有
|
有
|
有
|
微信JS-SDK-微信扫一扫
|
有
|
有
|
有
|
有
|
微信JS-SDK-微信小店
|
有
| |||
微信JS-SDK-微信卡券
|
有
|
有
| ||
微信JS-SDK-微信支付
|
有
|
VIP-1 型
|
5元/月
|
月付用户限制流量5G/月,年付7G/月.账单日流量清零,如超流量可单独购买流量包 0.3元/G
|
微信开发,DEMO演示,SSH/3389,较少人数同时在线游戏等应用
|
- /**
- * WxGateway 微信转发网关
- */
- @Controller
- @RequestMapping("/gateway")
- public class WxGateway {
-
- private static final Logger logger = LoggerFactory
- .getLogger(WxGateway.class);
- @Autowired
- private WxMpConfigStorage wxMpConfigStorage;
- @Autowired
- private WxMpService wxMpService;
- @Autowired
- private WxMpMessageRouter wxMpMessageRouter;
- @Autowired
- private IWxMpService iWxMpService;
- @Autowired
- private IUserTokenService iUserTokenService;
- Gson gson = new Gson();
-
- @Value("${charset}")
- private String charset;
-
- /**
- * 微信公众号主网关,负责处理所有和微信公众号信息交互
- */
- @RequestMapping("/main")
- public void gateway(HttpServletRequest request, HttpServletResponse response, String xml)
- throws IOException {
- response.setCharacterEncoding(charset);
- logger.debug("接收到消息......");
- // 读取输入流
- Map<String, String> reqParam = getAllRequestParam(request);
-
- String signature = request.getParameter("signature");
- String nonce = request.getParameter("nonce");
- String timestamp = request.getParameter("timestamp");
- // 验签
- if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
- // 消息签名不正确,说明不是公众平台发过来的消息
- logger.info("非法请求");
- response.getWriter().println("非法请求");
- response.getWriter().close();
- return;
- }
-
- String echostr = request.getParameter("echostr");
- if (StringUtils.isNotBlank(echostr)) {
- // 说明是一个仅仅用来验证的请求,回显echostr
- logger.info("echostr:" + echostr);
- response.getWriter().println(echostr);
- response.getWriter().close();
- return;
- }
-
- String encryptType = request.getParameter("encrypt_type");
- // 加密类型
- encryptType = StringUtils.isBlank(encryptType) ? "raw" : encryptType;
-
- if ("raw".equals(encryptType)) {
- // 明文传输的消息
- String xmlStr = StringUtil.convertStreamToString(request.getInputStream());
- WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(xmlStr);
- logger.info("{}", xmlStr);
- iWxMpService.saveInMsg(inMessage);
- WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
- UserToken userToken = iUserTokenService.findByOpenId(inMessage.getFromUser());
- if(userToken != null){
- if (outMessage != null) {
- long msgId = 0;
- if (null != inMessage.getMsgId()) {
- msgId = inMessage.getMsgId();
- }
- iWxMpService.saveOutMsg(outMessage, msgId);
- // 说明是同步回复的消息
- // 将xml写入HttpServletResponse
- response.getWriter().write(outMessage.toXml());
- } else {
- // 说明是异步回复的消息,直接将空字符串写入HttpServletResponse
- response.getWriter().write("");
- }
- }else {
- //String reply = "<a href=\"info/login\">" + "请先绑定账号" + "</a>";
- response.getWriter().write(outMessage.toXml());
- }
-
- response.getWriter().close();
- return;
- }
-
- if ("aes".equals(encryptType)) {
- // 是aes加密的消息
- String msgSignature = request.getParameter("msg_signature");
- WxMpXmlMessage inMessage = WxMpXmlMessage.fromEncryptedXml(
- request.getInputStream(), wxMpConfigStorage, timestamp,
- nonce, msgSignature);
- WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
- response.getWriter().write(
- outMessage.toEncryptedXml(wxMpConfigStorage));
- /**
- * 微信服务器发送三次重复的排重问题解决流程:
- a.得到数据response.getWriter();
- b.得到数据request下的所有数据--->写入一个HashMap中
- c.使用response的writer返回一个空白,并且关闭writer,注意如果不关闭的话,那么这个空白消息是不会被传给微信服务器的
- */
- response.getWriter().close();
- return;
- }
-
- response.setContentType("text/html;charset=utf-8");
- response.setStatus(HttpServletResponse.SC_OK);
- response.getWriter().println("不可识别的加密类型");
- response.getWriter().close();
- return;
- }
-
-
- /**
- * 获取请求参数中所有的信息
- *
- * @param request
- * @return
- */
- public static Map<String, String> getAllRequestParam(final HttpServletRequest request) {
- Map<String, String> res = new HashMap<String, String>();
- Enumeration<?> temp = request.getParameterNames();
- if (null != temp) {
- while (temp.hasMoreElements()) {
- String en = (String) temp.nextElement();
- String value = request.getParameter(en);
- res.put(en, value);
- //logger.debug("en:"+en + ">>>>>>" + "value:" + value);
- if (null == res.get(en) || "".equals(res.get(en))) {
- res.remove(en);
- }
- }
- }
- return res;
- }
-
- }
- <!-- https://mvnrepository.com/artifact/com.github.binarywang/weixin-java-mp -->
- <dependency>
- <groupId>com.github.binarywang</groupId>
- <artifactId>weixin-java-mp</artifactId>
- <version>2.9.0</version>
- <scope>compile</scope>
- </dependency>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。