package weixin.popular.api; import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.charset.Charset; import javax.imageio.ImageIO; import org.apache.http.Header; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.entity.StringEntity; import org.apache.http.util.EntityUtils; import weixin.popular.bean.BaseResult; import weixin.popular.bean.wxa.Commit; import weixin.popular.bean.wxa.GetAuditstatusResult; import weixin.popular.bean.wxa.GetCategoryResult; import weixin.popular.bean.wxa.GetPageResult; import weixin.popular.bean.wxa.GetQrcodeResult; import weixin.popular.bean.wxa.ModifyDomain; import weixin.popular.bean.wxa.ModifyDomainResult; import weixin.popular.bean.wxa.SubmitAudit; import weixin.popular.bean.wxa.SubmitAuditResult; import weixin.popular.client.LocalHttpClient; import weixin.popular.util.JsonUtil; /** * 微信小程序接口 * @author LiYi * @since 2.8.9 */ public class WxaAPI extends BaseAPI { /** * 修改服务器地址 * @since 2.8.9 * @param access_token access_token * @param modifyDomain modifyDomain * @return result */ public static ModifyDomainResult modify_domain(String access_token,ModifyDomain modifyDomain){ String json = JsonUtil.toJSONString(modifyDomain); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI+"/wxa/modify_domain") .addParameter(PARAM_ACCESS_TOKEN, API.accessToken(access_token)) .setEntity(new StringEntity(json,Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest,ModifyDomainResult.class); } /** * 成员管理 <br> * 绑定微信用户为小程序体验者 * @since 2.8.9 * @param access_token access_token * @param wechatid 微信号 * @return result */ public static BaseResult bind_tester(String access_token,String wechatid){ String json = String.format("{\"wechatid\":\"%s\"}",wechatid); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI+"/wxa/bind_tester") .addParameter(PARAM_ACCESS_TOKEN, API.accessToken(access_token)) .setEntity(new StringEntity(json,Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest,BaseResult.class); } /** * 成员管理 <br> * 解除绑定小程序的体验者 * @since 2.8.9 * @param access_token access_token * @param wechatid 微信号 * @return result */ public static BaseResult unbind_tester(String access_token,String wechatid){ String json = String.format("{\"wechatid\":\"%s\"}",wechatid); HttpUriRequest httpUriRequest = RequestBuilder.get() .setHeader(jsonHeader) .setUri(BASE_URI+"/wxa/unbind_tester") .addParameter(PARAM_ACCESS_TOKEN, API.accessToken(access_token)) .setEntity(new StringEntity(json,Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest,BaseResult.class); } /** * 代码管理<br> * 为授权的小程序帐号上传小程序代码 * @since 2.8.9 * @param access_token access_token * @param commit commit * @return result */ public static BaseResult commit(String access_token,Commit commit){ String json = JsonUtil.toJSONString(commit); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI+"/wxa/commit") .addParameter(PARAM_ACCESS_TOKEN, API.accessToken(access_token)) .setEntity(new StringEntity(json,Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest,BaseResult.class); } /** * 代码管理<br> * 获取体验小程序的体验二维码 * @since 2.8.9 * @param access_token access_token * @return result */ public static GetQrcodeResult get_qrcode(String access_token){ HttpUriRequest httpUriRequest = RequestBuilder.get() .setUri(BASE_URI + "/wxa/get_qrcode") .addParameter(PARAM_ACCESS_TOKEN, API.accessToken(access_token)) .build(); CloseableHttpResponse httpResponse = LocalHttpClient.execute(httpUriRequest); try { int status = httpResponse.getStatusLine().getStatusCode(); Header header = httpResponse.getFirstHeader("Content-disposition"); if(header != null && header.getValue().endsWith("filename=\"QRCode.jpg\"")){ if(status == 200){ byte[] bytes = EntityUtils.toByteArray(httpResponse.getEntity()); GetQrcodeResult result = new GetQrcodeResult(); result.setBufferedImage(ImageIO.read(new ByteArrayInputStream(bytes))); return result; } }else{ String body = EntityUtils.toString(httpResponse.getEntity()); return JsonUtil.parseObject(body, GetQrcodeResult.class); } } catch (IOException e) { e.printStackTrace(); } finally { try { httpResponse.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } /** * 代码管理<br> * 获取授权小程序帐号的可选类目 * @since 2.8.9 * @param access_token access_token * @return result */ public static GetCategoryResult get_category(String access_token){ HttpUriRequest httpUriRequest = RequestBuilder.get() .setUri(BASE_URI+"/wxa/get_category") .addParameter(PARAM_ACCESS_TOKEN, API.accessToken(access_token)) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest,GetCategoryResult.class); } /** * 代码管理<br> * 获取小程序的第三方提交代码的页面配置(仅供第三方开发者代小程序调用) * @since 2.8.9 * @param access_token access_token * @return result */ public static GetPageResult get_page(String access_token){ HttpUriRequest httpUriRequest = RequestBuilder.get() .setUri(BASE_URI+"/wxa/get_page") .addParameter(PARAM_ACCESS_TOKEN, API.accessToken(access_token)) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest,GetPageResult.class); } /** * 代码管理<br> * 将第三方提交的代码包提交审核(仅供第三方开发者代小程序调用) * @since 2.8.9 * @param access_token access_token * @param submitAudit submitAudit * @return result */ public static SubmitAuditResult submit_audit(String access_token,SubmitAudit submitAudit){ String json = JsonUtil.toJSONString(submitAudit); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI+"/wxa/submit_audit") .addParameter(PARAM_ACCESS_TOKEN, API.accessToken(access_token)) .setEntity(new StringEntity(json,Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest,SubmitAuditResult.class); } /** * 代码管理<br> * 获取第三方提交的审核版本的审核状态(仅供第三方代小程序调用) * @since 2.8.9 * @param access_token access_token * @param auditid 审核ID * @return result */ public static GetAuditstatusResult get_auditstatus(String access_token,String auditid){ String json = String.format("{\"auditid\":\"%s\"}",auditid); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI+"/wxa/get_auditstatus") .addParameter(PARAM_ACCESS_TOKEN, API.accessToken(access_token)) .setEntity(new StringEntity(json,Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest,GetAuditstatusResult.class); } /** * 代码管理<br> * 发布已通过审核的小程序(仅供第三方代小程序调用) * @since 2.8.9 * @param access_token access_token * @return result */ public static BaseResult release(String access_token){ HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI+"/wxa/release") .addParameter(PARAM_ACCESS_TOKEN, API.accessToken(access_token)) .setEntity(new StringEntity("{}",Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest,BaseResult.class); } /** * 代码管理<br> * 修改小程序线上代码的可见状态(仅供第三方代小程序调用) * @since 2.8.9 * @param access_token access_token * @param action 设置可访问状态,发布后默认可访问,close为不可见,open为可见 * @return result */ public static BaseResult change_visitstatus(String access_token,String action){ String json = String.format("{\"action\":\"%s\"}",action); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI+"/wxa/change_visitstatus") .addParameter(PARAM_ACCESS_TOKEN, API.accessToken(access_token)) .setEntity(new StringEntity(json,Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest,BaseResult.class); } }