NutzCN Logo
问答 微信接口有时候发过来XML数据包,我用module怎么接收?
发布于 2840天前 作者 老司机 1828 次浏览 复制 上一个帖子 下一个帖子
标签:

这是controller

@IocBean
@At("/wechat")
public class WechatCallbackController {
    @Inject
    WechatService wechatService;

    @At
    @Ok("raw")
    public String callback(@Param("..") NutMap map) {
        if (map.has("signature")) {//签名验证
            return wechatService.checkSignature(map);
        }else if (map.has("MsgType")){//这个接受消息map是空,怎么接受xml包?
            wechatService.getMsg(map);
        }
        return null;
    }
}
15 回复

不清楚你写的wechatService是什么东西. 如果是nutzwx的话, 是这样写

    @At("/in")
    @Fail("http:200")
    public View msgIn(HttpServletRequest req) throws IOException {
        return Wxs.handle(wxHandler, req, ""); // wxHandler 通常是BasicWxHandler的子类实例,自定义.
    }

@wendal 微信不是让你设一个url吗,然后所有的请求不都是发到这个url上面吗?你写一个@At(“/in”)那其他推送,微信去访问哪个接口呢?

@qq_c1bab051 看WxHandler接口

@wendal 有点明白了,今天第一次听说还有nutzwx,大开眼界,WxAbstractModule是微信回调端口,那怎么向微信发起请求呢,自己写http访问,还是说nutzwx里面有工具类呢???

@wendal access_token定时刷新是怎么解决的?

nutzwk里不就是引擎nutzwx的包

@wendal 我写了个wxapi继承了WxApi2Impl,想给accessTokenStore注入RedisAccessTokenStore怎么做啊,当然我已经整合了nutz-integration-jedis,直接@IocBean(fields={"redisAccessTokenStore"})?还有继承nutzwx后要注入appid什么的,怎么注入,比如$conf.get('appid'),他怎么知道是给appid注入呢,还是token注入呢?

写个setter,然后@Inject就好了嘛

fields也是个办法

@wendal 给AbstractWxApi2的子类注入accessTokenStore(RedisAccessTokenStore),需要写了类A继承RedisAccessTokenStore,然后再把类A注册到ioc里面?可是RedisAccessTokenStore的jedisPool是private是,没办法注入的吧。还是说插件已经自动把RedisAccessTokenStore注册到ioc里面了?

它有set方法哦

@wendal 微信发过来的信息不应该是xml吗????

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[SCENE_VALUE]]></EventKey>
<Ticket><![CDATA[TICKET]]></Ticket>
</xml>

为什么用

String postData = Streams.readAndClose(new InputStreamReader(req.getInputStream(), Encoding.CHARSET_UTF8));

就拿到了postData??????

postData不就是个xml格式的String吗?

找到了

public static <T> T convert(InputStream in, Class<T> klass) {
		Map<String, Object> map;
		String raw;
        try {
            // fix: DocumentBuilder不支持直接传入Reader,如果直接传InputStream的话又按系统默认编码,所以,用InputSource中转一下
            Reader r = Streams.utf8r(in);
            raw = Lang.readAll(r);
            map = Xmls.asMap(Xmls.xmls().parse(new InputSource(new StringReader(raw))).getDocumentElement());
        }

我就在想不需要用xmls吗?

添加回复
请先登陆
回到顶部