Skip to content

Commit

Permalink
2.7.1
Browse files Browse the repository at this point in the history
-------------------------------------
* 日志输出改进
* 部分bean 添加成员变量
* 添加 ClearQuotaAPI
* MenuAPI 添加自定义菜单重载方法
* PayMchAPI 添加刷卡支付 授权码查询OPENID接口
* emoji 表情支持
  • Loading branch information
liyiorg committed May 18, 2016
1 parent 16c7072 commit 67c3719
Show file tree
Hide file tree
Showing 25 changed files with 963 additions and 89 deletions.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ weixin-popular 包括微信公众平台、公众号第三方平台基础API与
* [ShorturlAPI](https://github.com/liyiorg/weixin-popular/wiki/ShorturlAPI) 长链接转短链接
* [TicketAPI](https://github.com/liyiorg/weixin-popular/wiki/TicketAPI) JSAPI ticket
* [ComponentAPI](https://github.com/liyiorg/weixin-popular/wiki/ComponentAPI) 第三方平台开发
* [CallbackipAPI](https://github.com/liyiorg/weixin-popular/wiki/CallbackipAPI) 获取微信服务器IP地址
* [ClearQuotaAPI](https://github.com/liyiorg/weixin-popular/wiki/ClearQuotaAPI) 接口调用频次清零

### 待开发API
* [BizwifiAPI](https://github.com/liyiorg/weixin-popular/wiki/BizwifiAPI) 微信连Wi-Fi
Expand All @@ -36,6 +38,11 @@ weixin-popular 包括微信公众平台、公众号第三方平台基础API与
## API 模式切换
* [API 切换] (https://github.com/liyiorg/weixin-popular/wiki/API 模式切换)

## EMOJI 表情
* :four_leaf_clover: [API 使用](https://github.com/liyiorg/weixin-popular/wiki/emoji_api)
* :palm_tree: [页面 使用](https://github.com/liyiorg/weixin-popular/wiki/emoji_web)
* :tiger: [EmojiUtil](https://github.com/liyiorg/weixin-popular/wiki/emoji_tool)

## 日志记录
* 2.7.0+ 版本后增加日志记录
* API 日志记录,info 级别。
Expand Down
9 changes: 9 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@ WEIXIN-POPULAR CHANGELOG
===========================
https://github.com/liyiorg/weixin-popular

Changes in version 2.7.1 (2016-05-18)
-------------------------------------
* 日志输出改进
* 部分bean 添加成员变量
* 添加 ClearQuotaAPI
* MenuAPI 添加自定义菜单重载方法
* PayMchAPI 添加刷卡支付 授权码查询OPENID接口
* emoji 表情支持

Changes in version 2.7.0 (2016-04-25)
-------------------------------------
* 第三方平台API调整
Expand Down
7 changes: 6 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>weixin</groupId>
<artifactId>weixin-popular</artifactId>
<version>2.7.0-RELEASE</version>
<version>2.7.1-RELEASE</version>
<url>https://github.com/liyiorg/weixin-popular</url>

<dependencies>
Expand Down Expand Up @@ -64,6 +64,11 @@
<version>1.7.19</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
Expand Down
40 changes: 40 additions & 0 deletions src/main/java/weixin/popular/api/ClearQuotaAPI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package weixin.popular.api;

import java.nio.charset.Charset;

import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.StringEntity;

import weixin.popular.bean.BaseResult;
import weixin.popular.client.LocalHttpClient;

/**
*
* 接口调用频次清零API <br/>
* 公众号调用接口并不是无限制的。为了防止公众号的程序错误而引发微信服务器负载异常,默认情况下,每个公众号调用接口都不能超过一定限制,当超过一定限制时,调用对应接口会收到如下错误返回码:
* {"errcode":45009,"errmsg":"api freq out of limit"}
* @author LiYi
* @since 2.7.1
*/
public class ClearQuotaAPI extends BaseAPI{

/**
* 公众号调用或第三方平台帮公众号调用对公众号的所有api调用(包括第三方帮其调用)次数进行清零
* @since 2.7.1
* @param access_token
* @param appid
* @return
*/
public static BaseResult clear_quota(String access_token,String appid){
String json = String.format("{\"appid\":\"%s\"}", appid);
HttpUriRequest httpUriRequest = RequestBuilder.post()
.setHeader(jsonHeader)
.setUri(BASE_URI+"/cgi-bin/clear_quota")
.addParameter(getATPN(), access_token)
.setEntity(new StringEntity(json,Charset.forName("utf-8")))
.build();
return LocalHttpClient.executeJsonResult(httpUriRequest,BaseResult.class);
}

}
11 changes: 11 additions & 0 deletions src/main/java/weixin/popular/api/MenuAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,17 @@ public static CurrentSelfmenuInfo get_current_selfmenu_info(String access_token)
*/
public static BaseResult menuAddconditional(String access_token,MenuButtons menuButtons){
String menuJson = JsonUtil.toJSONString(menuButtons);
return menuAddconditional(access_token,menuJson);
}

/**
* 创建个性化菜单
* @since 2.7.1
* @param access_token
* @param menuJson
* @return
*/
public static BaseResult menuAddconditional(String access_token,String menuJson){
HttpUriRequest httpUriRequest = RequestBuilder.post()
.setHeader(jsonHeader)
.setUri(BASE_URI+"/cgi-bin/menu/addconditional")
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/weixin/popular/api/PayMchAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import org.apache.http.entity.StringEntity;
import org.apache.http.util.EntityUtils;

import weixin.popular.bean.paymch.Authcodetoopenid;
import weixin.popular.bean.paymch.AuthcodetoopenidResult;
import weixin.popular.bean.paymch.Closeorder;
import weixin.popular.bean.paymch.DownloadbillResult;
import weixin.popular.bean.paymch.MchBaseResult;
Expand Down Expand Up @@ -267,6 +269,25 @@ public static MchShorturlResult toolsShorturl(MchShorturl shorturl,String key){
.build();
return LocalHttpClient.executeXmlResult(httpUriRequest,MchShorturlResult.class);
}

/**
* 刷卡支付 授权码查询OPENID接口
* @param authcodetoopenid
* @param key
* @return
*/
public static AuthcodetoopenidResult toolsAuthcodetoopenid(Authcodetoopenid authcodetoopenid,String key){
Map<String,String> map = MapUtil.objectToMap(authcodetoopenid);
String sign = SignatureUtil.generateSign(map,key);
authcodetoopenid.setSign(sign);
String shorturlXML = XMLConverUtil.convertToXML(authcodetoopenid);
HttpUriRequest httpUriRequest = RequestBuilder.post()
.setHeader(xmlHeader)
.setUri(MCH_URI + "/tools/authcodetoopenid")
.setEntity(new StringEntity(shorturlXML,Charset.forName("utf-8")))
.build();
return LocalHttpClient.executeXmlResult(httpUriRequest,AuthcodetoopenidResult.class);
}

/**
* 测速上报
Expand Down
28 changes: 26 additions & 2 deletions src/main/java/weixin/popular/api/SnsAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import weixin.popular.bean.sns.SnsToken;
import weixin.popular.bean.user.User;
import weixin.popular.client.LocalHttpClient;
import weixin.popular.util.EmojiUtil;

/**
* 网页授权
Expand Down Expand Up @@ -94,19 +95,42 @@ public static SnsToken oauth2ComponentRefreshToken(String appid,String refresh_t

/**
* 拉取用户信息(需scope为 snsapi_userinfo)
* @since 2.7.1
* @param access_token
* @param openid
* @param lang 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
* @param emoji 表情解析方式<br>
* 0 不设置 <br>
* 1 HtmlHex 格式<br>
* 2 HtmlTag 格式<br>
* 3 Alias 格式<br>
* 4 HtmlDec 格式<br>
* 5 PureText 纯文本<br>
* @return
*/
public static User userinfo(String access_token,String openid,String lang){
public static User userinfo(String access_token,String openid,String lang,int emoji){
HttpUriRequest httpUriRequest = RequestBuilder.post()
.setUri(BASE_URI + "/sns/userinfo")
.addParameter(PARAM_ACCESS_TOKEN, access_token)
.addParameter("openid", openid)
.addParameter("lang", lang)
.build();
return LocalHttpClient.executeJsonResult(httpUriRequest,User.class);
User user = LocalHttpClient.executeJsonResult(httpUriRequest,User.class);
if(emoji != 0 && user != null && user.getNickname() != null){
user.setNickname_emoji(EmojiUtil.parse(user.getNickname(), emoji));
}
return user;
}

/**
* 拉取用户信息(需scope为 snsapi_userinfo)
* @param access_token
* @param openid
* @param lang 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
* @return
*/
public static User userinfo(String access_token,String openid,String lang){
return userinfo(access_token, openid, lang,0);
}

/**
Expand Down
58 changes: 54 additions & 4 deletions src/main/java/weixin/popular/api/UserAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,47 @@
import weixin.popular.bean.user.User;
import weixin.popular.bean.user.UserInfoList;
import weixin.popular.client.LocalHttpClient;
import weixin.popular.util.EmojiUtil;
import weixin.popular.util.JsonUtil;

public class UserAPI extends BaseAPI{

/**
* 获取用户基本信息
* @since 2.7.1
* @param access_token
* @param openid
* @param emoji 表情解析方式<br>
* 0 不设置 <br>
* 1 HtmlHex 格式<br>
* 2 HtmlTag 格式<br>
* 3 Alias 格式<br>
* 4 HtmlDec 格式<br>
* 5 PureText 纯文本<br>
* @return
*/
public static User userInfo(String access_token,String openid){
public static User userInfo(String access_token,String openid,int emoji){
HttpUriRequest httpUriRequest = RequestBuilder.post()
.setUri(BASE_URI+"/cgi-bin/user/info")
.addParameter(getATPN(),access_token)
.addParameter("openid",openid)
.addParameter("lang","zh_CN")
.build();
return LocalHttpClient.executeJsonResult(httpUriRequest,User.class);
User user = LocalHttpClient.executeJsonResult(httpUriRequest,User.class);
if(emoji != 0 && user != null && user.getNickname() != null){
user.setNickname_emoji(EmojiUtil.parse(user.getNickname(), emoji));
}
return user;
}

/**
* 获取用户基本信息
* @param access_token
* @param openid
* @return
*/
public static User userInfo(String access_token,String openid){
return userInfo(access_token, openid, 0);
}

/**
Expand All @@ -50,12 +73,20 @@ public static FollowResult userGet(String access_token,String next_openid){

/**
* 批量获取用户基本信息
* @since 2.7.1
* @param access_token
* @param lang zh-CN
* @param openids 最多支持一次拉取100条
* @param emoji 表情解析方式<br>
* 0 不设置 <br>
* 1 HtmlHex 格式<br>
* 2 HtmlTag 格式<br>
* 3 Alias 格式<br>
* 4 HtmlDec 格式<br>
* 5 PureText 纯文本<br>
* @return
*/
public static UserInfoList userInfoBatchget(String access_token,String lang,List<String> openids){
public static UserInfoList userInfoBatchget(String access_token,String lang,List<String> openids,int emoji){
StringBuilder sb = new StringBuilder();
sb.append("{\"user_list\": [");
for(int i = 0;i < openids.size();i++){
Expand All @@ -71,7 +102,26 @@ public static UserInfoList userInfoBatchget(String access_token,String lang,List
.addParameter(getATPN(),access_token)
.setEntity(new StringEntity(sb.toString(), Charset.forName("utf-8")))
.build();
return LocalHttpClient.executeJsonResult(httpUriRequest,UserInfoList.class);
UserInfoList userInfoList = LocalHttpClient.executeJsonResult(httpUriRequest,UserInfoList.class);
if(emoji != 0 && userInfoList != null && userInfoList.getUser_info_list() != null){
for(User user : userInfoList.getUser_info_list()){
if(user.getNickname() != null){
user.setNickname_emoji(EmojiUtil.parse(user.getNickname(), emoji));
}
}
}
return userInfoList;
}

/**
* 批量获取用户基本信息
* @param access_token
* @param lang zh-CN
* @param openids 最多支持一次拉取100条
* @return
*/
public static UserInfoList userInfoBatchget(String access_token,String lang,List<String> openids){
return userInfoBatchget(access_token, lang, openids,0);
}

/**
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/weixin/popular/bean/material/NewsItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

import java.util.List;

import weixin.popular.bean.BaseResult;
import weixin.popular.bean.message.Article;

public class NewsItem {
public class NewsItem extends BaseResult{

private List<Article> news_item;

Expand Down
62 changes: 62 additions & 0 deletions src/main/java/weixin/popular/bean/message/AroundBeacon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package weixin.popular.bean.message;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
*
* 摇一摇 周边事件数据
*
* @author LiYi
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="AroundBeacon")
public class AroundBeacon {

@XmlElement(name="Uuid")
private String uuid;

@XmlElement(name="Major")
private String major;

@XmlElement(name="Minor")
private String minor;

@XmlElement(name="Distance")
private String distance;

public String getUuid() {
return uuid;
}

public void setUuid(String uuid) {
this.uuid = uuid;
}

public String getMajor() {
return major;
}

public void setMajor(String major) {
this.major = major;
}

public String getMinor() {
return minor;
}

public void setMinor(String minor) {
this.minor = minor;
}

public String getDistance() {
return distance;
}

public void setDistance(String distance) {
this.distance = distance;
}
}
Loading

0 comments on commit 67c3719

Please sign in to comment.