最近在做微信第三方的业务,把最近做的微信开发相关陆续做一个总结。
第三方平台的申请和上线:
根据微信官方文档开放平台描述,首先需要注册一个开发者账号,按照微信开发文档流程申请审核成功后获取AppID和APPSecret,然后可以开始进行开发。
第三方平台所需要配置的信息:
授权事件接收URL:配置接收微信发送过来的ticket接口
消息与事件接收URL:配置接收微信发送的公总号消息和事件
微信授权流程
1)获取预授权码(pre_auth_code)
微信服务器会每隔十分钟向第三方平台的授权事件接收接收地址发送一次验证票据 (component_verify_ticket)。为了确保安全性,发送过来的ticket是加密的,所以获取ticket需要解密。
获取ticket
授权事件接收接收接口:
@ApiOperation(value = "授权事件接收")
@RequestMapping(value = "/eventAccept")
public String eventAccept(HttpServletRequest request, HttpServletResponse response) {
return weChatAuthorizeService.eventAccept(request);
}
解密ticket:
微信公众平台提供了 c++, php, java, python, c# 5 种语言的示例代码:
微信公众平台加解密示例代码
注意:微信发送的component_verify_ticket里没有ToUserName,所以引用微信代码之后XMLParse解析ToUserName会报错,需要修改一下。
@Override
public String eventAccept(HttpServletRequest request) {
String nonce = request.getParameter("nonce");
String timestamp = request.getParameter("timestamp");
String msgSignature = request.getParameter("msg_signature");
String encryptType = request.getParameter("encrypt_type");
String signature = request.getParameter("signature");
String postData = "";
try {
postData = StreamUtils.getInputStreamJson(request.getInputStream());
} catch (IOException e) {
ExceptionUtils.logError(e);
}
logger.info("nonce: " + nonce);
logger.info("timestamp: " + timestamp);
logger.info("msg_signature: " + msgSignature);
logger.info("encrypt_type: " + encryptType);
logger.info("signature: " + signature);
logger.info("postData: " + postData);
//获取配置文件中的appid等信息
String encodingAesKey = weChatComponentProperties.getEncodingAesKey();
String appId = weChatComponentProperties.getAppId();
String token = weChatComponentProperties.getToken();
//解密
WXBizMsgCrypt pc;
String requestXml = "";
try {
pc = new WXBizMsgCrypt(token, encodingAesKey, appId);
requestXml = pc.