wechatpay-apiv3 / wechatpay-java Goto Github PK
View Code? Open in Web Editor NEW微信支付 APIv3 的官方 Java Library
License: Apache License 2.0
微信支付 APIv3 的官方 Java Library
License: Apache License 2.0
在maven中引入0.2.1版本后执行报错,
bug发生在com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter类里面,该类中执行createOkHttpRequestBody 方法时调用了 okhttp3.RequestBody.create(MediaType contentType, String content),但是参数写反了,导致报错
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 8
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"}]"
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
java8
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/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
正常执行接口请求
No response
windows
java11
0.2.0
No response
请问APIV3是否支持拆单功能?以及退款的时候是否可以拆单退款?
希望可以支持拆单,以及拆单的退款
No response
No response
java.lang.NoSuchMethodError: okhttp3.RequestBody.create(Ljava/lang/String;Lokhttp3/MediaType;)Lokhttp3/RequestBody;
createOkHttpRequestBody 异常
createOkHttpRequestBody 异常
No response
macos
java 8
0.2.1
No response
Exception in thread "main" com.wechat.pay.java.core.exception.ValidationException: Validate response failed,the WechatPay signature is incorrect.
1、使用Demo中的例子;
2、配置好所有参数后发起:下载微信支付平台证书
3、返回签名失败错误;
SDK的签名不正确
No response
windows
Java 17
v0.2.0
No response
为什么每次需要的证书在哪里获取总是不说明?以前如此,现在还是如此
No response
No response
No response
在调用【通过商家批次单号查询批次单】接口时发现返回值里的batch_status字段有一个【WAIT_PAY】值,说明是“需要付款出资商户在商家助手小程序或服务商助手小程序进行付款确认”,但是这个确认的动作是线下的,一般也是老板或者领导进行确认,作为技术人员无法确定这个时间,就无法再在某个时间点再次触发查询批次单状态了。
能否在出资商户进行付款确认后,主动通知一下商户后端,这样就可以再次查询批次单状态进而进行后续的业务逻辑处理了。
No response
No response
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.
Exception in thread "main" com.wechat.pay.java.core.exception.ValidationException: Validate response failed,the WechatPay signature is incorrect.
No response
macos
8
0.2.1
No response
比如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
APP下单获取PrepayId后,有接口能调起微信支付吗?
还是说要用OpenSDK调起支付?
启动项目测试初始化配置后,重复下载任务报错问题怎么解决,还没有存到redis中。现在生成不了配置了。
正常初始化商户号配置
Config config =
new RSAAutoCertificateConfig.Builder()
.merchantId(merchantId)
.privateKeyFromPath(privateKeyPath)
.merchantSerialNumber(merchantSerialNumber)
.apiV3Key(apiV3key)
.build();
window
java 8
v0.2.3
No response
下面是报错信息:
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 17
0.2.1
No response
/**
* 微信支付订单号查询订单
*/
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
请问使用以下代码获取的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();
自动下载的证书干嘛用的?能举个例子吗?是否还需要定期调用自动下载续期?
感觉微信支付真的是乱七八糟,这些写sdk都不知道自己有没有从头到尾接过。学习一下支付宝?
No response
No response
No response
基本没有体现什么面向对象的**,所有的request,rep连接口都没有
其次有些用法非常无语,比如notify的时候,要传requestbody进sdk解密,但是回调类型又写在解密前的字符串里面,很多吧,感觉怎么用怎么别扭,我一下午。
要不然发外包把这个sdk整一下吧,不然咱这小公司什么时候上v3啊。
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
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
我使用 JsapiServiceExtensionExample 中的代码,提示:Validate response failed,the WechatPay signature is incorrect.
代码中有句注释:
// 使用 com.wechat.pay.java.core.util 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
.privateKeyFromPath()
但是:privateKeyFromPath() 方法的参数是 String,私钥的路径。而 PemUtil 工具类的方法,是加载私钥。这是什么意思?重复了?
1.直接用你们的代码就能复现
至少用你们的示例代码能下单吧
// 初始化商户配置
RSAConfig config =
new RSAConfig.Builder()
.merchantId(merchantId)
// 使用 com.wechat.pay.java.core.util 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
.privateKeyFromPath(privateKeyPath)
.merchantSerialNumber(merchantSerialNumber)
.wechatPayCertificatesFromPath(wechatPayCertificatePath)
.build();
macOS
java1.8
0.2.2
用SDK,不是不用自己签名吗?
既然getBrandWCPayRequest的参数需要商户私钥签名,为什么不直接返回签名后的参数。
仅仅是为了与前端隔离吗?
jsapi service提供新的prepay函数,支持生成getBrandWCPayRequest参数。
No response
No response
你们要是真的为安全着想,请完善sdk,让上层应用透明使用,封装都不知道吗?搞的什么玩意。
就算我第一次把证书通过jar下载下来了,配置在了配置文件(本地或者etcd)里,我更新证书的时候还要去改这他们?如果不改,一旦失效,新的证书就下载不下来了。而且你们提供的默认下载在内存里,重启后不还是老证书在验签,总有一天他们会不能用,不是嘛。
证书完全内存化,对上层业务透明,第一次下载证书无需验证。
就像https协议一样,请sdk自行实现续约,不要垃圾搞一半,拿出点水准来?
No response
No response
⛽️
现在model中的toString方法为
@Override
public String toString() {
return GsonUtil.getGson().toJson(this);
}
使用了SDK中的GsonUtil中得到的gson,会忽略某些字段,无法打印model中的所有字段。
修改成能打印出所有的字段。
No response
No response
jsapipay 前端小程序需要的签名如何生成
No response
No response
No response
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)
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
Java8
0.2.2
No response
Amount amount = new Amount();
amount.setTotal(); // 这里接收的是Integer
如果我想设置带小数点的金额怎么办?
No response
No response
No response
No response
No response
No response
这个java sdk 什么时候可以使用呢,发布版本
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.
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
8
0.2.1
No response
Originally posted by @xy-peng in #76 (comment)
No response
No response
No response
No response
我们目前使用了wechatpay-apache-httpclient并实现了部分接口,现在想用wechatpay-java去实现图片视频上传。但是发现并不兼容,需要重复初始化配置。
能否对wechatpay-apache-httpclient进行兼容,或者反过来也行。如果不能兼容,也能否给出一个能平滑迁移的代码实例,方便使用方去调用。
No response
No response
提供自动更新平台证书能力,使用者不用传入平台证书。
修改点
实现细节
No response
No response
没有跳过验签的配置
com.wechat.pay.java.core.RSAConfig
要求配置公钥com.wechat.pay.java.core.http.AbstractHttpClient
默认验签期望支持跳过验签
No response
macOS
Java 18
main 303a8ad
No response
No response
No response
No response
No response
文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_1.shtml
提供商家转账号零钱的服务Demo
No response
No response
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]
根据示例代码调用预下单接口
完成下单
No response
macOS
Java 17
0.2.1
No response
同时使用RSAAutoCertificateConfig. AutoCertificateNotificationConfig
出现异常: The corresponding provider for the merchant already exists.
如上
不抱错
No response
macOs
Java 19
0.2.3
No response
2. GsonUtil 这里的 gsonBuilder 是单例,但是 Gson 对象不是单例,每次都会创建一个新的 Gson 对象。
3. out_trade_no 需要做下 url encode,这里要看下 httpclient 有没有帮你做了这个操作。商户支付的订单号由商户自定义生成,仅支持使用字母、数字、中划线-、下划线_、竖线|、星号这些英文半角字符的组合,abcd1234-_| encode 的结果是 abcd1234-_%7C%2A。
4. ACCEPT 的 header 应该是指定 json,这里只会返回 json,为什么设置“/”?
5. 这里是不支持泛型类的,这里如果有类似 class PrepayResponse 这种类的时候,反序列化是会失败的。
6. 这类接口你给用户的感觉就是不会抛任何异常,但其实你的这些代码有抛 RuntimeException 的风险,你需要把这个暴露出来,告诉用户这个接口会抛异常,让用户有感知,以便他自己决策是否需要处理。
除了 api.mch.weixin.qq.com 之外,还有 apihk 的域名,应允许开发者指定。
Config
中增加 baseUrl 的配置项,在 service
中使用 baseUrl + Path 的方式访问 API。
No response
No response
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.