diff --git a/CHANGE.md b/CHANGE.md index b03c2206..0e274ab0 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -154,4 +154,8 @@ + **weixin4j-base**: 重构token实现机制 - + **weixin4j-base**: 新增JSTICKET支持 \ No newline at end of file + + **weixin4j-base**: 新增JSTICKET支持 + +* 2015-01-15 + + + **weixin4j-qy**: 新增邀请成员关注接口 \ No newline at end of file diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties b/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties index e0f29edb..44d80deb 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties +++ b/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties @@ -1,6 +1,6 @@ # \u6d4b\u8bd5\u4e4b\u7528 \u6b63\u5f0f\u73af\u5883\u4e0bcopy\u4e00\u4efd\u5230classpath # \u516c\u4f17\u53f7\u4fe1\u606f -account={"id":"wx4ab8f8de58159a57","secret":"1d4eb0f4bf556aaed539f30ed05ca795",\ +account={"id":"wxb72a4f2dbf27b59d","secret":"7ecc93fa8662f518a39c037fd599e1f5",\ "token":"\u5f00\u653e\u8005\u7684token",\ "encodingAesKey":"\u516c\u4f17\u53f7\u8bbe\u7f6e\u4e86\u52a0\u5bc6\u65b9\u5f0f\u4e14\u4e3a\u300c\u5b89\u5168\u6a21\u5f0f\u300d\u65f6\u9700\u8981\u586b\u5165",\ "mchId":"V3.x\u7248\u672c\u4e0b\u7684\u5fae\u4fe1\u5546\u6237\u53f7 \u670d\u52a1\u53f7\u652f\u4ed8\u65f6\u9700\u8981\u586b\u5165",\ diff --git a/weixin4j-qy/README.md b/weixin4j-qy/README.md index 77ae30b0..6e111855 100644 --- a/weixin4j-qy/README.md +++ b/weixin4j-qy/README.md @@ -102,3 +102,7 @@ weixin4j-qy * 2015-01-04 + **weixin4j-qy-api**: 新增批量删除员工接口 + +* 2015-01-15 + + + **weixin4j-qy-api**: 新增邀请成员关注接口 diff --git a/weixin4j-qy/weixin4j-qy-api/README.md b/weixin4j-qy/weixin4j-qy-api/README.md index 0cdec225..ca69cefc 100644 --- a/weixin4j-qy/weixin4j-qy-api/README.md +++ b/weixin4j-qy/weixin4j-qy-api/README.md @@ -67,3 +67,7 @@ weixin.properties说明 * 2015-01-04 + 新增批量删除员工接口 + +* 2015-01-15 + + + 新增邀请成员关注接口 diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java index 06181cfd..8772cbeb 100644 --- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java +++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java @@ -11,6 +11,7 @@ import com.foxinmy.weixin4j.qy.api.UserApi; import com.foxinmy.weixin4j.qy.model.Department; import com.foxinmy.weixin4j.qy.model.Tag; import com.foxinmy.weixin4j.qy.model.User; +import com.foxinmy.weixin4j.qy.type.InviteType; import com.foxinmy.weixin4j.qy.type.UserStatus; import com.foxinmy.weixin4j.token.FileTokenHolder; import com.foxinmy.weixin4j.token.TokenHolder; @@ -240,6 +241,24 @@ public class WeixinProxy { return userApi.batchDeleteUser(userIds); } + /** + * 邀请成员关注(管理员须拥有该成员的查看权限) + * + * @param userId + * 成员ID + * @param tips + * 推送到微信上的提示语(只有认证号可以使用)。当使用微信推送时,该字段默认为“请关注XXX企业号”,邮件邀请时,该字段无效。 + * @see com.foxinmy.weixin4j.qy.api.UserApi + * @return 调用结果 + * @see 邀请成员关注说明 + * @throws WeixinException + */ + public InviteType inviteUser(String userId, String tips) + throws WeixinException { + return userApi.inviteUser(userId, tips); + } + /** * 创建标签(创建的标签属于管理组;默认为未加锁状态) * diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java index e7548869..ec42ec49 100644 --- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java +++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java @@ -3,6 +3,8 @@ package com.foxinmy.weixin4j.qy.api; import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; + import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -11,6 +13,7 @@ import com.foxinmy.weixin4j.http.JsonResult; import com.foxinmy.weixin4j.http.Response; import com.foxinmy.weixin4j.model.Token; import com.foxinmy.weixin4j.qy.model.User; +import com.foxinmy.weixin4j.qy.type.InviteType; import com.foxinmy.weixin4j.qy.type.UserStatus; import com.foxinmy.weixin4j.token.TokenHolder; @@ -232,11 +235,45 @@ public class UserApi extends QyApi { * href="http://qydev.weixin.qq.com/wiki/index.php?title=%E5%85%B3%E6%B3%A8%E4%B8%8E%E5%8F%96%E6%B6%88%E5%85%B3%E6%B3%A8">二次验证说明 * @throws WeixinException */ - public JsonResult authsucc(String userid) throws WeixinException { + public JsonResult authsucc(String userId) throws WeixinException { String user_authsucc_uri = getRequestUri("user_authsucc_uri"); Token token = tokenHolder.getToken(); Response response = request.post(String.format(user_authsucc_uri, - token.getAccessToken(), userid)); + token.getAccessToken(), userId)); return response.getAsJsonResult(); } + + /** + * 邀请成员关注(管理员须拥有该成员的查看权限) + * + * @param userId + * 成员ID + * @param tips + * 推送到微信上的提示语(只有认证号可以使用)。当使用微信推送时,该字段默认为“请关注XXX企业号”,邮件邀请时,该字段无效。 + * @return 调用结果 + * @see 邀请成员关注说明 + * @throws WeixinException + */ + public InviteType inviteUser(String userId, String tips) + throws WeixinException { + JSONObject obj = new JSONObject(); + obj.put("userid", userId); + if (StringUtils.isBlank(tips)) { + obj.put("invite_tips", tips); + } + String invite_user_uri = getRequestUri("invite_user_uri"); + Token token = tokenHolder.getToken(); + Response response = request.post( + String.format(invite_user_uri, token.getAccessToken()), + obj.toJSONString()); + int type = response.getAsJson().getIntValue("type"); + if (type == 1) { + return InviteType.WEIXIN; + } else if (type == 2) { + return InviteType.EMAIL; + } else { + return null; + } + } } diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties index 8df836c3..a7a4e4a7 100644 --- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties +++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties @@ -45,6 +45,8 @@ tag_get_user_uri={api_base_url}/tag/get?access_token=%s&tagid=%d tag_add_user_uri={api_base_url}/tag/addtagusers?access_token=%s # \u5220\u9664\u6807\u7b7e\u6210\u5458 tag_delete_user_uri={api_base_url}/tag/deltagusers?access_token=%s +# \u9080\u8bf7\u6210\u5458\u5173\u6ce8 +invite_user_uri={api_base_url}/invite/send?access_token=%s # \u4e0a\u4f20\u5a92\u4f53\u6587\u4ef6 file_upload_uri={api_base_url}/media/upload?access_token=%s&type=%s # \u4e0b\u8f7d\u5a92\u4f53\u6587\u4ef6 diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/type/InviteType.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/type/InviteType.java new file mode 100644 index 00000000..af0f837b --- /dev/null +++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/type/InviteType.java @@ -0,0 +1,13 @@ +package com.foxinmy.weixin4j.qy.type; + +/** + * 邀请类型 + * @className InviteType + * @author jy + * @date 2015年1月15日 + * @since JDK 1.7 + * @see + */ +public enum InviteType { + WEIXIN, EMAIL +} diff --git a/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/UserTest.java b/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/UserTest.java index f6e99c30..3d6ac3ed 100644 --- a/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/UserTest.java +++ b/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/UserTest.java @@ -71,4 +71,9 @@ public class UserTest extends TokenTest { JsonResult result = userApi.deleteUser("u001"); Assert.assertEquals("deleted", result.getDesc()); } + + @Test + public void invite()throws WeixinException{ + userApi.inviteUser("11", null); + } }