解决了:查询接口需要编码过后的activeTicket。 这个ticket被框架解码了,所以原封传过去看起来前端传的编码过的,实际上调用接口传的未编码的。 所以在调用接口之前需要再做一次编码,将特殊符号转义。 CloseableHttpClient httpClient = WechatPayHttpClientBuilder.create().build(); CloseableHttpResponse response = httpClient.execute(new HttpGet("检查这里URL中activeTicket是否为encode后的")) 否则,不转义就出现上面说的请求无法发送 【Illegal character i ....】 而问题中说的转义了报【不是原ticket】是由于框架decode解码了,所以误以为是编码导致了报错,实际上是因为解码才导致了出错。 目前只有查询开卡信息接口是GET请求,并且activeTicket里面含有这类特殊符号。其它的code encryptCode 都没有特殊字符或不是rest风格的GET请求,不会存在该情况
微信支付-会员卡-开卡返回的active_ticket带有url特殊字符,导致查询开卡信息失败用户通过开卡组件开卡后返回的active_ticket值含有+ / 等url特殊符号,用该值作为GET接口查询参数时,查询开卡信息接口调用报错。 经验证,当active_ticket不含特殊符号时,可以正常查询,但是开卡组件接口大概率会返回带有特殊符号的ticket 如果将url特殊字符进行转义编码,接口又会报:参数需要为原始格式。 不转义报::Illegal character in path at index 161: https://api.mch.weixin.qq.com/v3/marketing/membercard-open/activate-informations/xxxxxxxxxxxxxxJW0USndrqTH4mlt4EHHMkAzPLzw5qlPTvfzbzOGDZNYTjXyzRA8/CaDCSb 0Y19bsnlTl OWUKruVwFsMY uI= 转义报:解密失败,请确认入参正确性,入参要求是从微信接收的原始格式 开卡组件文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter4_6.shtml 查询开卡用户信息文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/membercard_open/chapter4_5.shtml 详细描述:用户通过开卡组件开卡后返回的active_ticket值含有+ / 等url特殊符号,该符号为url保留符号,用该值作为GET接口查询参数时,查询开卡信息接口调用报错 [图片] 报错截图 [图片] 6)其它信息: OS : Windows 10 教育版 ; 版本号:20H2; 内部版本号:19042.1237 Java : jdk1.8.0_191 maven :apache-maven-3.8.2 tomcat : apache-tomcat-8.5.70-x64 微信支付maven依赖: <dependency> <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-apache-httpclient</artifactId> <version>0.2.2</version> </dependency>
2021-09-24