Title: 公众号开发永久下载图片和声音的接口 materialImageOrVoiceDownload 无法正常刷新 AccessToken · Issue #3196 · binarywang/WxJava · GitHub
Open Graph Title: 公众号开发永久下载图片和声音的接口 materialImageOrVoiceDownload 无法正常刷新 AccessToken · Issue #3196 · binarywang/WxJava
X Title: 公众号开发永久下载图片和声音的接口 materialImageOrVoiceDownload 无法正常刷新 AccessToken · Issue #3196 · binarywang/WxJava
Description: 第一次提Issue 暂时不会提PR 麻烦修复一下这个BUG 简要描述 请简单概括描述下你所遇到的问题。 模块版本情况 WxJava 模块名: weixin-java-mp WxJava 版本号: 4.5.0 具体的包名:me.chanjar.weixin.mp.util.requestexecuter.material 详细描述 正常刷新Token的逻辑:只有抛出异常了,才会去刷新 AccessToken public
Open Graph Description: 第一次提Issue 暂时不会提PR 麻烦修复一下这个BUG 简要描述 请简单概括描述下你所遇到的问题。 模块版本情况 WxJava 模块名: weixin-java-mp WxJava 版本号: 4.5.0 具体的包名:me.chanjar.weixin.mp.util.requestexecuter.material 详细描述 正常刷新Token的逻辑:只有抛出异常了,才会去刷新 Acce...
X Description: 第一次提Issue 暂时不会提PR 麻烦修复一下这个BUG 简要描述 请简单概括描述下你所遇到的问题。 模块版本情况 WxJava 模块名: weixin-java-mp WxJava 版本号: 4.5.0 具体的包名:me.chanjar.weixin.mp.util.requestexecuter.material 详细描述 正常刷新Token的逻辑:只有抛出异常了,才会去刷新 Acce...
Opengraph URL: https://github.com/binarywang/WxJava/issues/3196
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"公众号开发永久下载图片和声音的接口 materialImageOrVoiceDownload 无法正常刷新 AccessToken","articleBody":"## 第一次提Issue 暂时不会提PR 麻烦修复一下这个BUG\r\n\r\n### 简要描述\r\n__请简单概括描述下你所遇到的问题。__\r\n\r\n### 模块版本情况\r\n* WxJava 模块名: weixin-java-mp\r\n* WxJava 版本号: 4.5.0\r\n具体的包名:me.chanjar.weixin.mp.util.requestexecuter.material\r\n\r\n### 详细描述\r\n正常刷新Token的逻辑:只有抛出异常了,才会去刷新 AccessToken \r\n\r\n```\r\n public \u003cT, E\u003e T execute(RequestExecutor\u003cT, E\u003e executor, String uri, E data) throws WxErrorException {\r\n int retryTimes = 0;\r\n do {\r\n try {\r\n return this.executeInternal(executor, uri, data, false);\r\n } catch (WxErrorException e) {\r\n WxError error = e.getError();\r\n // -1 系统繁忙, 1000ms后重试\r\n if (error.getErrorCode() == -1) {\r\n // 判断是否已经超了最大重试次数\r\n if (retryTimes + 1 \u003e this.maxRetryTimes) {\r\n log.warn(\"重试达到最大次数【{}】\", maxRetryTimes);\r\n //最后一次重试失败后,直接抛出异常,不再等待\r\n throw new WxRuntimeException(\"微信服务端异常,超出重试次数\");\r\n }\r\n\r\n int sleepMillis = this.retrySleepMillis * (1 \u003c\u003c retryTimes);\r\n try {\r\n log.warn(\"微信系统繁忙,{} ms 后重试(第{}次)\", sleepMillis, retryTimes + 1);\r\n Thread.sleep(sleepMillis);\r\n } catch (InterruptedException e1) {\r\n throw new WxRuntimeException(e1);\r\n }\r\n } else {\r\n throw e;\r\n }\r\n }\r\n } while (retryTimes++ \u003c this.maxRetryTimes);\r\n\r\n log.warn(\"重试达到最大次数【{}】\", this.maxRetryTimes);\r\n throw new WxRuntimeException(\"微信服务端异常,超出重试次数\");\r\n }\r\n```\r\n这三个是下载永久 声音和图片的实现类\r\n```\r\n public static RequestExecutor\u003cInputStream, String\u003e create(RequestHttp requestHttp, File tmpDirFile) {\r\n switch (requestHttp.getRequestType()) {\r\n case APACHE_HTTP:\r\n return new MaterialVoiceAndImageDownloadApacheHttpRequestExecutor(requestHttp, tmpDirFile);\r\n case JODD_HTTP:\r\n return new MaterialVoiceAndImageDownloadJoddHttpRequestExecutor(requestHttp, tmpDirFile);\r\n case OK_HTTP:\r\n return new MaterialVoiceAndImageDownloadOkhttpRequestExecutor(requestHttp, tmpDirFile);\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n```\r\n问题发生在 获取微信IO流的时候,没有正确判断ContentType 导致没有及时报错导致的:\r\nMaterialVoiceAndImageDownloadOkhttpRequestExecutor\r\n```\r\n @Override\r\n public InputStream execute(String uri, String materialId, WxType wxType) throws WxErrorException, IOException {\r\n logger.debug(\"MaterialVoiceAndImageDownloadOkhttpRequestExecutor is running\");\r\n OkHttpClient client = requestHttp.getRequestHttpClient();\r\n\r\n RequestBody requestBody = RequestBody.create(MediaType.parse(\"application/json\"),\r\n WxGsonBuilder.create().toJson(ImmutableMap.of(\"media_id\", materialId)));\r\n Request request = new Request.Builder().url(uri).get().post(requestBody).build();\r\n Response response = client.newCall(request).execute();\r\n String contentTypeHeader = response.header(\"Content-Type\");\r\n // 问题发生在这个判断,没有及时抛出 微信异常,导致的,因为微信返回的ContentType 是application/json; encoding=utf-8\r\n if (\"text/plain\".equals(contentTypeHeader)) {\r\n String responseContent = response.body().string();\r\n throw new WxErrorException(WxError.fromJson(responseContent, WxType.MP));\r\n }\r\n \r\n try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BufferedSink sink = Okio.buffer(Okio.sink(outputStream))) {\r\n sink.writeAll(response.body().source());\r\n return new ByteArrayInputStream(outputStream.toByteArray());\r\n }\r\n }\r\n```\r\n代码修复 只需要增加 这个application/json判断即可 \r\n\r\n\r\n\r\n\r\n### ApiPost 返回\r\n\r\n\r\n\r\n\r\n\r\n \r\n","author":{"url":"https://github.com/shenliuming","@type":"Person","name":"shenliuming"},"datePublished":"2023-12-26T12:19:44.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/3196/WxJava/issues/3196"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:eccf220b-d68e-b7e4-da41-901e5899f919 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | BAE8:107FBB:40AD796:5613F6F:6964AD4A |
| html-safe-nonce | c4d43d6e043558531a65d40b901aa890981a0123d4046575cf48ae3ec7741f7b |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCQUU4OjEwN0ZCQjo0MEFENzk2OjU2MTNGNkY6Njk2NEFENEEiLCJ2aXNpdG9yX2lkIjoiNjc1NTYwNDA3NjU0MDc2NzU2MiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 6b2f6a2cb9666284b500e9461a255e1d3a390509cd81cd6263686b52f8be46a9 |
| hovercard-subject-tag | issue:2056360766 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/binarywang/WxJava/3196/issue_layout |
| twitter:image | https://opengraph.githubassets.com/d6a0e7aec34c2da6d1726f4c9c08494252dbe4900d5f340b8cf99711a242d970/binarywang/WxJava/issues/3196 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/d6a0e7aec34c2da6d1726f4c9c08494252dbe4900d5f340b8cf99711a242d970/binarywang/WxJava/issues/3196 |
| og:image:alt | 第一次提Issue 暂时不会提PR 麻烦修复一下这个BUG 简要描述 请简单概括描述下你所遇到的问题。 模块版本情况 WxJava 模块名: weixin-java-mp WxJava 版本号: 4.5.0 具体的包名:me.chanjar.weixin.mp.util.requestexecuter.material 详细描述 正常刷新Token的逻辑:只有抛出异常了,才会去刷新 Acce... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | shenliuming |
| hostname | github.com |
| expected-hostname | github.com |
| None | 15579c46431b7fd25941c3b09010f74fd1890c7a35226839bbbf40ce70fb3057 |
| turbo-cache-control | no-preview |
| go-import | github.com/binarywang/WxJava git https://github.com/binarywang/WxJava.git |
| octolytics-dimension-user_id | 1343140 |
| octolytics-dimension-user_login | binarywang |
| octolytics-dimension-repository_id | 49122742 |
| octolytics-dimension-repository_nwo | binarywang/WxJava |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 49122742 |
| octolytics-dimension-repository_network_root_nwo | binarywang/WxJava |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 499abb347cb197601d399c346cfeb4b3fa135d5c |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width