All Downloads are FREE. Search and download functionalities are using the official Maven repository.

weixin.popular.api.ComponentAPI Maven / Gradle / Ivy

Go to download

The weixin-popular is a JAVA SDK for weixin. Weixin web url is https://mp.weixin.qq.com.

There is a newer version: 2.8.32
Show newest version
package weixin.popular.api;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

/**
 * 公众号第三方平台
 *
 * @author LiYi
 */
public class ComponentAPI extends BaseAPI {

    private static Logger logger = LoggerFactory.getLogger(CommentAPI.class);

    /**
     * 生成授权页 URL
     *
     * @param component_appid 第三方平台ID
     * @param pre_auth_code   预授权码
     * @param redirect_uri    重定向URI
     * @return URL
     */
    public static String componentloginpage(String component_appid, String pre_auth_code, String redirect_uri) {
        return componentloginpage(component_appid, pre_auth_code, redirect_uri, null);
    }

    /**
     * 生成授权页 URL
     *
     * @param component_appid 第三方平台ID
     * @param pre_auth_code   预授权码
     * @param redirect_uri    重定向URI
     * @param auth_type       要授权的帐号类型 
* 1 则商户扫码后,手机端仅展示公众号
* 2 表示仅展示小程序
* 3 表示公众号和小程序都展示。
* 如果为未制定,则默认小程序和公众号都展示。第三方平台开发者可以使用本字段来控制授权的帐号类型。 * @return URL * @since 2.8.20 */ public static String componentloginpage(String component_appid, String pre_auth_code, String redirect_uri, String auth_type) { try { StringBuilder sb = new StringBuilder(); sb.append(MP_URI + "/cgi-bin/componentloginpage?") .append("component_appid=").append(component_appid) .append("&pre_auth_code=").append(pre_auth_code) .append("&redirect_uri=").append(URLEncoder.encode(redirect_uri, "utf-8")); if (auth_type != null) { sb.append("&auth_type=").append(auth_type); } return sb.toString(); } catch (UnsupportedEncodingException e) { logger.error("", e); } return null; } /** * 生成移动端快速授权URL * @since 2.8.22 * @param component_appid 第三方平台ID * @param pre_auth_code 预授权码 * @param redirect_uri 重定向URI * @param auth_type 要授权的帐号类型
* 1 则商户扫码后,手机端仅展示公众号
* 2 表示仅展示小程序
* 3 表示公众号和小程序都展示。
* 如果为未制定,则默认小程序和公众号都展示。第三方平台开发者可以使用本字段来控制授权的帐号类型。 * @return URL */ public static String safeBindcomponent(String component_appid, String pre_auth_code, String redirect_uri, String auth_type) { try { StringBuilder sb = new StringBuilder(); sb.append(MP_URI + "/safe/bindcomponent?") .append("action=").append("bindcomponent") .append("&auth_type=").append(auth_type) .append("&no_scan=").append("1") .append("&component_appid=").append(component_appid) .append("&pre_auth_code=").append(pre_auth_code) .append("&redirect_uri=").append(URLEncoder.encode(redirect_uri, "utf-8")); return sb.toString(); } catch (UnsupportedEncodingException e) { logger.error("", e); throw new RuntimeException(e); } } /** * 获取公众号第三方平台access_token * * @param component_appid 公众号第三方平台appid * @param component_appsecret 公众号第三方平台appsecret * @param component_verify_ticket 微信后台推送的ticket,此ticket会定时推送,具体请见本页末尾的推送说明 * @return 公众号第三方平台access_token */ public static ComponentAccessToken api_component_token(String component_appid, String component_appsecret, String component_verify_ticket) { String postJsonData = String.format("{\"component_appid\":\"%1$s\" ,\"component_appsecret\": \"%2$s\",\"component_verify_ticket\": \"%3$s\"}", component_appid, component_appsecret, component_verify_ticket); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI + "/cgi-bin/component/api_component_token") .setEntity(new StringEntity(postJsonData, Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest, ComponentAccessToken.class); } /** * 获取预授权码 * * @param component_access_token component_access_token * @param component_appid 公众号第三方平台appid * @return 预授权码 */ public static PreAuthCode api_create_preauthcode(String component_access_token, String component_appid) { String postJsonData = String.format("{\"component_appid\":\"%1$s\"}", component_appid); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI + "/cgi-bin/component/api_create_preauthcode") .addParameter("component_access_token", API.componentAccessToken(component_access_token)) .setEntity(new StringEntity(postJsonData, Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest, PreAuthCode.class); } /** * 使用授权码换取公众号的授权信息 * * @param component_access_token component_access_token * @param component_appid 公众号第三方平台appid * @param authorization_code 授权code,会在授权成功时返回给第三方平台,详见第三方平台授权流程说明 * @return 公众号的授权信息 */ public static ApiQueryAuthResult api_query_auth(String component_access_token, String component_appid, String authorization_code) { String postJsonData = String.format("{\"component_appid\":\"%1$s\",\"authorization_code\":\"%2$s\"}", component_appid, authorization_code); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI + "/cgi-bin/component/api_query_auth") .addParameter("component_access_token", API.componentAccessToken(component_access_token)) .setEntity(new StringEntity(postJsonData, Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest, ApiQueryAuthResult.class); } /** * 获取(刷新)授权公众号的令牌 * * @param component_access_token component_access_token * @param component_appid 公众号第三方平台appid * @param authorizer_appid 授权方appid * @param authorizer_refresh_token 授权方的刷新令牌,刷新令牌主要用于公众号第三方平台获取和刷新已授权用户的access_token,只会在授权时刻提供,请妥善保存。 一旦丢失,只能让用户重新授权,才能再次拿到新的刷新令牌 * @return 授权公众号的令牌 */ public static AuthorizerAccessToken api_authorizer_token(String component_access_token, String component_appid, String authorizer_appid, String authorizer_refresh_token) { String postJsonData = String.format("{\"component_appid\":\"%1$s\",\"authorizer_appid\":\"%2$s\",\"authorizer_refresh_token\":\"%3$s\"}", component_appid, authorizer_appid, authorizer_refresh_token); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI + "/cgi-bin/component/api_authorizer_token") .addParameter("component_access_token", API.componentAccessToken(component_access_token)) .setEntity(new StringEntity(postJsonData, Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest, AuthorizerAccessToken.class); } /** * 获取授权方的账户信息 * * @param component_access_token component_access_token * @param component_appid 服务appid * @param authorizer_appid 授权方appid * @return 授权方的账户信息 */ public static ApiGetAuthorizerInfoResult api_get_authorizer_info(String component_access_token, String component_appid, String authorizer_appid) { String postJsonData = String.format("{\"component_appid\":\"%1$s\",\"authorizer_appid\":\"%2$s\"}", component_appid, authorizer_appid); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI + "/cgi-bin/component/api_get_authorizer_info") .addParameter("component_access_token", API.componentAccessToken(component_access_token)) .setEntity(new StringEntity(postJsonData, Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest, ApiGetAuthorizerInfoResult.class); } /** * 获取授权方的选项设置信息 * * @param component_access_token component_access_token * @param component_appid 公众号第三方平台appid * @param authorizer_appid 授权公众号appid * @param option_name 选项名称
* location_report (地理位置上报选项) 0 无上报 1 进入会话时上报 2 每5s上报
* voice_recognize(语音识别开关选项) 0 关闭语音识别 1 开启语音识别
* customer_service(多客服开关选项) 0 关闭多客服 1 开启多客服
* @return AuthorizerOption */ public static AuthorizerOption api_get_authorizer_option(String component_access_token, String component_appid, String authorizer_appid, String option_name) { String postJsonData = String.format("{\"component_appid\":\"%1$s\",\"authorizer_appid\":\"%2$s\",\"option_name\":\"%3$s\"}", component_appid, authorizer_appid, option_name); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI + "/cgi-bin/component/api_get_authorizer_option") .addParameter("component_access_token", API.componentAccessToken(component_access_token)) .setEntity(new StringEntity(postJsonData, Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest, AuthorizerOption.class); } /** * 设置授权方的选项信息 * * @param component_access_token component_access_token * @param component_appid 公众号第三方平台appid * @param authorizer_appid 授权公众号appid * @param option_name 选项名称
* location_report (地理位置上报选项) 0 无上报 1 进入会话时上报 2 每5s上报
* voice_recognize(语音识别开关选项) 0 关闭语音识别 1 开启语音识别
* customer_service(多客服开关选项) 0 关闭多客服 1 开启多客服
* @param option_value 设置的选项值 * @return BaseResult */ public static BaseResult api_set_authorizer_option(String component_access_token, String component_appid, String authorizer_appid, String option_name, String option_value) { String postJsonData = String.format("{\"component_appid\":\"%1$s\",\"authorizer_appid\":\"%2$s\",\"option_name\":\"%3$s\",\"option_value\":\"%4$s\"}", component_appid, authorizer_appid, option_name, option_value); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI + "/cgi-bin/component/api_set_authorizer_option") .addParameter("component_access_token", API.componentAccessToken(component_access_token)) .setEntity(new StringEntity(postJsonData, Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest, BaseResult.class); } /** * 第三方平台对其所有API调用次数清零 * * @param component_access_token 调用接口凭据 * @param component_appid 第三方平台APPID * @return result * @since 2.8.2 */ public static BaseResult clear_quota(String component_access_token, String component_appid) { String json = String.format("{\"component_appid\":\"%s\"}", component_appid); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI + "/cgi-bin/component/clear_quota") .addParameter("component_access_token", API.componentAccessToken(component_access_token)) .setEntity(new StringEntity(json, Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest, BaseResult.class); } /** * 拉取当前所有已授权的帐号基本信息 * * @param component_access_token component_access_token * @param component_appid 第三方平台APPID * @param offset 偏移位置/起始位置 * @param count 拉取数量,最大为500 * @return ApiGetAuthorizerListResult */ public static ApiGetAuthorizerListResult api_get_authorizer_list(String component_access_token, String component_appid, String offset, String count) { String postJsonData = String.format("{\"component_appid\":\"%1$s\",\"offset\":\"%2$s\",\"count\":\"%3$s\"}", component_appid, offset, count); HttpUriRequest httpUriRequest = RequestBuilder.post() .setHeader(jsonHeader) .setUri(BASE_URI + "/cgi-bin/component/api_get_authorizer_list") .addParameter("component_access_token", API.componentAccessToken(component_access_token)) .setEntity(new StringEntity(postJsonData, Charset.forName("utf-8"))) .build(); return LocalHttpClient.executeJsonResult(httpUriRequest, ApiGetAuthorizerListResult.class); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy