Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【官方调查问卷】微信支付 APIv3 Java SDK 开发者体验调查 #121

Open
xy-peng opened this issue Jan 12, 2023 · 52 comments
Open

Comments

@xy-peng
Copy link
Contributor

xy-peng commented Jan 12, 2023

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

为了向广大开发者提供更好的使用体验,微信支付诚挚邀请您将使用微信支付 APIv3 Java SDK中的感受反馈给我们。本问卷可能会占用您不超过2分钟的时间,感谢您的支持。

问卷系统使用的腾讯问卷,您可以点击这里,或者扫描以下小程序码参与调查。

image

描述您想要的解决方案

No response

您还有其他的方案吗?

No response

其他信息

No response

@xy-peng xy-peng pinned this issue Jan 12, 2023
@lqqyyy
Copy link

lqqyyy commented Mar 24, 2023

写的一坨屎,对接微信能他妈对接两天,什么垃圾东西,看的我折寿

@jsl1992
Copy link

jsl1992 commented Apr 13, 2023

看看其他的写得sdk,或者让其他同事看看。官方文档写得让人看不太明白,sdk也是。我看着都闷了。
自动下载证书,不能多个启动那是啥。
这是让人看的,不是让人猜的。
要写就写好一点

@royalzzz
Copy link

v3支付功能的推出可不可以给一个时间表,很多功能API字典概览都无法通过这个SDK调用,项目里面还需要引入wechatpay-apache-httpclient来实现其他功能真的很不舒服。

@aeman
Copy link

aeman commented Apr 26, 2023

写的很好,能把写文档这个人开了吗?

@sandy1991
Copy link

一个商户号只能初始化一个RSAAutoCertificateConfig 如果商户号参数发生变化 怎么重载RSAAutoCertificateConfig呢

@yanjingyun
Copy link

写的真的像坨屎啊,一个回调的test都不知道你们想干嘛,服了。

@xdaa
Copy link

xdaa commented May 6, 2023

wechatpay-java能否设置超时时间

@BTMTimor
Copy link

BTMTimor commented May 15, 2023

一个商户号只能初始化一个RSAAutoCertificateConfig,项目热部署时会导致项目重启失败!!!要么改掉这个垃圾,要么给个钩子在热部署前处理下......很讨厌用反射处理这些琐事
version:wechatpay-java:0.2.7
stack trace:
java.lang.IllegalStateException: The corresponding provider for the merchant already exists.
at com.wechat.pay.java.core.certificate.AbstractAutoCertificateProvider.(AbstractAutoCertificateProvider.java:72)
at com.wechat.pay.java.core.certificate.AbstractAutoCertificateProvider.(AbstractAutoCertificateProvider.java:49)
at com.wechat.pay.java.core.certificate.RSAAutoCertificateProvider.(RSAAutoCertificateProvider.java:32)
at com.wechat.pay.java.core.certificate.RSAAutoCertificateProvider.(RSAAutoCertificateProvider.java:21)
at com.wechat.pay.java.core.certificate.RSAAutoCertificateProvider$Builder.build(RSAAutoCertificateProvider.java:111)
at com.wechat.pay.java.core.RSAAutoCertificateConfig$Builder.build(RSAAutoCertificateConfig.java:114)

public abstract class AbstractAutoCertificateProvider implements CertificateProvider {
    // ......
    private final Map<String, Map<String, X509Certificate>> certificateMap;
    // ......

    protected AbstractAutoCertificateProvider(
      String requestUrl,
      CertificateHandler certificateHandler,
      AeadCipher aeadCipher,
      HttpClient httpClient,
      String merchantId,
      Map<String, Map<String, X509Certificate>> wechatPayCertificateMap,
      int updateInterval) {
    this.merchantId = merchantId;
    synchronized (AbstractAutoCertificateProvider.class) {
      if (!wechatPayCertificateMap.containsKey(merchantId)) {
        wechatPayCertificateMap.put(merchantId, new HashMap<>());
      } else {
        throw new IllegalStateException(
            "The corresponding provider for the merchant already exists.");
      }
    }
}



/** RSA自动更新平台证书提供器 */
public class RSAAutoCertificateProvider extends AbstractAutoCertificateProvider {

  private static final Map<String, Map<String, X509Certificate>> wechatPayCertificateMap =
      new ConcurrentHashMap<>(); // 证书Map
  private static final CertificateHandler rsaCertificateHandler =
      new RSACertificateHandler(); // 证书处理器
  private static final String REQUEST_URL =
      "https://api.mch.weixin.qq.com/v3/certificates?algorithm_type=RSA"; // 下载证书url

  private RSAAutoCertificateProvider(
      String merchantId, AeadCipher aeadCipher, HttpClient httpClient) {
    super(
        REQUEST_URL,
        rsaCertificateHandler,
        aeadCipher,
        httpClient,
        merchantId,
        wechatPayCertificateMap);
  }

// ...
}

fixed:

public class Application {
    public void onStop() {
        try {
            // 清空证书缓存:RSAAutoCertificateProvider -> static:wechatPayCertificateMap
            final Map<String, Map<String, X509Certificate>> certificateMap =
                    ReflectUtil.getDeclaredFieldValue(RSAAutoCertificateProvider.class, "wechatPayCertificateMap");

            certificateMap.clear();
        } catch (IllegalAccessException | NoSuchFieldException e) {
            LOG.warn("清除微信支付证书失败!", e);
        }
    }
}

@lupengji
Copy link

写的啥垃圾玩意,怎么接口调用都不全 怎么还好意思发出来

@jingjiuzcc
Copy link

我建议让马化腾马总来按照你们的文档开发试试,看看你们第二天还能上班不

@narutocheen
Copy link

回调验签怎么用平台证书

@narutocheen
Copy link

java.lang.IllegalArgumentException: Illegal base64 character 2d
at java.util.Base64$Decoder.decode0(Base64.java:714)
at java.util.Base64$Decoder.decode(Base64.java:526)
at java.util.Base64$Decoder.decode(Base64.java:549)
at com.wechat.pay.java.core.util.PemUtil.loadPrivateKeyFromString(PemUtil.java:41)
at com.wechat.pay.java.core.util.PemUtil.loadPrivateKeyFromPath(PemUtil.java:81)
at com.wechat.pay.java.core.AbstractRSAConfigBuilder.privateKeyFromPath(AbstractRSAConfigBuilder.java:31)

@narutocheen
Copy link

这个错误怎么解决

@QifanWang
Copy link

这个错误怎么解决

这个 Illegal base64 character 2d 对应是 '-' ,可以看下是不是证书和密钥搞混了。SDK代码从字符串加载私钥时会替换头部,如 '-----BEGIN PRIVATE KEY-----' 和尾部等,这里应该是没有成功替换,才抛这个异常。

@dyc87112
Copy link

dyc87112 commented Aug 6, 2023

一次接上,很好用啊 👍

@ca0t
Copy link

ca0t commented Aug 23, 2023

看看阿里的文档,不行去看看易宝、宝付、连连这些小公司的文档
要不是我是21世纪受过教育的好青年, 碰见你们这种把屎放在放在盘子里端出来给用户看的团队, 我高低得上去问候一遍你们亲人.

@Eric-Lee-Handyman
Copy link

看看阿里的文档,不行去看看易宝、宝付、连连这些小公司的文档 要不是我是21世纪受过教育的好青年, 碰见你们这种把屎放在放在盘子里端出来给用户看的团队, 我高低得上去问候一遍你们亲人.

虽然这里是 SDK 使用调研,不过,是哪个文档写得差让您这么愤怒?可以给下链接&指出具体的问题,我们反馈给对应的业务团队。

@ca0t
Copy link

ca0t commented Aug 23, 2023

看看阿里的文档,不行去看看易宝、宝付、连连这些小公司的文档 要不是我是21世纪受过教育的好青年, 碰见你们这种把屎放在放在盘子里端出来给用户看的团队, 我高低得上去问候一遍你们亲人.

虽然这里是 SDK 使用调研,不过,是哪个文档写得差让您这么愤怒?可以给下链接&指出具体的问题,我们反馈给对应的业务团队。

你说的很有道理让我瞬间没了脾气,那么我就一个问题: 你们sdk内的api有相关文档吗?
这个托管项目也就两三个使用示例, 你们官网上“API字典概览”里的接口都有列举出来吗?
说回”API字典概览“, 这里所有接口没有一个有用sdk方式调用, 给的出入参也好, 给的api接口也好,都是http + json请求调用, sdk相应的接口在哪儿呢?
好,在源码使用实例是吧, 一个在官方文档上写着“wechatpay-java (推荐)”两个字的sdk,结果在官方文档上找不到使用实例, 还得去翻源码里的使用实例去用?
谁家对接sdk要去源码里翻使用实例? 我上面说的那三家公司没有一个.
另外, 一个相同对象放在三、四个不同包里我都懒得吐槽了
拿一个分账举例, 没有任何文档告诉我在sdk中怎么调用分账接口, 我只能打开源码, 在项目里一个个找,直到找到profitssharing包, 因为这个包名跟你们接口路径/profitsharing对上了,再去找service请求入参,对照,确保和文档一致.一个接口能对接一小时

@Eric-Lee-Handyman
Copy link

看看阿里的文档,不行去看看易宝、宝付、连连这些小公司的文档 要不是我是21世纪受过教育的好青年, 碰见你们这种把屎放在放在盘子里端出来给用户看的团队, 我高低得上去问候一遍你们亲人.

虽然这里是 SDK 使用调研,不过,是哪个文档写得差让您这么愤怒?可以给下链接&指出具体的问题,我们反馈给对应的业务团队。

你说的很有道理让我瞬间没了脾气,那么我就一个问题: 你们sdk内的api有相关文档吗? 这个托管项目也就两三个使用示例, 你们官网上“API字典概览”里的接口都有列举出来吗? 说回”API字典概览“, 这里所有接口没有一个有用sdk方式调用, 给的出入参也好, 给的api接口也好,都是http + json请求调用, sdk相应的接口在哪儿呢? 好,在源码使用实例是吧, 一个在官方文档上写着“wechatpay-java (推荐)”两个字的sdk,结果在官方文档上找不到使用实例, 还得去翻源码里的使用实例去用? 谁家对接sdk要去源码里翻使用实例? 我上面说的那三家公司没有一个. 另外, 一个相同对象放在三、四个不同包里我都懒得吐槽了 拿一个分账举例, 没有任何文档告诉我在sdk中怎么调用分账接口, 我只能打开源码, 在项目里一个个找,直到找到profitssharing包, 因为这个包名跟你们接口路径/profitsharing对上了,再去找service请求入参,对照,确保和文档一致.一个接口能对接一小时

感谢反馈,我理解这里有两个问题:

  1. SDK 使用示例不全。目前确实只有部分业务提供了示例,我们也在推动这块的完善;请问,您目前比较需要的是哪个能力的使用示例,我们反馈给对应的业务团队;
  2. 在不同包里含同一个对象。这里本质是由于 API 能力在不同的 API 产品中都有使用导致的,我们已经在规划这块能力的聚合。

@royalzzz
Copy link

你们不要在吵了啦,会出人命的~

@dyc87112
Copy link

不要吵了,觉得哪里不好可以考虑PR一起改进下 ^_^

@ca0t
Copy link

ca0t commented Aug 24, 2023

感谢反馈,我理解这里有两个问题:

  1. SDK 使用示例不全。目前确实只有部分业务提供了示例,我们也在推动这块的完善;请问,您目前比较需要的是哪个能力的使用示例,我们反馈给对应的业务团队;
  2. 在不同包里含同一个对象。这里本质是由于 API 能力在不同的 API 产品中都有使用导致的,我们已经在规划这块能力的聚合。

目前我们用到了:
基础支付中的H5支付、app支付、小程序支付、合单支付、退款、支付以及退款相关 查询和回调
资金应用中的分账(11个全部接口)
营销工具中的商家优惠券:小程序、h5、图片上传(营销专用)
风险合规中的投诉、回复、反馈
其他能力中的图片上传
不过昨天晚上我们把这些都接完了, 所以也不再需要什么支持了, 基本上都是翻源码然后对照普通api文档的方式去对接, 我想这20多个接口这么接下来你也能理解我为什么又急又气了吧

@Eric-Lee-Handyman
Copy link

感谢反馈,我理解这里有两个问题:

  1. SDK 使用示例不全。目前确实只有部分业务提供了示例,我们也在推动这块的完善;请问,您目前比较需要的是哪个能力的使用示例,我们反馈给对应的业务团队;
  2. 在不同包里含同一个对象。这里本质是由于 API 能力在不同的 API 产品中都有使用导致的,我们已经在规划这块能力的聚合。

目前我们用到了: 基础支付中的H5支付、app支付、小程序支付、合单支付、退款、支付以及退款相关 查询和回调 资金应用中的分账(11个全部接口) 营销工具中的商家优惠券:小程序、h5、图片上传(营销专用) 风险合规中的投诉、回复、反馈 其他能力中的图片上传 不过昨天晚上我们把这些都接完了, 所以也不再需要什么支持了, 基本上都是翻源码然后对照普通api文档的方式去对接, 我想这20多个接口这么接下来你也能理解我为什么又急又气了吧

可以理解,感谢反馈~

@987423093
Copy link

可以把有关微信收付通相关的所有api都完善一下吗?一方面推收付通,不接入这个整合方案,就禁用我们当前微信支付方式,还只给两个月。另一方面接入微信收付通一堆问题(sdk不完善、申请流程坑多)。真的谢了

@DazeCake
Copy link

DazeCake commented Sep 7, 2023

请求模型同名源码结构是好看了,但是实际开发难受的不是一星半点,私以为使用大驼峰的api接口命名相关请求模型要好得多,毕竟不可能要求所有场景都上微服务,想要抽象一层Service作为api的统一不同支付能力的调用的情况是很合理的

@h353617145
Copy link

jsapi支付成功了 回调验签按照文档步骤做的 一直验签失败 我真的累死了

@niuu-u
Copy link

niuu-u commented Oct 24, 2023

苟使中的苟使

@HappyAxin
Copy link

你们要整SDK不整个完整的Demo出来,让人怎么开发?就给个对象,里面的参数让开发者猜是干嘛的?
还有,你们整个微信事业群不沟通的?一个地方字段叫这个名字,另一个叫另一个名字,变量名还都不一样,CR做了没?
就这样子验收的?你要不看看人家支付宝的写的?
顺带再提一嘴,微信小程序的文档也是一坨🫵!还卡!

@rayliu8499
Copy link

扫描付款码支付这块是需要我们自己手写一个吗?

@Zhang668-z
Copy link

扫描付款码支付这块是需要我们自己手写一个吗?

Native支付就是生成二维码 😂

@jcatom
Copy link

jcatom commented Dec 19, 2023

这个错误怎么解决

这个 Illegal base64 character 2d 对应是 '-' ,可以看下是不是证书和密钥搞混了。SDK代码从字符串加载私钥时会替换头部,如 '-----BEGIN PRIVATE KEY-----' 和尾部等,这里应该是没有成功替换,才抛这个异常。

看到这个回答醍醐灌顶,把Certificate.pem和privateKey搞错了。导致头尾没有替换掉。

@jurcion
Copy link

jurcion commented Jan 22, 2024

我就想问问 平台首付通模块的能力,官方推荐SDK,完了我都开干了,集成进来支付都对接完了,才发现 进件 相关的接口居然没有。。我以为是我眼花,找了半天还真没有

@Haze-gh
Copy link

Haze-gh commented Feb 2, 2024

我来说句好的,东西还是挺不错的,对接起来很快,除开证书一直错误捣鼓了一两天后发现自己的证书确实有问题外,就是一些功能得翻源码来找,能完善文档就很好了,像是退款业务都没在文档里说明

@DevDengChao
Copy link

建议参考一些海外支付平台提供的独立测试环境功能 (恢复沙箱功能), 这个测试环境里配套的功能和配置都可以配合 SDK 附带的样本工程进行调试, 开发者只需要将样本工程里的配置改成测试环境的配置, 部署好就可以跑通主要流程.
这样一来开发者就可以基于这个测试环境和样本工程进行自检, 省去了很多沟通的环节.

参考:

@ding112
Copy link

ding112 commented Mar 7, 2024

建议参考一些海外支付平台提供的独立测试环境功能 (恢复沙箱功能), 这个测试环境里配套的功能和配置都可以配合 SDK 附带的样本工程进行调试, 开发者只需要将样本工程里的配置改成测试环境的配置, 部署好就可以跑通主要流程. 这样一来开发者就可以基于这个测试环境和样本工程进行自检, 省去了很多沟通的环节.

参考:

国内的支付基本都直接接生产,文档能完善就好了,沙箱就不要求了。

@Youth99
Copy link

Youth99 commented Mar 12, 2024

privateKeyPath 能不能动态加载多个不相同的文件
比如多个商户号 多个证书文件

@AndromedaX7
Copy link

看看阿里的文档,不行去看看易宝、宝付、连连这些小公司的文档 要不是我是21世纪受过教育的好青年, 碰见你们这种把屎放在放在盘子里端出来给用户看的团队, 我高低得上去问候一遍你们亲人.

家人,支付宝和阿里的一些文档写的也跟x一样....之前对接支付宝的一边对接一边骂街。
所以咱先来评论区看看这东西能不能用

@ca0t
Copy link

ca0t commented Mar 19, 2024

看看阿里的文档,不行去看看易宝、宝付、连连这些小公司的文档 要不是我是21世纪受过教育的好青年, 碰见你们这种把屎放在放在盘子里端出来给用户看的团队, 我高低得上去问候一遍你们亲人.

家人,支付宝和阿里的一些文档写的也跟x一样....之前对接支付宝的一边对接一边骂街。 所以咱先来评论区看看这东西能不能用

哥们,哪怕你说我菜不会接微信都行,但你说支付宝的文档也像屎那就是你的问题了,如果说接支付宝都还能骂街,那就是你水平问题了

@AndromedaX7
Copy link

看看阿里的文档,不行去看看易宝、宝付、连连这些小公司的文档 要不是我是21世纪受过教育的好青年, 碰见你们这种把屎放在放在盘子里端出来给用户看的团队, 我高低得上去问候一遍你们亲人.

家人,支付宝和阿里的一些文档写的也跟x一样....之前对接支付宝的一边对接一边骂街。 所以咱先来评论区看看这东西能不能用

哥们,哪怕你说我菜不会接微信都行,但你说支付宝的文档也像屎那就是你的问题了,如果说接支付宝都还能骂街,那就是你水平问题了

我的朋友你可能是真的没接过支付宝的人脸认证啊。我只是说一些。。可能就那点不好的让我赶上了

@ca0t
Copy link

ca0t commented Mar 19, 2024

看看阿里的文档,不行去看看易宝、宝付、连连这些小公司的文档 要不是我是21世纪受过教育的好青年, 碰见你们这种把屎放在放在盘子里端出来给用户看的团队, 我高低得上去问候一遍你们亲人.

家人,支付宝和阿里的一些文档写的也跟x一样....之前对接支付宝的一边对接一边骂街。 所以咱先来评论区看看这东西能不能用

哥们,哪怕你说我菜不会接微信都行,但你说支付宝的文档也像屎那就是你的问题了,如果说接支付宝都还能骂街,那就是你水平问题了

我的朋友你可能是真的没接过支付宝的人脸认证啊。我只是说一些。。可能就那点不好的让我赶上了

人脸和三要素吗,我觉得还行啊😨我记得就调试几次

@AndromedaX7
Copy link

看看阿里的文档,不行去看看易宝、宝付、连连这些小公司的文档 要不是我是21世纪受过教育的好青年, 碰见你们这种把屎放在放在盘子里端出来给用户看的团队, 我高低得上去问候一遍你们亲人.

家人,支付宝和阿里的一些文档写的也跟x一样....之前对接支付宝的一边对接一边骂街。 所以咱先来评论区看看这东西能不能用

哥们,哪怕你说我菜不会接微信都行,但你说支付宝的文档也像屎那就是你的问题了,如果说接支付宝都还能骂街,那就是你水平问题了

我的朋友你可能是真的没接过支付宝的人脸认证啊。我只是说一些。。可能就那点不好的让我赶上了

人脸和三要素吗,我觉得还行啊😨我记得就调试几次

好像是那个,叫什么身份验证sdk。多端文档都写得乱七八糟的。当时是一伙人一起骂的

@Oniokey
Copy link

Oniokey commented Mar 19, 2024

能不能把不同产品下面的 PrePayRequestResopnse 等等在命名上做个区分,比如像是 NativePrePayRequestJsapiPrePayRequest这样子,每次找稍不留心就选错,然后就开始 de 无意义的 bug ……

@edxspark
Copy link

SDK v0.2.12 使用体验:
代码:没有整体工程架构设计,预计在整体架构设计 >详细设计 > 编码过程存在问题,造成代码抽象及使用效率没有达到预期;
文档:写文档对SDK不够熟悉,造成文档质量差;

推荐:
代码:业务需求需再深入分析,功底深的工程师进行架构设计研发;
文档:SDK级别的代码,代码文档工程师来写(最清楚);
文档按场景板块划分+代码(经查看官方文档【文档系统】落后,文档和代码显示支持差)

@Linindoo
Copy link

RSAConfig.Builder 新版本为啥要把public Builder wechatPayCertificates(X509Certificate... wechatPayCertificates)这个方法给干掉?不能理解,这么有用的一个方法,居然干掉了
image

@zwq1792966796
Copy link

腾讯文档写的真是一言难尽

@Cyborg2077
Copy link

发起商家转账的InitiateBatchTransferRequest里竟然不能设置最重要的回调地址???我还得重构一下是吧,隔壁支付宝虽然也没提供回调地址,但是人家转账结果是同步返回的啊

@weir2010
Copy link

Config config =
new RSAAutoCertificateConfig.Builder()
.merchantId(sysConfig.weiXinPay().mchId())
.privateKeyFromPath("/Users/weir/git/weir-quarkus-shop/quarkus-server/src/main/resources/wxpay.pem")
.merchantSerialNumber(sysConfig.weiXinPay().privateKeyNo())
.apiV3Key(sysConfig.weiXinPay().apiV3Key())
.build();

报错: {
"message": "Illegal base64 character 2d"
}

@weir2010
Copy link

Config config = new RSAAutoCertificateConfig.Builder() .merchantId(sysConfig.weiXinPay().mchId()) .privateKeyFromPath("/Users/weir/git/weir-quarkus-shop/quarkus-server/src/main/resources/wxpay.pem") .merchantSerialNumber(sysConfig.weiXinPay().privateKeyNo()) .apiV3Key(sysConfig.weiXinPay().apiV3Key()) .build();

报错: { "message": "Illegal base64 character 2d" }

私钥的问题,解决了

@Jasonyou-boy
Copy link

腾讯的同学好像都不太会写文档???体验感真的极其糟糕,各种签名规则不统一,字段意义不明确,看完文档不知其然。一头雾水,对接一个jsApi支付都对接了两三天,各种密钥用途也不明确。

@ocean101
Copy link

看看阿里的文档,不行去看看易宝、宝付、连连这些小公司的文档 要不是我是21世纪受过教育的好青年, 碰见你们这种把屎放在放在盘子里端出来给用户看的团队, 我高低得上去问候一遍你们亲人.

家人,支付宝和阿里的一些文档写的也跟x一样....之前对接支付宝的一边对接一边骂街。 所以咱先来评论区看看这东西能不能用

哥们,哪怕你说我菜不会接微信都行,但你说支付宝的文档也像屎那就是你的问题了,如果说接支付宝都还能骂街,那就是你水平问题了

赞同,刚对接完支付宝的业务,文档写的确实不错,还自带问题排查工具,而且遇到各种问题,人工客服会及其有耐心的帮你解决,对接支付宝确实很轻松,体验很好。

@wutiange
Copy link

我觉得你们的格局都没有腾讯的高,腾讯是为了整个中国程序员考虑的,如果什么都弄得很容易,那你就很容易被淘汰;所以腾讯背负骂名做这些事情是很伟大的。

@liuyang3688
Copy link

文档写的真垃圾,没见过这么垃圾的文档。腾讯也是社交垄断的头把交椅,生态做的惨不忍睹。

我需求很简单,微信支付 App支付类型 Android应用,就想知道能不能使用wechatpay-java;从头看到尾也没看到官方说明。example里有api能看到有app区分,但是示例里又有私钥路径的配置。私钥又不建议放在客户端。你大爷的倒是给你最佳时间啊。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests