微信Api的集成
优质
小牛编辑
133浏览
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设置,一般不需要设置,除非需要多个微信公众号一起使用