wechatpay-apiv3/wechatpay-java

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

xy-peng opened this issue · 48 comments

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

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

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

image

描述您想要的解决方案

No response

您还有其他的方案吗?

No response

其他信息

No response

lqqyyy commented

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

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

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

aeman commented

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

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

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

xdaa commented

wechatpay-java能否设置超时时间

一个商户号只能初始化一个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);
        }
    }
}

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

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

回调验签怎么用平台证书

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)

这个错误怎么解决

这个错误怎么解决

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

一次接上,很好用啊 👍

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

可以理解,感谢反馈~

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

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

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

苟使中的苟使

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

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

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

Native支付就是生成二维码 😂

这个错误怎么解决

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

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

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

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

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

参考:

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

参考:

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

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

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

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