微信Api的集成

优质
小牛编辑
129浏览
2023-12-01

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

IocBy配置, 当然就是MainModule类了

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

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

weixin.token=1234567890
weixin.appid=wx10927e35a365fe1c
weixin.appsecret=c29accd1784e636d6478eac9b6b3aYYY
#weixin.encodingAesKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#weixin.openid=XXX
#weixin.redis.key=wxmp:access_token
#weixin.atstore=jedis

其中:

  • token是被动响应所需要的自定义值
  • appid是微信为你的公众号分配的唯一的不可变的id
  • c29accd1784e636d6478eac9b6b3aYYY也是微信生成的
  • encodingAesKey是加密key, 测试号是不存在的,正式注册的微信公众号才有
  • openid是公众号的id
  • atstore是AccessToken的存储媒介,默认是memory,即内存存储.

示例调用

@IocBean
public class MyWeixinService {
    private static final Log log = Logs.get();
    @Inject protect WxApi2 wxApi2;
    
    public void getMenu() {
        WxResp resp = wxApi2.menu_get();
        if (resp.ok()) {
            if (log.isDebugEnable())
                log.debugf("menu = %s",Json.toJson(resp.get("menu")));
        } else {
            log.info("something happen : " + Json.toJson(resp));
        }
    }

}

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设置,一般不需要设置,除非需要多个微信公众号一起使用