Comments (14)
这里方便留个wx么?我们想了解下你具体的诉求
from wechatpay-java.
错误描述
基本没有体现什么面向对象的**,所有的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
鄙人附议,不过感觉更像是外包做的,JsapiService这种难道就不能抽象吗?服务商支付模块定义一个,商户支付模块也定义一个,然后它们就名字相同,其他没有任何关系,相同的model每个模块里面都定义一个,不能抽象就算了,类名就别定义成一样的啊,其他类似的问题比比皆是,真是服了
from wechatpay-java.
首先对SDK的不便表示抱歉。我们在很多方面没有做好。也希望开发者多提意见。
基本没有体现什么面向对象的**,所有的request,rep连接口都没有
简单解释一下。wechatpay-java 有一个设计目标是可扩展,所以将 HttpClient/HttpRequest/HttpResponse 抽象出来了。这样的好处,举个例子,我们就能够提供 Apache-HttpClient 扩展,以便于使用 Apache-HttpClient 而不是 OkHttp 的商户系统整合。
而业务 API 对应的 Request/Response 的定义就非常简单:只包含纯业务数据,能被 JSON 库序列化反序列化。我想 @huihui-hb 你说的 request/rep 是它们。它们确实是没有统一定义接口的,可能也不需要。如果在哪些方面给你造成了不便,希望你能说明具体的场景。
其次有些用法非常无语,比如notify的时候,要传requestbody进sdk解密,但是回调类型又写在解密前的字符串里面,很多吧,感觉怎么用怎么别扭,我一下午。
这一点确实是 SDK 的功能缺失。我们的导向是希望商户能使用不同的服务或 endpoint 接受不同的回调通知。但是确实不满足多业务回调以及 webhook 的场景。我想提供一个两步解析的方法,请 @huihui-hb 看看是否满足你的需求。
NotificationObject object = parser.parse(requestParam);
if (object.event_type == "TRANSACTION.SUCCESS") {
Transaction transaction = object.getResource(Transaction.class);
// do what you want
}
from wechatpay-java.
鄙人附议,不过感觉更像是外包做的,JsapiService这种难道就不能抽象吗?服务商支付模块定义一个,商户支付模块也定义一个,然后它们就名字相同,其他没有任何关系,相同的model每个模块里面都定义一个,不能抽象就算了,类名就别定义成一样的啊,其他类似的问题比比皆是,真是服了
SDK 的实现思路,跟我们把 V2 的统一下单拆分成不同的接口,是一脉相承的。不同接口的契约是不一样的。随着业务持续迭代,久而久之,混在一起容易变成“大泥团”。这是我们不希望看到的。
至于类名是一样的。我也感受到有的方面不方便,比如智能补全时无法一眼识别。但是包名是不一样的。你们会把不同支付的代码写在一起吗? @Linindoo
另外,“比比皆是”能否麻烦你多列几条?我们很希望有更多的反馈意见。
from wechatpay-java.
鄙人附议,不过感觉更像是外包做的,JsapiService这种难道就不能抽象吗?服务商支付模块定义一个,商户支付模块也定义一个,然后它们就名字相同,其他没有任何关系,相同的model每个模块里面都定义一个,不能抽象就算了,类名就别定义成一样的啊,其他类似的问题比比皆是,真是服了
SDK 的实现思路,跟我们把 V2 的统一下单拆分成不同的接口,是一脉相承的。不同接口的契约是不一样的。随着业务持续迭代,久而久之,混在一起容易变成“大泥团”。这是我们不希望看到的。
至于类名是一样的。我也感受到有的方面不方便,比如智能补全时无法一眼识别。但是包名是不一样的。你们会把不同支付的代码写在一起吗? @Linindoo
另外,“比比皆是”能否麻烦你多列几条?我们很希望有更多的反馈意见。
从使用者的角度来讲,你们这个SDK基本没把事情变简单,真写代码的时候让我觉得非常难受。
先把接口定好,jsapiService的参数和返回定好,再去做实现,以后你们更新的时候只要更新实现就行了。你觉得封装接口以后变复杂,我不认为,因为支付这部分主要业务是比较固定的,api上就表达出来了,即使后续增加了分账或者是优惠券活动,都是参数问题而已,我觉得你们这么干,是纯粹的意识形态,是一定要说明你和weixin-java-pay这种包的区别吧。
你现在等于整了一堆POJO让我们自己玩,嗯确实你是把文档都转成model了,另外也封装了鉴权部分,不过我们是写代码的,不是研究sdk的,其实主要是想他省事就好了。
Development Kit ,肯定是要封装的, 如果你改名成wechat-pay-core,我觉得比较合适一些,我也能不会失望到跑到github来表达。
from wechatpay-java.
而业务 API 对应的 Request/Response 的定义就非常简单:只包含纯业务数据,能被 JSON 库序列化反序列化。我想 @huihui-hb 你说的 request/rep 是它们。它们确实是没有统一定义接口的,可能也不需要。如果在哪些方面给你造成了不便,希望你能说明具体的场景。
我觉得他们需要定义成统一接口,因为他们的操作基本一致。不过我刚刚才发现你是分了不同的Servic(js h5 app)。也许是我昨天的理解有问题,你们是要把所有的操作都区分开,反正我昨天下午在引入sdk后写代码时,超级无语。
from wechatpay-java.
太难用了,研究半天,我都不知道怎么下手,哭晕在厕所。能否把参数整合一下,每个接口的参数都不一样,前置条件参数说明和接口要的参数对不上号,都被参数整晕车了。
from wechatpay-java.
太难用了,研究半天,我都不知道怎么下手,哭晕在厕所。能否把参数整合一下,每个接口的参数都不一样,前置条件参数说明和接口要的参数对不上号,都被参数整晕车了。
你是指 前置条件 和 Config
构造时要求的参数对不上吗?
from wechatpay-java.
xy-peng
如果有多个支付服务商或商户,接收回调数据后,apiV3Key和cert要用怎么区分,serialNumber吗
from wechatpay-java.
如果有多个支付服务商或商户,接收回调数据后,apiV3Key和cert要用怎么区分,serialNumber吗
我们建议,不同的商户/服务商,使用不同的回调地址区分,再使用证书验签。
from wechatpay-java.
复议,既然是SDK,那就要一切从简,一切都需要围绕传入参数,SDK内方法返回结果,这样的模式为主,既然用到了SDK,那便是要寻求简便,文档含糊不清,SDK混乱,开发时很多不必要麻烦,腾讯云就做的很好,他将整个SDK初始化一个服务对象,将对象丢入IOC,基本上完成所有的事情,只需要调用对应方法,传入对应参数,微信支付的验签解密这些,完全可以融合起来,而非单独的抛出几个对象Verifier,PrivateKey,CloseableHttpClient,虽然使用起来基本上很方便了,但是我更希望官方可以让SDK更加内聚化,更加便捷,使用更方便,另外我希望SDK有一份详细的文档,而不是让开发者在大海捞针,最好可以提供一份与SDK'版本保持对应的已实现需要的功能的Demo,也方便接入拷贝代码。
from wechatpay-java.
这个SDK确实是太差了,整个架构思路混乱,很多地方很不符合实际,比如Amount这个类,total居然是整型,不允许小数,难道人民币已经贬值到不需要角和分了吗???
对滴,基本的业务逻辑业务需求都有些不对劲,但是还是比以往要方便很多了。
from wechatpay-java.
这个SDK确实是太差了,整个架构思路混乱,很多地方很不符合实际,比如Amount这个类,total居然是整型,不允许小数,难道人民币已经贬值到不需要角和分了吗???
人家total的单位本来就是分
from wechatpay-java.
xy-peng
如果有多个支付服务商或商户,接收回调数据后,apiV3Key和cert要用怎么区分,serialNumber吗
你可以在回调路径上加上不同商户的标识,我这里用的比如 /{tenantCode}/notify解决了这个问题
from wechatpay-java.
Related Issues (20)
- 将pem文件放到resources下,RSAAutoCertificateConfig无法读取到配置文件 HOT 1
- 一个商户号只能初始化一个RSAAutoCertificateConfig 如果商户号参数发生变化 怎么重载RSAAutoCertificateConfig呢
- 普通商户分账 https://api.mch.weixin.qq.com/secapi/pay/profitsharing HOT 1
- JsapiServiceExtension的prepayWithRequestPayment预下单接口 HOT 2
- 总是提示验签失败 HOT 2
- 缺少NATIVE 下单通知响应相关API,可以参考统一下单支付成功的通知。
- 沙箱环境问题 HOT 1
- privateKeyPath 能不能动态加载多个不同的文件 比如多个商户号多个证书文件 HOT 2
- 你们这Java Bean就不能合并提取一下么,一个名字一大堆,关键接口都是同一个 HOT 1
- 文档回调通知代码错误 HOT 1
- JsapiServiceExtension能添加static修饰成全局变量吗?是否线程安全? HOT 2
- 付款码支付推荐用3.0的SDK,结果SDK里面压根儿就没包含付款码的请求
- 下单之后,没有立刻支付,此时再去查订单状态,到底是啥closed?还是notpay, HOT 1
- 发起商家转账,设置回调,InitiateBatchTransferRequest根本没法设置回调 HOT 8
- APP 支付问题
- 您好,我在接预扣费通知API,请问可以使用咱们提供的微信支付 APIv3 Java SDK吗
- 当前不支持合单支付接口的调用,希望更新版本并支持合单支付
- 为什么私钥路径一定要是绝对路径,多个项目成员如何管理这个路径
- 【电子发票】电子发票Java实现
- 生成h5领券链接 错误码 268697610 是什么情况,官方文档没有说明
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from wechatpay-java.