同一个微信开放平台下的不同第三方平台绑定的小程序如何同时授权运转?
发布于 6 年前 作者 jungong 15000 次浏览 来自 问答

问题描述:

原来的小程序都绑定在微信开放平台的第一个第三方平台下,现第一个第三方平台的小程序绑定个数已达上限,故在同一个开放平台下创建了第二个第三方平台.如何改变代码使得绑定第一个开放平台的小程序任然能正常运作,然后第二个开放平台绑定的小程序也能授权运转?

环境背景:第三方平台绑定的小程序都是不同主体下的

尝试方法:将代码中的绑定的第三方平台的appsecret和appid改为第二个第三方平台,结果微信返回预授权码不合法,微信授权回调接口提示appid不合法

### 相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

//此为获取预授权码接口

public static void acquireComponentAccessToken() {

        String appid = PROP.get(“wx.open.appid”);

        String appsecret = PROP.get(“wx.open.appsecret”);

        String componentVerifyTicket = DecryptedComponentVerifyTicket.getInstance().getComponentVerifyTicket();

        Map<String, String> params = new HashMap<>();

        params.put(“component_appid”, appid);

        params.put(“component_appsecret”, appsecret);

        params.put(“component_verify_ticket”, componentVerifyTicket);

        String json = null;

        try {

            json = om.writeValueAsString(params);

        } catch (JsonProcessingException e) {}

        String resp = HttpKit.post(ACQUIRE_COMPONENT_ACCESS_TOKEN_URL, json);

        // LOG.info("(WXOPEN) JSON: " + json);

        LOG.info("(WXOPEN) ACQUIRE_COMPONENT_ACCESS_TOKEN: " + resp);

        Map<String, Object> map = null;

        try {

            map = om.readValue(resp, Map.class);

        } catch (IOException e) {}

        ComponentAccessToken componentAccessToken = ComponentAccessToken.getInstance();

        componentAccessToken.setComponentAccessToken((String) map.get(“component_access_token”));

        componentAccessToken.setExpiresIn((Integer) map.get(“expires_in”));

        componentAccessToken.setRefleshTime(new Date());

    }

 

    //此为微信回调接口

    public void index() {

        log.info(“notify请求”);

        // 获取component_verify_ticket推送,解密后存入单例对象

        EncryptedComponentVerifyTicket ticket = new EncryptedComponentVerifyTicket();

        wirePropertyFromRequest(ticket);

        // log.info("(WXOPEN) ticket: " + ticket);

        try {

            AuthorizerAccessTokenUtil.decrypt(ticket);

        } catch (AesException e) {

            log.error(“解密错误:” + e.getMessage());

        }

        // 根据是否失效,来向微信请求或从单例取得component_access_token

        if (ComponentAccessToken.isExpired()) {

            AuthorizerAccessTokenUtil.acquireComponentAccessToken();

        }

        log.info(“刷新授权”);

        // 扫描`wx_miniapp_auth`表,将10min后失效的数据刷新授权

        List<WXMiniappAuth> miniappAuthList = WXMiniappAuth.dao.list();

        AuthorizerAccessTokenUtil.refreshAuthorizerAccessToken(miniappAuthList);

        renderText(“success”);

    }

期待结果:第二个开放平台也能授权成功新的小程序

错误信息:微信返回预授权码不合法,微信授权回调接口提示appid不合法

回到顶部