记SpringMVC项目weixin4j-0.0.9.2升级到weixin4j-spring-1.0.0、weixin4j-0.1.3过程

背景说明

项目采用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 哈哈
涉及商业,代码不便上传,请大家自行选择是否升级。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章