carp搭建公众平台(二)——得到全部客户信息和自定义任务

如不知道如何下载和部署carp,请看carp的介绍和配置一文。数据库

根据开发者文档,公众平台的用户信息由3部分组成,第一次是获取openId,第二次获取用户信息,第三次获取组信息;json

若是有1000个用户,就是须要发出2001个请求才能得到,因此通常得到一次后,把信息保存在本地数据库最好,同时因为请求次数过多,建议使用异步多线程获取,才能快速完成。
api

carp已经内建了一个task用来获取全部用户信息,并保存到数据库中;在demo中有个例子:GetAllFans,执行后会获取公众号的全部用户,并在数据库中保存了全部的用户信息,如图:微信


在carp中定义一个主动客服任务很简单,仔细观察公众平台提供的开发者手册,大多数url是这样的:多线程

https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN

https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN

https://api.weixin.qq.com/cgi-bin/groups/get?access_token=ACCESS_TOKEN

https://api.weixin.qq.com/cgi-bin/groups/update?access_token=ACCESS_TOKEN

能够看出,只须要替换access_token就好了;异步

carp中定义这种新的task任务很简单,在weixin.task.xml中定义一个新的task元素就行了,主要是须要为这个task建立一个新的work类,方便任务完成后就行回调,举个例子,咱们但愿得到微信的分组信息后保存到数据库,则首先定义一个GroupGetWork类,以下:ide

public class GroupsGetWork extends Work {url


@Overridespa

public void failedToDo() throws WorkException {.net

// TODO Auto-generated method stub


}


@Override

public void toDo() throws WorkException {

JSONArray groupsJson = JSONObject.fromObject(weixinResult.getJson())

.getJSONArray("groups");

FansInfoService service = new FansInfoService();


for (int i = 0; i < groupsJson.size(); i++) {

JSONObject groupJson = groupsJson.getJSONObject(i);

WeixinGroup group = new WeixinGroup();

group.setFname(groupJson.getString("name"));

group.setWeixinId(groupJson.getString("id"));


service.saveOrUpdateGroup(group);

}

}

}

能够看到,当任务执行成功后,将会解析返回的json数据,并保存到数据库中;

而后在weixin.task.xml中配置task元素:

<task>

<name>groupsget</name>

<url><![CDATA[https://api.weixin.qq.com/cgi-bin/groups/get?access_token=ACCESS_TOKEN]]></url>

<work>com.voa.weixin.work.GroupsGetWork</work>

</task>

OK,当须要执行这个任务是,只须要两行代码就够了:

Task task = carp.getTaskRepertory().getTaskByName("groupget");//获取任务


task.send();//发送任务


carp中内建了大部分的task和work,包括文件上传和下载,若是须要自定义新的回调work,继承Work接口便可;


若有问题,可发送邮件至150092628@qq.com

carp技术群:368193775

相关文章:

carp的介绍和配置

carp搭建公众平台(一)——发送客服消息

carp搭建公众平台(三)——上传下载多媒体文件

相关文章
相关标签/搜索