同一个微信开放平台下的不同第三方平台绑定的小程序如何同时授权运转?

发布于 2022-09-11 16:17:51 字数 2525 浏览 15 评论 0

问题描述

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

问题出现的环境背景及自己尝试过哪些方法

环境背景:第三方平台绑定的小程序都是不同主体下的
尝试方法:将代码中的绑定的第三方平台的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不合法

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

温柔少女心 2022-09-18 16:17:51

可能要数据库记录一下授权的小程序属于哪一个开放平台,根据数据库记录的绑定信息判断到底使用哪一个第三方开放平台的appsecret和appid。

授权回调配置:第一个第三方:/callback/xxx/1。 第二个第三方:/callback/xxx/2,根据后面的数字匹配数据库中对应的第三方平台信息,然后再进行获取。

比如有一个third_party_platform表记录第三方平台的信息

我不知道你是不是两个第三方平台用了同一个回调地址导致的。

图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文