微信公众号开发者授权token和code接入流程
关于微信授权开发
微信公众号开发,在对接微信功能接口时,需要一些注意事项
- 明确要对接的功能接口
微信接口权限列表说明:
https://mp.weixin.qq.com/advanced/advanced?action=table&token=1888019159&lang=zh_CN
- 确认是否已经获得接口权限
- 关于订阅号与服务号区别
登录mp.weixin.qq.com
通过微信APP客户端区别订阅号与服务号
搜索公众号,“xxx”进入公众号之后,回复一条消息,再返回到微信主界面,如果是服务号,则消息就跟朋友发消息一样,显示在主界面;
如果是订阅号,则不会显示在主界面,只能通过订阅号信息进去查看
- 对接过程之Token授权
准备好需要的参数
网页授权回调接口Java版本
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.weixin4j.Configuration;
import org.weixin4j.util.TokenUtil;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @Desc: 微信开发接口控制器
* @author: learnworm
* @date: 2018/4/20 8:37
*/
@Controller
@RequestMapping("/wxtoken")
public class WeixinIndexUrlController {
private final static Logger logger = LoggerFactory.getLogger(WeixinIndexUrlController.class);
@RequestMapping(value = "/", method = {RequestMethod.POST, RequestMethod.GET})
public void initNoFilter(ServletRequest req, ServletResponse res) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
if (Configuration.isDebug()) {
logger.debug("--> Acquire weixin request:" + request.getMethod() + " Method");
logger.debug("--> Weixin request url:" + request.getServletPath());
}
//消息来源可靠性验证
String signature = request.getParameter("signature");// 微信加密签名
logger.debug(signature);
String timestamp = request.getParameter("timestamp");// 时间戳
logger.debug(timestamp);
String nonce = request.getParameter("nonce"); // 随机数
logger.debug(nonce);
//Token为weixin4j.properties中配置的Token
String token = TokenUtil.get();
System.out.println("token:"+token);
logger.debug(token);
String echostr = request.getParameter("echostr");
PrintWriter out = response.getWriter();
if (TokenUtil.checkSignature(token, signature, timestamp, nonce)) {
out.print(echostr);
}
out.close();
out = null;
}
}