微信Api的集成

Jul 10, 2017 10:38:44 AM

作者:wendal

如何集成?

需要2样东西: @IocBy配置和一个properties文件

IocBy配置, 当然就是MainModule类了

  1. @IocBy(args={"*js", "ioc/",
  2. "*anno", "net.wendal.nutzbook",
  3. "*weixin", // 仅需要添加这一行,引用的是org.nutz.plugins.weixin.WeixinIocLoader
  4. "*jedis",
  5. "*async",
  6. "*tx"})

weixin.properties的参数值,在微信公众号内均可以找到. 请确保这个properties文件被conf扫描到.

  1. weixin.token=1234567890
  2. weixin.appid=wx10927e35a365fe1c
  3. weixin.appsecret=c29accd1784e636d6478eac9b6b3aYYY
  4. #weixin.encodingAesKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  5. #weixin.openid=XXX
  6. #weixin.redis.key=wxmp:access_token
  7. #weixin.atstore=jedis

其中:

  • token是被动响应所需要的自定义值
  • appid是微信为你的公众号分配的唯一的不可变的id
  • c29accd1784e636d6478eac9b6b3aYYY也是微信生成的
  • encodingAesKey是加密key, 测试号是不存在的,正式注册的微信公众号才有
  • openid是公众号的id
  • atstore是AccessToken的存储媒介,默认是memory,即内存存储.
    示例调用
  1. @IocBean
  2. public class MyWeixinService {
  3. private static final Log log = Logs.get();
  4. @Inject protect WxApi2 wxApi2;
  5. public void getMenu() {
  6. WxResp resp = wxApi2.menu_get();
  7. if (resp.ok()) {
  8. if (log.isDebugEnable())
  9. log.debugf("menu = %s",Json.toJson(resp.get("menu")));
  10. } else {
  11. log.info("something happen : " + Json.toJson(resp));
  12. }
  13. }
  14. }

AccessToken的存储

微信的AccessToken的默认有效期是2小时,需要定期刷新,nutzwx内置了WxAccessTokenStore的实现类.

默认情况下, 使用的是memory模式,实现类是MemoryAccessTokenStore,保存在内存,每次重启就会丢失.

通过配置文件中的weixin.atstore进行设置, 可选模式有:

  • memory 内存模式
  • dao 通过NutDao保存到数据库
  • jedis 通过nutz-integration-jedis提供的JedisAgent类存储到redis单机或集群
  • jedisPool 通过JedisPool存储到redis单机
    其中,jedis/jedisPool模式下,存储到redis的键名称,通过weixin.redis.key设置,一般不需要设置,除非需要多个微信公众号一起使用

本页面的文字允许在知识共享 署名-相同方式共享 3.0协议GNU自由文档许可证下修改和再使用。

原文: http://nutzam.com/core/weixin/weixin_api.html