项目采用maven创建。
由于之前项目中一直使用的是weixin4j-0.0.9.2版本,项目为标准的Spring MVC + MyBatis + MySQL。
其中Spring MVC采用的是配置文件方式配置,下图是项目大的结构。
原pom.xml引用如下:
<dependency>
<groupId>org.weixin4j</groupId>
<artifactId>weixin4j</artifactId>
<version>0.0.9.2</version>
</dependency>
现改为:
<dependency>
<groupId>org.weixin4j</groupId>
<artifactId>weixin4j-spring</artifactId>
<version>1.0.0</version>
</dependency>
可能有些人还是为手动加上
<dependency>
<groupId>org.weixin4j</groupId>
<artifactId>weixin4j</artifactId>
<version>0.1.3</version>
</dependency>
其实这个不是必须的,因为weixin4j-spring本身就已经引用了weixin4j所以不需要显式添加了。
这次我没采用xml去配置weixin4j-spring,而是采用了注解。
直接在项目目录创建一个WebConfig配置注解类。
package com.ansitech.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.weixin4j.factory.WeixinFactory;
import org.weixin4j.loader.ITicketLoader;
import org.weixin4j.loader.ITokenLoader;
import org.weixin4j.spi.IEventMessageHandler;
import org.weixin4j.spi.INormalMessageHandler;
import org.weixin4j.spring.MessageFactoryBean;
import org.weixin4j.spring.WeixinFactoryBean;
import org.weixin4j.spring.WeixinTemplate;
/**
* WebConfig
*
* @author yangqisheng
*/
@Configuration
public class WebConfig {
@Bean
public WeixinFactoryBean weixinFactoryBean(ITokenLoader tokenLoader, ITicketLoader ticketLoader) {
System.out.println("...WebConfig.WeixinFactoryBean...");
WeixinFactoryBean weixinFactoryBean = new WeixinFactoryBean();
weixinFactoryBean.setTokenLoader(tokenLoader);
weixinFactoryBean.setTicketLoader(ticketLoader);
return weixinFactoryBean;
}
@Bean
public WeixinTemplate weixinTemplate(WeixinFactory weixinFactory) {
System.out.println("...WebConfig.WeixinTemplate...");
return new WeixinTemplate(weixinFactory);
}
@Bean
public MessageFactoryBean messageFactoryBean(INormalMessageHandler normalMessageHandler,
IEventMessageHandler eventMessageHandler) {
System.out.println("...WebConfig.MessageFactoryBean...");
MessageFactoryBean messageFactoryBean = new MessageFactoryBean();
messageFactoryBean.setNormalMessageHandler(normalMessageHandler);
messageFactoryBean.setEventMessageHandler(eventMessageHandler);
return messageFactoryBean;
}
}
接着就是去改造项目代码了,首先是控制器中原代码的调用。
原项目中采用OAuth2进行网页授权的代码是最先要改的。
原项目代码(片段):
import org.weixin4j.Configuration;
import org.weixin4j.OAuth2;
...
//初始化当前用户身份,如果获取到身份,则重新跳转到当前页面
if (!isOAuth(request)) {
//跳转到统一获取用户身份的地方
String url = Configuration.getProperty("weixin4j.oauth.url") + "/mobile/api/oauth/index/"
+ activity.getString("activityid");
OAuth2 oauth = new OAuth2();
String redirect_url = oauth.getOAuth2CodeBaseUrl(Configuration.getOAuthAppId(), url);
//进行跳转进行网页静默授权
response.sendRedirect(redirect_url);
return null;
}
首先需要先引入WeixinTemplate:
@Autowired
private WeixinTemplate weixinTemplate;
然后改造代码内容:
import org.weixin4j.Configuration;
import org.weixin4j.spring.WeixinTemplate;
//初始化当前用户身份,如果获取到身份,则重新跳转到当前页面
if (!isOAuth(request)) {
//跳转到统一获取用户身份的地方
String url = Configuration.getProperty("weixin4j.oauth.url") + "/mobile/api/oauth/index/"
+ activity.getString("activityid");
String redirect_url = weixinTemplate.sns().getOAuth2CodeBaseUrl(url);
//进行跳转进行网页静默授权
response.sendRedirect(redirect_url);
return null;
}
最后是根据code获取openid的地方需要进行修改。
下面是原代码片段:
import org.weixin4j.OAuth2;
import org.weixin4j.WeixinException;
import org.weixin4j.http.OAuth2Token;
...
OAuth2 oauth = new OAuth2();
OAuth2Token oAuth2Token = oauth.login(Configuration.getOAuthAppId(),
Configuration.getOAuthSecret(), code);
//静默授权获取用户身份
String openid = oAuth2Token.getOpenid();
改为新的后为:
import org.weixin4j.WeixinException;
import org.weixin4j.spring.WeixinTemplate;
...
//静默授权获取用户身份
String openid = weixinTemplate.sns().getOpenId(code);
至此升级就完成了,对于其他的组件,也可以按此步骤更换。
新版的代码是不是简洁很多啊,o(∩_∩)o 哈哈
涉及商业,代码不便上传,请大家自行选择是否升级。