收藏
回答

小程序调用jsCode2SessionInfo报错?HTTP/1.1 400 Bad Request

代码如下:
WxMaService wxMaService  = new WxMaServiceImpl();
WxMaDefaultConfigImpl wxMaConfig = new WxMaDefaultConfigImpl();
wxMaConfig.setAppid(appid);
wxMaConfig.setSecret(secret);
if (getAppletHttpProxy()) {
    wxMaConfig.setHttpProxyHost(PROXY_HOST);
    wxMaConfig.setHttpProxyPort(PROXY_PORT);
}
wxMaConfig.setMsgDataFormat("JSON");
wxMaService.setWxMaConfig(wxMaConfig);
WxMaJscode2SessionResult wxMaJscode2SessionResult = null;
try {
    LOGGER.info("wxMaConfig=={}",wxMaService.getWxMaConfig().toString());
    wxMaJscode2SessionResult = wxMaService.jsCode2SessionInfo(bo.getCode());
} catch (WxErrorException e){
    e.printStackTrace();
    WxError error = e.getError();
    LOGGER.error("获取accessToken失败,errCode=[{}]errMsg=[{}]", error.getErrorCode(), error.getErrorMsg());
    throw new BizException(String.valueOf(error.getErrorCode()), error.getErrorMsg());
}


调用小程序weixin-java-miniapp包底层代码WxMaServiceImpl

Lock lock = getWxMaConfig().getAccessTokenLock();
lock.lock();

String var10;
try {
    String url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", 
    getWxMaConfig().getAppid(),getWxMaConfig().getSecret());
    try {
        HttpGet httpGet = new HttpGet(url);
        LOGGER.info("httpGet=={}",httpGet.toString());  // httpGet==GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx280f80408593d848&secret=19b56acbe67fdad678249210f8fc4526 HTTP/1.1
        if (getRequestHttpProxy() != null) {
            RequestConfig config = RequestConfig.custom().setProxy(getRequestHttpProxy()).build();
            LOGGER.info("config=={}",config.toString());  // config==[expectContinueEnabled=false, proxy=http://10.16.126.30:2443, localAddress=null, cookieSpec=null, redirectsEnabled=true, relativeRedirectsAllowed=true, maxRedirects=50, circularRedirectsAllowed=false, authenticationEnabled=true, targetPreferredAuthSchemes=null, proxyPreferredAuthSchemes=null, connectionRequestTimeout=-1, connectTimeout=-1, socketTimeout=-1, contentCompressionEnabled=true, normalizeUri=true]
            httpGet.setConfig(config);
        }

        try {
            CloseableHttpResponse response = getRequestHttpClient().execute(httpGet);
            LOGGER.info("response=={}",response.toString());  //response==HttpResponseProxy{HTTP/1.1 400 Bad Request [Server: nginx, Date: Thu, 25 Aug 2022 01:18:57 GMT, Content-Type: text/html, Content-Length: 150, Connection: close] org.apache.http.entity.BufferedHttpEntity@32ab3ee7}
            Throwable var6 = null;



由于应用服务器A无法与外网通信,需要应用服务器A通过代理前置服务器B去访问外网 B服务器地址为:10.16.126.30:3443

前置服务器nginx配置,还有一个疑问,location /weixin 这个地址在代码中哪里配置?

nginx配置 location / { 报错还是一样

下面是上边的代码打印的日志

httpGet==GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx280f80408593d848&secret=19b56acbe67fdad678249210f8fc4526 HTTP/1.1

config==[expectContinueEnabled=false, proxy=http://10.16.126.30:3443, localAddress=null, cookieSpec=null, redirectsEnabled=true, relativeRedirectsAllowed=true, maxRedirects=50, circularRedirectsAllowed=false, authenticationEnabled=true, targetPreferredAuthSchemes=null, proxyPreferredAuthSchemes=null, connectionRequestTimeout=-1, connectTimeout=-1, socketTimeout=-1, contentCompressionEnabled=true, normalizeUri=true]

response==HttpResponseProxy{HTTP/1.1 400 Bad Request [Server: nginx, Date: Thu, 25 Aug 2022 01:18:57 GMT, Content-Type: text/html, Content-Length: 150, Connection: close] org.apache.http.entity.BufferedHttpEntity@32ab3ee7}

这是前置服务器打印的日志

 -" "-" "[25/Aug/2022:09:18:57 +0800]" "CONNECT api.weixin.qq.com:443 HTTP/1.1" "400" "150" "-" "-" "10.16.98.50" "-" "-" "0.001" "-" "-"


应用服务器A访问下面这个地址是可以获得token的

curl “http://10.16.126.30:3443/weixin/cgi-bin/token?grant_type=client_credential&appid=wx280f80408593d848&secret=19b56acbe67fdad678249210f8fc4526


回答关注问题邀请回答
收藏

1 个回答

  • Mr.Zhao
    Mr.Zhao
    2022-08-25

    curl调通了 再讲代码吧

    2022-08-25
    有用
    回复 2
    • 李超孔
      李超孔
      2022-08-25
      curl是通了的,可以获得token
      2022-08-25
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-08-25回复李超孔
      代码改成curl的地址就行了  sdk怎么改,你得看源码,不支持修改域名,你就得自己写
      2022-08-25
      回复
登录 后发表内容