wechatpay-apiv3 / wechatpay-java

微信支付 APIv3 的官方 Java Library
Apache License 2.0
923 stars 206 forks source link

JsApi 下单附加参数 attach 在支付回调中不会带回 #143

Closed AndyCuiYTT closed 1 year ago

AndyCuiYTT commented 1 year ago

错误描述

JsApi 下单附加参数 attach 在支付回调中不会带回

"associated_data":"transaction",

重现bug的步骤

支付添加附加值,回调获取

预期行为

附加参数随支付回调返回

导致错误的代码片段

No response

操作系统

macos

Java 版本

java 8

wechatpay-java 版本

0.2.6

其他信息

No response

xy-peng commented 1 year ago

JsApi 下单附加参数 attach 在支付回调中不会带回 "associated_data":"transaction",

attach 在回调的业务信息中,对 ciphertext 解密后可看到,跟AEAD加密的 associated_data 不是一个东西。使用SDK提供的方法可以方便的解密。

// 如果已经初始化了 RSAAutoCertificateConfig,可直接使用
// 没有的话,则构造一个
NotificationConfig config = new RSAAutoCertificateConfig.Builder()
        .merchantId(merchantId)
        .privateKeyFromPath(privateKeyPath)
        .merchantSerialNumber(merchantSerialNumber)
        .apiV3Key(apiV3key)
        .build();

// 初始化 NotificationParser
NotificationParser parser = new NotificationParser(config);

// 验签并解密报文
Transaction decryptObject = parser.parse(requestParam, Transaction.class);
AndyCuiYTT commented 1 year ago

我们需要配置多商户,之前设置的attach会在associated_data中返回,用户区分商户,

xy-peng commented 1 year ago

不可能在 associated_data 中带回的。建议设置到 notify_url 中。

AndyCuiYTT commented 1 year ago

感谢,我试一下,之前通过 associated_data 确实获取到了,我试下

xy-peng commented 1 year ago

之前通过 associated_data 确实获取到了

可能恰好两者的值是一致的?associated_data 是微信支付设置的固定值,而不是你指定的 attach。