Coder Social home page Coder Social logo

wechatpay-java's People

Contributors

a39676 avatar a8520238 avatar alanfc666 avatar bytechen avatar cadmusjiang avatar chaoyuxie avatar chengpanfei avatar colindhlin avatar hanxiating avatar lianup avatar sexybear avatar thinkerchi avatar v-jinyewang avatar xy-peng avatar yuxiangque avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wechatpay-java's Issues

Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: okhttp3.RequestBody.create(Ljava/lang/String;Lokhttp3/MediaType;)Lokhttp3/RequestBody;

错误描述

在maven中引入0.2.1版本后执行报错,
bug发生在com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter类里面,该类中执行createOkHttpRequestBody 方法时调用了 okhttp3.RequestBody.create(MediaType contentType, String content),但是参数写反了,导致报错

重现bug的步骤

private RequestBody createOkHttpRequestBody(
com.wechat.pay.java.core.http.RequestBody wechatPayRequestBody) {
return okhttp3.RequestBody.create(
((JsonRequestBody) wechatPayRequestBody).getBody(),
okhttp3.MediaType.parse(wechatPayRequestBody.getContentType()));
}

private RequestBody createOkHttpMultipartRequestBody(
com.wechat.pay.java.core.http.RequestBody wechatPayRequestBody) {
FileRequestBody fileRequestBody = (FileRequestBody) wechatPayRequestBody;
okhttp3.RequestBody okHttpFileBody =
okhttp3.RequestBody.create(
fileRequestBody.getFile(), okhttp3.MediaType.parse(fileRequestBody.getContentType()));
return new okhttp3.MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(META_NAME, fileRequestBody.getMeta())
.addFormDataPart(FILE_NAME, fileRequestBody.getFileName(), okHttpFileBody)
.build();
}

预期行为

Caused by: java.lang.NoSuchMethodError: okhttp3.RequestBody.create(Ljava/lang/String;Lokhttp3/MediaType;)Lokhttp3/RequestBody;
at com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter.createOkHttpRequestBody(OkHttpClientAdapter.java:84) ~[wechatpay-java-core-0.2.1.jar:0.2.1]
at com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter.buildOkHttpRequestBody(OkHttpClientAdapter.java:70) ~[wechatpay-java-core-0.2.1.jar:0.2.1]
at com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter.buildOkHttpRequest(OkHttpClientAdapter.java:59) ~[wechatpay-java-core-0.2.1.jar:0.2.1]
at com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter.innerExecute(OkHttpClientAdapter.java:46) ~[wechatpay-java-core-0.2.1.jar:0.2.1]
at com.wechat.pay.java.core.http.AbstractHttpClient.execute(AbstractHttpClient.java:42) ~[wechatpay-java-core-0.2.1.jar:0.2.1]
at com.wechat.pay.java.service.payments.nativepay.NativePayService.prepay(NativePayService.java:162) ~[wechatpay-java-0.2.1.jar:0.2.1]

导致错误的代码片段

No response

操作系统

Windows

Java 版本

java 8

wechatpay-java 版本

0.2.1

其他信息

No response

验签失败

错误描述

Validate response failed,the WechatPay signature is incorrect.
↵Request-ID[08A8AAAB9A0610D10718E8C5C05520A5B00D2880EE03-0] responseHeader[Keep-Alive=timeout=8,Wechatpay-Timestamp=1665848617,Server=nginx,X-Content-Type-Options=nosniff,Connection=keep-alive,Date=Sat, 15 Oct 2022 15:43:37 GMT,Wechatpay-Signature-Type=WECHATPAY2-SHA256-RSA2048,Wechatpay-Serial=6A79D4EC075AD126ED5D20E925507117F5F0C8FA,Wechatpay-Nonce=0a5ccb1cfb2add2f751351f363c1ead1,Wechatpay-Signature=o+YfoCHERSItpuezH4Lgo9QotjIW/9mGoh0KSkDvPHQtAsnE8NGysDJDB4oR4LZeMTozCjpkBhvtuxkdLXghKwH5G0/V6PrqvPBtPopNpoNVlU1dDgMXWaDNng0gLqgxdEFVT4N7fWOy/NfyKDn2IFQdAIzlGdrs/xre2y5oVkUrwu54SSHUWwc0srDEGRQZA7eZS5sitJLCYozjt6UiGrbcak39iqVAP5xKojqjY1BCIqKavgNKg1JRB765IGcxQlae5nwSyVPOHBUUkbwWY+DLgd6VHkT+Crc0JimCX1B8MjWfwa3amC0lW/hpTGf0+LCI9FB1qj8AJEd0ladFhA==,Cache-Control=no-cache, must-revalidate,Content-Length=52,Request-ID=08A8AAAB9A0610D10718E8C5C05520A5B00D2880EE03-0,Content-Language=zh-CN,Content-Type=application/json; charset=utf-8↵] responseBody[{"prepay_id":"wx15234337156985c7708abc64fd7e610000"}]"

重现bug的步骤

Validate response failed,the WechatPay signature is incorrect.
↵Request-ID[08A8AAAB9A0610D10718E8C5C05520A5B00D2880EE03-0] responseHeader[Keep-Alive=timeout=8,Wechatpay-Timestamp=1665848617,Server=nginx,X-Content-Type-Options=nosniff,Connection=keep-alive,Date=Sat, 15 Oct 2022 15:43:37 GMT,Wechatpay-Signature-Type=WECHATPAY2-SHA256-RSA2048,Wechatpay-Serial=6A79D4EC075AD126ED5D20E925507117F5F0C8FA,Wechatpay-Nonce=0a5ccb1cfb2add2f751351f363c1ead1,Wechatpay-Signature=o+YfoCHERSItpuezH4Lgo9QotjIW/9mGoh0KSkDvPHQtAsnE8NGysDJDB4oR4LZeMTozCjpkBhvtuxkdLXghKwH5G0/V6PrqvPBtPopNpoNVlU1dDgMXWaDNng0gLqgxdEFVT4N7fWOy/NfyKDn2IFQdAIzlGdrs/xre2y5oVkUrwu54SSHUWwc0srDEGRQZA7eZS5sitJLCYozjt6UiGrbcak39iqVAP5xKojqjY1BCIqKavgNKg1JRB765IGcxQlae5nwSyVPOHBUUkbwWY+DLgd6VHkT+Crc0JimCX1B8MjWfwa3amC0lW/hpTGf0+LCI9FB1qj8AJEd0ladFhA==,Cache-Control=no-cache, must-revalidate,Content-Length=52,Request-ID=08A8AAAB9A0610D10718E8C5C05520A5B00D2880EE03-0,Content-Language=zh-CN,Content-Type=application/json; charset=utf-8↵] responseBody[{"prepay_id":"wx15234337156985c7708abc64fd7e610000"}]"

预期行为

验签通过

导致错误的代码片段

No response

操作系统

win10

Java 版本

java8

wechatpay-java 版本

0.2.0

其他信息

Validate response failed,the WechatPay signature is incorrect.
↵Request-ID[08A8AAAB9A0610D10718E8C5C05520A5B00D2880EE03-0] responseHeader[Keep-Alive=timeout=8,Wechatpay-Timestamp=1665848617,Server=nginx,X-Content-Type-Options=nosniff,Connection=keep-alive,Date=Sat, 15 Oct 2022 15:43:37 GMT,Wechatpay-Signature-Type=WECHATPAY2-SHA256-RSA2048,Wechatpay-Serial=6A79D4EC075AD126ED5D20E925507117F5F0C8FA,Wechatpay-Nonce=0a5ccb1cfb2add2f751351f363c1ead1,Wechatpay-Signature=o+YfoCHERSItpuezH4Lgo9QotjIW/9mGoh0KSkDvPHQtAsnE8NGysDJDB4oR4LZeMTozCjpkBhvtuxkdLXghKwH5G0/V6PrqvPBtPopNpoNVlU1dDgMXWaDNng0gLqgxdEFVT4N7fWOy/NfyKDn2IFQdAIzlGdrs/xre2y5oVkUrwu54SSHUWwc0srDEGRQZA7eZS5sitJLCYozjt6UiGrbcak39iqVAP5xKojqjY1BCIqKavgNKg1JRB765IGcxQlae5nwSyVPOHBUUkbwWY+DLgd6VHkT+Crc0JimCX1B8MjWfwa3amC0lW/hpTGf0+LCI9FB1qj8AJEd0ladFhA==,Cache-Control=no-cache, must-revalidate,Content-Length=52,Request-ID=08A8AAAB9A0610D10718E8C5C05520A5B00D2880EE03-0,Content-Language=zh-CN,Content-Type=application/json; charset=utf-8↵] responseBody[{"prepay_id":"wx15234337156985c7708abc64fd7e610000"}]"

V3版本的POST无参数请求会一直报错

错误描述

解约接口:/v3/offlinefacemch/organizations/{organization_id}/users/user-id/{user_id}/terminate-contract,文档要求不需要参数,参考文档,使用api中的httpClient请求是一直提示请求的参数错误,其他接口请求都正常,唯独这个无参的POST请求不同,接口参考地址:https://pay.weixin.qq.com/wiki/doc/wxfacepay/develop/k12-development-guidelines.html#_4-6-%E8%A7%A3%E9%99%A4%E5%88%B7%E8%84%B8%E7%94%A8%E6%88%B7%E7%AD%BE%E7%BA%A6%E5%85%B3%E7%B3%BB%E6%8E%A5%E5%8F%A3

重现bug的步骤

image
这个是代码,参数为空,一直提示参数有误

预期行为

正常执行接口请求

导致错误的代码片段

No response

操作系统

windows

Java 版本

java11

wechatpay-java 版本

0.2.0

其他信息

No response

wechatpay-java 调用nativePay支付接口报错

错误描述

我用的版本是:
image
调用的接口是:
image
我跟进去看了是:
image
image
看起来参数的顺序都不对。
请问,我的是不是不是最新版本的wechatpay-java呀?
image
现在该怎么办呢?

重现bug的步骤

如上

预期行为

如上

导致错误的代码片段

No response

操作系统

windows

Java 版本

java 17

wechatpay-java 版本

0.2.0

其他信息

如上

微信小程序支付,回调通知,官方提供api和示例有出入

错误描述

微信小程序支付,回调通知,官方提供api和示例有出入

重现bug的步骤

  1. 这是你们的示例
    微信图片_20221228170016
  2. 这是代码中要传的参数
    微信图片_20221228170146

这两个根本对不上呀,是两个类,你看看我需要在NotificationParser的构造方法中传什么参数?

预期行为

看看我需要在NotificationParser的构造方法中传什么参数?

导致错误的代码片段

No response

操作系统

win

Java 版本

8

wechatpay-java 版本

0.2.3

其他信息

No response

createOkHttpRequestBody 异常

错误描述

java.lang.NoSuchMethodError: okhttp3.RequestBody.create(Ljava/lang/String;Lokhttp3/MediaType;)Lokhttp3/RequestBody;

重现bug的步骤

createOkHttpRequestBody 异常

预期行为

createOkHttpRequestBody 异常

导致错误的代码片段

No response

操作系统

macos

Java 版本

java 8

wechatpay-java 版本

0.2.1

其他信息

No response

使用SDK,Exception in thread "main" com.wechat.pay.java.core.exception.ValidationException: Validate response failed,the WechatPay signature is incorrect.

错误描述

Exception in thread "main" com.wechat.pay.java.core.exception.ValidationException: Validate response failed,the WechatPay signature is incorrect.

重现bug的步骤

1、使用Demo中的例子;
2、配置好所有参数后发起:下载微信支付平台证书
3、返回签名失败错误;

预期行为

SDK的签名不正确

导致错误的代码片段

No response

操作系统

windows

Java 版本

Java 17

wechatpay-java 版本

v0.2.0

其他信息

No response

微信文档稀烂

您的功能请求与问题有关吗? 请描述您遇到的问题

为什么每次需要的证书在哪里获取总是不说明?以前如此,现在还是如此

描述您想要的解决方案

No response

您还有其他的方案吗?

No response

其他信息

No response

商家转账到零钱,如果超出免密额度,出资商户在商家助手进行付款确认后,有机制通知到商家后端吗?

您的功能请求与问题有关吗? 请描述您遇到的问题

在调用【通过商家批次单号查询批次单】接口时发现返回值里的batch_status字段有一个【WAIT_PAY】值,说明是“需要付款出资商户在商家助手小程序或服务商助手小程序进行付款确认”,但是这个确认的动作是线下的,一般也是老板或者领导进行确认,作为技术人员无法确定这个时间,就无法再在某个时间点再次触发查询批次单状态了。

描述您想要的解决方案

能否在出资商户进行付款确认后,主动通知一下商户后端,这样就可以再次查询批次单状态进而进行后续的业务逻辑处理了。

您还有其他的方案吗?

No response

其他信息

No response

Validate response failed,the WechatPay signature is incorrect.

错误描述

Exception in thread "main" com.wechat.pay.java.core.exception.ValidationException: Validate response failed,the WechatPay signature is incorrect.

重现bug的步骤

Exception in thread "main" com.wechat.pay.java.core.exception.ValidationException: Validate response failed,the WechatPay signature is incorrect.

预期行为

Exception in thread "main" com.wechat.pay.java.core.exception.ValidationException: Validate response failed,the WechatPay signature is incorrect.

导致错误的代码片段

No response

操作系统

macos

Java 版本

8

wechatpay-java 版本

0.2.1

其他信息

No response

能完善下APP下单之类的示例吗?

比如AppServiceExample
能完善下吗?

 // 初始化商户配置
 RSAConfig config =
        new RSAConfig.Builder()
            .merchantId(merchantId)
            // 使用 com.wechat.pay.java.core.util
            // 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
            .privateKeyFromPath(privateKeyPath)
            .merchantSerialNumber(merchantSerialNumber)
            .wechatPayCertificatesFromPath(wechatPayCertificatePath)
            .build();

// 初始化服务
service = new AppService.Builder().config(config).build();

// ... 调用接口
Amount amount = new Amount();
            amount.setTotal(1);
            amount.setCurrency("CNY");
            PrepayRequest request = new PrepayRequest();
            request.setAppid(WEBCHAT_PAY_APP_ID);
            request.setMchid("1630408924");
            request.setDescription("测试商品标题");
            request.setNotifyUrl(BASE_URL);
            request.setOutTradeNo("1101000000140429eb40476f8896f4c9");
            request.setAmount(amount);

service.prepay(request);

APP支付下单之后,我想返回获取返回的prepay_id该怎么办?没反应。
还有不用验签吗?

No response

商户号初始化配置重复,下载任务报错。

错误描述

image
image
商户号初始化配置重复,下载任务报错。

重现bug的步骤

启动项目测试初始化配置后,重复下载任务报错问题怎么解决,还没有存到redis中。现在生成不了配置了。

预期行为

正常初始化商户号配置

导致错误的代码片段

Config config =
        new RSAAutoCertificateConfig.Builder()
            .merchantId(merchantId)
            .privateKeyFromPath(privateKeyPath)
            .merchantSerialNumber(merchantSerialNumber)
            .apiV3Key(apiV3key)
            .build();

操作系统

window

Java 版本

java 8

wechatpay-java 版本

v0.2.3

其他信息

No response

支付结果通知验签失败

错误描述

以下为参考示例验证签名的代码
源码

重现bug的步骤

下面是报错信息:
2022-12-11 15:28:51.370 DEBUG 742001 --- [nio-8080-exec-6] o.s.web.servlet.DispatcherServlet : Failed to complete request: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $
2022-12-11 15:28:51.372 ERROR 742001 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/payment] threw exception [Request processing failed; nested exception is com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $] with root cause

java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $
at com.google.gson.stream.JsonReader.nextString(JsonReader.java:825) ~[gson-2.9.0.jar!/:na]
at com.google.gson.internal.bind.TypeAdapters$15.read(TypeAdapters.java:393) ~[gson-2.9.0.jar!/:na]
at com.google.gson.internal.bind.TypeAdapters$15.read(TypeAdapters.java:381) ~[gson-2.9.0.jar!/:na]
at com.google.gson.Gson.fromJson(Gson.java:991) ~[gson-2.9.0.jar!/:na]
at com.google.gson.Gson.fromJson(Gson.java:956) ~[gson-2.9.0.jar!/:na]
at com.google.gson.Gson.fromJson(Gson.java:905) ~[gson-2.9.0.jar!/:na]
at com.google.gson.Gson.fromJson(Gson.java:876) ~[gson-2.9.0.jar!/:na]
at com.wechat.pay.java.core.notification.NotificationParser.getDecryptObject(NotificationParser.java:111) ~[wechatpay-java-core-0.2.1.jar!/:0.2.1]
at com.wechat.pay.java.core.notification.NotificationParser.parse(NotificationParser.java:50) ~[wechatpay-java-core-0.2.1.jar!/:0.2.1]
at cn.moshaw.payment.weichat.service.WechatpayService.virifyCallBackSignature(WechatpayService.java:341) ~[classes!/:0.0.1-SNAPSHOT]
at cn.moshaw.payment.weichat.controller.WxCallbackController.callback(WxCallbackController.java:62) ~[classes!/:0.0.1-SNAPSHOT]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:578) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.22.jar!/:5.3.22]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1070) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.22.jar!/:5.3.22]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.22.jar!/:5.3.22]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.22.jar!/:5.3.22]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.22.jar!/:5.3.22]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.22.jar!/:5.3.22]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.22.jar!/:5.3.22]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.22.jar!/:5.3.22]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.65.jar!/:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.65.jar!/:na]
at java.base/java.lang.Thread.run(Thread.java:1589) ~[na:na]

预期行为

不知代码哪里有问题,该如何调整?

导致错误的代码片段

No response

操作系统

macOS

Java 版本

Java 17

wechatpay-java 版本

0.2.1

其他信息

No response

微信收款商业版的订单如何查询

您的功能请求与问题有关吗? 请描述您遇到的问题

如图所示,这种订单无法查询。

image

使用的是NativePayService

/**
 * 微信支付订单号查询订单
 */
public static Transaction queryOrderById() {

    QueryOrderByIdRequest request = new QueryOrderByIdRequest();
    // 调用request.setXxx(val)设置所需参数,具体参数可见Request定义
    // 调用接口
    request.setSpMchid("");
    request.setSubMchid("");
    request.setTransactionId("");
    return service.queryOrderById(request);
}

请求返回

{"code":"PARAM_ERROR","message":"普通商户不允许传sub_mch_id"}

描述您想要的解决方案

No response

您还有其他的方案吗?

No response

其他信息

No response

使用DefaultHttpClientBuilder构造出来的HttpClient需要关闭吗?

您的功能请求与问题有关吗? 请描述您遇到的问题

请问使用以下代码获取的HttpClient实例需要触发关闭吗?我看这个HttpClient接口里没有close方法呢?

Config config = new RSAConfig.Builder()
.merchantId(merchantId)
.privateKeyFromPath(privateKeyPath)
.merchantSerialNumber(merchantSerialNumber)
.wechatPayCertificatesFromPath(wechatPayCertificatePath)
.build();

HttpClient httpClient = new DefaultHttpClientBuilder()
.readTimeoutMs(3000)
.writeTimeoutMs(3000)
.connectTimeoutMs(3000)
.credential(requireNonNull(config.createCredential()))
.validator(requireNonNull(config.createValidator()))
.build();

maven依赖如下:
image

描述您想要的解决方案

您还有其他的方案吗?

其他信息

自动下载的证书使用场景?

您的功能请求与问题有关吗? 请描述您遇到的问题

自动下载的证书干嘛用的?能举个例子吗?是否还需要定期调用自动下载续期?
感觉微信支付真的是乱七八糟,这些写sdk都不知道自己有没有从头到尾接过。学习一下支付宝?

描述您想要的解决方案

No response

您还有其他的方案吗?

No response

其他信息

No response

请问,微信支付的v3-javasdk部分是实习生在维护么?

错误描述

基本没有体现什么面向对象的**,所有的request,rep连接口都没有
其次有些用法非常无语,比如notify的时候,要传requestbody进sdk解密,但是回调类型又写在解密前的字符串里面,很多吧,感觉怎么用怎么别扭,我一下午。
要不然发外包把这个sdk整一下吧,不然咱这小公司什么时候上v3啊。

重现bug的步骤

1

预期行为

1

导致错误的代码片段

@PostMapping("/notify/{tenantCode}")
    public String wxPayNotify(@PathVariable String tenantCode, @RequestBody String body, HttpServletRequest request){
        BaseContextHandler.setTenant(tenantCode);
        Notification notification = JSONUtil.toBean(body,Notification.class);

        RequestParam requestParam = new RequestParam
                .Builder()
                .serialNumber(request.getHeader("Wechatpay-Serial"))
                .nonce(request.getHeader("Wechatpay-Nonce"))
                .signature(request.getHeader("Wechatpay-Signatur"))
                .signType(request.getHeader("Wechatpay-Signature-Type"))
                .body(body)
                .build();

        // 根据type做出多种结果处理
        return payService.parseOrderNotifyResultV3(requestParam,notification.getResource().getOriginalType());
    }


### 操作系统

macos

### Java 版本

1.8

### wechatpay-java 版本

21

### 其他信息

1

sdk中的接口与官方文档的接口不符

您的功能请求与问题有关吗? 请描述您遇到的问题

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 这个是jsapi的接口文档
这个是sdk 中的https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi 接口,这个在官方文档中都没搜到这个接口

com.github.wechatpay-apiv3
wechatpay-java
0.2.2

描述您想要的解决方案

与官方的接口文档对齐

您还有其他的方案吗?

No response

其他信息

No response

Validate response failed,the WechatPay signature is incorrect.

错误描述

我使用 JsapiServiceExtensionExample 中的代码,提示:Validate response failed,the WechatPay signature is incorrect.
代码中有句注释:
// 使用 com.wechat.pay.java.core.util 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
.privateKeyFromPath()
但是:privateKeyFromPath() 方法的参数是 String,私钥的路径。而 PemUtil 工具类的方法,是加载私钥。这是什么意思?重复了?

重现bug的步骤

1.直接用你们的代码就能复现

预期行为

至少用你们的示例代码能下单吧

导致错误的代码片段

// 初始化商户配置
    RSAConfig config =
        new RSAConfig.Builder()
            .merchantId(merchantId)
            // 使用 com.wechat.pay.java.core.util 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
            .privateKeyFromPath(privateKeyPath)
            .merchantSerialNumber(merchantSerialNumber)
            .wechatPayCertificatesFromPath(wechatPayCertificatePath)
            .build();

操作系统

macOS

Java 版本

java1.8

wechatpay-java 版本

0.2.2

其他信息

用SDK,不是不用自己签名吗?

jsapi service提供新的prepay函数,支持生成getBrandWCPayRequest参数

您的功能请求与问题有关吗? 请描述您遇到的问题

既然getBrandWCPayRequest的参数需要商户私钥签名,为什么不直接返回签名后的参数。

仅仅是为了与前端隔离吗?

描述您想要的解决方案

jsapi service提供新的prepay函数,支持生成getBrandWCPayRequest参数。

您还有其他的方案吗?

No response

其他信息

No response

下载证书能默认把验签去掉吗?或者给个开关,恶心的一批

您的功能请求与问题有关吗? 请描述您遇到的问题

你们要是真的为安全着想,请完善sdk,让上层应用透明使用,封装都不知道吗?搞的什么玩意。
就算我第一次把证书通过jar下载下来了,配置在了配置文件(本地或者etcd)里,我更新证书的时候还要去改这他们?如果不改,一旦失效,新的证书就下载不下来了。而且你们提供的默认下载在内存里,重启后不还是老证书在验签,总有一天他们会不能用,不是嘛。

描述您想要的解决方案

证书完全内存化,对上层业务透明,第一次下载证书无需验证。
就像https协议一样,请sdk自行实现续约,不要垃圾搞一半,拿出点水准来?

您还有其他的方案吗?

No response

其他信息

No response

预支付自动更新平台证书 解密失败

错误描述

预支付自动更新平台证书 解密失败
微信图片_20221227123210

重现bug的步骤

预支付自动更新平台证书 解密失败

预期行为

预支付自动更新平台证书 解密失败

导致错误的代码片段

No response

操作系统

windows

Java 版本

Java1.8.0_221

wechatpay-java 版本

master分支

其他信息

No response

修改model中的toString方式

您的功能请求与问题有关吗? 请描述您遇到的问题

现在model中的toString方法为

  @Override
  public String toString() {
    return GsonUtil.getGson().toJson(this);
  }

使用了SDK中的GsonUtil中得到的gson,会忽略某些字段,无法打印model中的所有字段。

描述您想要的解决方案

修改成能打印出所有的字段。

您还有其他的方案吗?

No response

其他信息

No response

我拉了最新的版本缺少类 RSAAutoCertificateConfig

错误描述

我拉了最新的版本缺少类 RSAAutoCertificateConfig

重现bug的步骤

image
Uploading image.png…

预期行为

直接maven下载就行

导致错误的代码片段

No response

操作系统

macos

Java 版本

1.8

wechatpay-java 版本

0.2.2

其他信息

No response

jsapipay 前端小程序需要的签名如何生成

您的功能请求与问题有关吗? 请描述您遇到的问题

jsapipay 前端小程序需要的签名如何生成

描述您想要的解决方案

No response

您还有其他的方案吗?

No response

其他信息

No response

java.lang.IllegalArgumentException: java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Empty input

错误描述

java.lang.IllegalArgumentException: java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Empty input
at com.wechat.pay.java.core.util.PemUtil.loadX509FromStream(PemUtil.java:114)
at com.wechat.pay.java.core.util.PemUtil.loadX509FromString(PemUtil.java:172)
at com.wechat.pay.java.core.notification.RSANotificationConfig$Builder.certificates(RSANotificationConfig.java:64)
at com.mineway.crm.service.pay.WxPayService.getDecryptObject(WxPayService.java:139)
at com.mineway.crm.service.impl.OrderServiceImpl.payNotify(OrderServiceImpl.java:276)

重现bug的步骤

java.lang.IllegalArgumentException: java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Empty input
at com.wechat.pay.java.core.util.PemUtil.loadX509FromStream(PemUtil.java:114)
at com.wechat.pay.java.core.util.PemUtil.loadX509FromString(PemUtil.java:172)
at com.wechat.pay.java.core.notification.RSANotificationConfig$Builder.certificates(RSANotificationConfig.java:64)
at com.mineway.crm.service.pay.WxPayService.getDecryptObject(WxPayService.java:139)
at com.mineway.crm.service.impl.OrderServiceImpl.payNotify(OrderServiceImpl.java:276)

预期行为

java.lang.IllegalArgumentException: java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Empty input
at com.wechat.pay.java.core.util.PemUtil.loadX509FromStream(PemUtil.java:114)
at com.wechat.pay.java.core.util.PemUtil.loadX509FromString(PemUtil.java:172)
at com.wechat.pay.java.core.notification.RSANotificationConfig$Builder.certificates(RSANotificationConfig.java:64)
at com.mineway.crm.service.pay.WxPayService.getDecryptObject(WxPayService.java:139)
at com.mineway.crm.service.impl.OrderServiceImpl.payNotify(OrderServiceImpl.java:276)

导致错误的代码片段

No response

操作系统

macOS

Java 版本

Java8

wechatpay-java 版本

0.2.2

其他信息

No response

金额不支持小数点吗

您的功能请求与问题有关吗? 请描述您遇到的问题

Amount amount = new Amount();
amount.setTotal(); // 这里接收的是Integer

描述您想要的解决方案

如果我想设置带小数点的金额怎么办?

您还有其他的方案吗?

No response

其他信息

No response

Canceled

您的功能请求与问题有关吗? 请描述您遇到的问题

No response

描述您想要的解决方案

No response

您还有其他的方案吗?

No response

其他信息

No response

validateResponse 异常

错误描述

Validate response failed,the WechatPay signature is incorrect.

重现bug的步骤

Exception in thread "main" com.wechat.pay.java.core.exception.ValidationException: Validate response failed,the WechatPay signature is incorrect.
at com.wechat.pay.java.core.http.AbstractHttpClient.validateResponse(AbstractHttpClient.java:70)
at com.wechat.pay.java.core.http.AbstractHttpClient.execute(AbstractHttpClient.java:43)
at com.wechat.pay.java.service.payments.jsapi.JsapiService.prepay(JsapiService.java:162)
at com.mineway.crm.zx.pay.WxPay.main(WxPay.java:50)
Disconnected from the target VM, address: '127.0.0.1:62376', transport: 'socket'

预期行为

Exception in thread "main" com.wechat.pay.java.core.exception.ValidationException: Validate response failed,the WechatPay signature is incorrect.
at com.wechat.pay.java.core.http.AbstractHttpClient.validateResponse(AbstractHttpClient.java:70)
at com.wechat.pay.java.core.http.AbstractHttpClient.execute(AbstractHttpClient.java:43)
at com.wechat.pay.java.service.payments.jsapi.JsapiService.prepay(JsapiService.java:162)
at com.mineway.crm.zx.pay.WxPay.main(WxPay.java:50)
Disconnected from the target VM, address: '127.0.0.1:62376', transport: 'socket'

导致错误的代码片段

No response

操作系统

macos

Java 版本

8

wechatpay-java 版本

0.2.1

其他信息

No response

能否对wechatpay-apache-httpclient进行兼容

您的功能请求与问题有关吗? 请描述您遇到的问题

我们目前使用了wechatpay-apache-httpclient并实现了部分接口,现在想用wechatpay-java去实现图片视频上传。但是发现并不兼容,需要重复初始化配置。

描述您想要的解决方案

能否对wechatpay-apache-httpclient进行兼容,或者反过来也行。如果不能兼容,也能否给出一个能平滑迁移的代码实例,方便使用方去调用。

您还有其他的方案吗?

No response

其他信息

No response

自动更新平台证书

您的功能请求与问题有关吗? 请描述您遇到的问题

提供自动更新平台证书能力,使用者不用传入平台证书。

描述您想要的解决方案

修改点

  1. 增加 autoUpdateCertificateProvider,实现 CertificateProvider。
  2. 修改 RSAConfig 的 Builder,如果不传 wechatPayCertificate,RSAConfig中的构造器传入 autoUpdateCertificateProvider。

实现细节

  1. 封装安全单例线程池 SafeSingleScheduleExecutor。
  2. autoUpdateCertificateProvider 中使用单例线程池 SafeSingleScheduleExecutor ,用于定时下载更新证书。
  3. 使用原生的 okhttp 请求来下载证书。

您还有其他的方案吗?

No response

其他信息

No response

NotificationParser类第92行,异常提示值不匹配问题

错误描述

image

NotificationParser类第92行,异常提示值不匹配问题

重现bug的步骤

控制台排查问题不友好

预期行为

友好查看异常信息

导致错误的代码片段

![image](https://user-images.githubusercontent.com/33826351/202381290-a683ed10-01e5-4acd-9414-e1abad573338.png)

操作系统

windows

Java 版本

java8

wechatpay-java 版本

0.2.1

其他信息

No response

CertificateServiceExample跑不通

错误描述

获取平台证书列表接口不需要验签

没有跳过验签的配置

重现bug的步骤

  • com.wechat.pay.java.core.RSAConfig 要求配置公钥
  • com.wechat.pay.java.core.http.AbstractHttpClient 默认验签

预期行为

期望支持跳过验签

导致错误的代码片段

No response

操作系统

macOS

Java 版本

Java 18

wechatpay-java 版本

main 303a8ad

其他信息

No response

java.lang.NoSuchMethodError: 'okhttp3.RequestBody

错误描述

java.lang.NoSuchMethodError: 'okhttp3.RequestBody okhttp3.RequestBody.create(java.lang.String, okhttp3.MediaType)'
at com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter.createOkHttpRequestBody(OkHttpClientAdapter.java:84) ~[wechatpay-java-core-0.2.0.jar:0.2.0]
at com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter.buildOkHttpRequestBody(OkHttpClientAdapter.java:70) ~[wechatpay-java-core-0.2.0.jar:0.2.0]
at com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter.buildOkHttpRequest(OkHttpClientAdapter.java:59) ~[wechatpay-java-core-0.2.0.jar:0.2.0]
at com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter.innerExecute(OkHttpClientAdapter.java:46) ~[wechatpay-java-core-0.2.0.jar:0.2.0]
at com.wechat.pay.java.core.http.AbstractHttpClient.execute(AbstractHttpClient.java:42) ~[wechatpay-java-core-0.2.0.jar:0.2.0]
at com.wechat.pay.java.service.payments.jsapi.JsapiService.prepay(JsapiService.java:162) ~[wechatpay-java-0.2.0.jar:0.2.0]

重现bug的步骤

根据示例代码调用预下单接口

预期行为

完成下单

导致错误的代码片段

No response

操作系统

macOS

Java 版本

Java 17

wechatpay-java 版本

0.2.1

其他信息

No response

关于SDK优化的几个建议

wecom-temp-119762-4ebfcce96d5ddd08d5ce4328a9579411

1. 对上传的文件大小是否有限制?如果没有,建议采用缓冲 buffer 流式写到 request body 里,不要直接设置整个 file 的字节数组进去,否则上传大文件可能导致服务端就 OOM。


wecom-temp-129110-6f3d74476166cbf417b1183285a8a581
2. GsonUtil 这里的 gsonBuilder 是单例,但是 Gson 对象不是单例,每次都会创建一个新的 Gson 对象。


wecom-temp-324856-cdb1d7f9d9fa2677eb99c4b27b059f58
3. out_trade_no 需要做下 url encode,这里要看下 httpclient 有没有帮你做了这个操作。商户支付的订单号由商户自定义生成,仅支持使用字母、数字、中划线-、下划线_、竖线|、星号这些英文半角字符的组合,abcd1234-_| encode 的结果是 abcd1234-_%7C%2A。


wecom-temp-219046-c7e91a5b9614b7406622da4221105a3b
4. ACCEPT 的 header 应该是指定 json,这里只会返回 json,为什么设置“/”?


wecom-temp-287563-6d1096a481293db5eb447c9eb3e5d46b
5. 这里是不支持泛型类的,这里如果有类似 class PrepayResponse 这种类的时候,反序列化是会失败的。


wecom-temp-239562-15c413537d124afc02ef7120af62ea5c
6. 这类接口你给用户的感觉就是不会抛任何异常,但其实你的这些代码有抛 RuntimeException 的风险,你需要把这个暴露出来,告诉用户这个接口会抛异常,让用户有感知,以便他自己决策是否需要处理。

baseUrl 支持

您的功能请求与问题有关吗? 请描述您遇到的问题

除了 api.mch.weixin.qq.com 之外,还有 apihk 的域名,应允许开发者指定。

描述您想要的解决方案

Config 中增加 baseUrl 的配置项,在 service 中使用 baseUrl + Path 的方式访问 API。

您还有其他的方案吗?

No response

其他信息

No response

wechatpay-apiv3:wechatpay-java-core:0.2.4 这个包还没有上传吗?

错误描述

wechatpay-apiv3:wechatpay-java-core:0.2.4 这个包还没有上传吗?
image

重现bug的步骤

wechatpay-apiv3:wechatpay-java-core:0.2.4 这个包还没有上传吗?
image

预期行为

希望可以顺利拉取最新的jar

导致错误的代码片段

No response

操作系统

win

Java 版本

8

wechatpay-java 版本

0.2.4

其他信息

No response

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.