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

微信支付服务商模式支付验证签名失败 #555

Closed
TonyLuo opened this issue Apr 24, 2018 · 9 comments
Closed

微信支付服务商模式支付验证签名失败 #555

TonyLuo opened this issue Apr 24, 2018 · 9 comments

Comments

@TonyLuo
Copy link

TonyLuo commented Apr 24, 2018

我是以服务商模式发起的支付,统一下单什么都成功了,但是一到调起支付的时候就验证签名失败。
问题应该是出在BaseWxPayServiceImpl.java里的再次加密的代码里。服务商模式应该是用subAppId去加密,而不是用appid去加密。

WxPayMpOrderResult payResult = WxPayMpOrderResult.builder().appId(unifiedOrderResult.getAppid()).timeStamp(timestamp).nonceStr(nonceStr).packageValue("prepay_id=" + prepayId).signType(signType).build();
                payResult.setPaySign(SignUtils.createSign(payResult, signType, this.getConfig().getMchKey(), false));
                return payResult;

参考:
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_sl_api.php?chapter=7_7&index=3
image

https://segmentfault.com/q/1010000011493630

@TonyLuo TonyLuo changed the title 服务商模式小程序支付签名失败问题 服务商模式小程序支付签名失败 Apr 24, 2018
@TonyLuo TonyLuo changed the title 服务商模式小程序支付签名失败 微信支付服务商模式小程序支付签名失败 Apr 24, 2018
@TonyLuo TonyLuo changed the title 微信支付服务商模式小程序支付签名失败 微信支付服务商模式小程序支付验证签名失败 Apr 24, 2018
@TonyLuo TonyLuo changed the title 微信支付服务商模式小程序支付验证签名失败 微信支付服务商模式,小程序支付验证签名失败 Apr 24, 2018
@binarywang binarywang changed the title 微信支付服务商模式,小程序支付验证签名失败 微信支付服务商模式支付验证签名失败 May 13, 2018
@binarywang
Copy link
Member

3.0.6.BETA测试版本已修复

@TonyLuo
Copy link
Author

TonyLuo commented May 14, 2018

这个问题没有解决,还是有同样的签名问题。要先把 payResult的签名清空,然后再重新签名才行。
payResult.setPaySign(null);


        payResult.setPaySign(null);
        payResult.setPaySign(
            SignUtils.createSign(payResult, WxPayConstants.SignType.MD5, wxPayProviderService.getConfig().getMchKey(), false)
        );

@binarywang
Copy link
Member

@TonyLuo 看了下你的代码,没看明白,你新设的appid是子商户号的appid吗?

@TonyLuo
Copy link
Author

TonyLuo commented May 14, 2018

我这个是临时解决的方法,是在所有结果都出来后再补救的做法。
在签名前加上这句就行。
```
payResult.setPaySign(null);
payResult.setPaySign(
SignUtils.createSign(payResult, WxPayConstants.SignType.MD5, wxPayProviderService.getConfig().getMchKey(), false)
);

@TonyLuo
Copy link
Author

TonyLuo commented May 14, 2018

payResult 已经有签名了,不清空签名的话会把签名带到下一个签名结果里。
先清空一下,再重新签名。
payResult.setPaySign(null);
payResult.setPaySign(SignUtils.createSign(payResult, signType, this.getConfig().getMchKey(), false));

case TradeType.JSAPI: {
        String signType = SignType.MD5;
        String appid = unifiedOrderResult.getAppid();
        if (StringUtils.isNotEmpty(this.getConfig().getSubAppId())) {
          appid = this.getConfig().getSubAppId();
        }

        WxPayMpOrderResult payResult = WxPayMpOrderResult.builder()
          .appId(appid)
          .timeStamp(timestamp)
          .nonceStr(nonceStr)
          .packageValue("prepay_id=" + prepayId)
          .signType(signType)
          .build();

        payResult.setPaySign(null);

        payResult.setPaySign(SignUtils.createSign(payResult, signType, this.getConfig().getMchKey(), false));
        return (T) payResult;
      }

@binarywang
Copy link
Member

我能理解你在方法外面使用payResult.setPaySign(null)的用意,但是在方法内部,这句不显得多余吗?该对象是使用WxPayMpOrderResult的build方法刚刚构建的,paySign值还是null的

@TonyLuo
Copy link
Author

TonyLuo commented May 14, 2018

那就奇怪了,最新的3.0.6.BETA测试发现不在方法外面重新签名,还是会报签名错误

@TonyLuo
Copy link
Author

TonyLuo commented May 14, 2018

好吧,我的子商户号的appid有多个,动态传进去的,不是hardcode的在配置文件里,所以还是有问题。
是我的业务逻辑必须在外面再处理一次。
建议考虑支持动态传配置appid

@binarywang
Copy link
Member

确实代码还可以更灵活些,稍后考虑下,也欢迎你随时提供代码。

binarywang added a commit that referenced this issue Jun 22, 2018
* #519 修复小程序客服消息 URL 被转义的问题

* 优化单元测试提示信息

* 网页授权url增加&connect_redirect=1参数解决两次重定向跳转问题: https://blog.csdn.net/jiangguilong2000/article/details/79416615

* 修复错误的feeToYuan方法名为fenToYuan

* #529 EntPayBankRequest增加默认构造函数

* #529 EntPayBankResult中cmmsAmount的数据类型改为Integer

* #528 WxMpUser类增加三个属性:subscribe_scene、 qr_scene 和qr_scene_str

* 修复代码

* 发布3.0.1.BETA测试版本

* #533 微信刷卡支付请求类增加缺少的三个参数

* #536 企业号模块增加获取企业号应用相关接口

* 定义《企业号应用》的bean

* 增加《获取企业号应用》接口实现

* 增加获取测试企业号应用信息测试类

* #535 修复Tomcat 不能正常关闭的问题,增加线程池shutdown相关的操作

* #541 企业号增加实现管理标签的(获取标签成员)接口 

* 定义《企业号应用》的bean

* 增加《获取企业号应用》接口实现

* 增加获取测试企业号应用信息测试类

* tag service增加获取标签成员方法
http://qydev.weixin.qq.com/wiki/index.php?title=管理标签

* #534 公众号发送模版消息中的小程序path改回pagepath

* 发布3.0.2.BETA测试版本

* #547 开放平台模块 componentAccessToken 增加过期自动刷新

* createOrder方法增加H5支付的支持

* #551 文本卡片消息增加btntext字段

* #550 企业微信删除标签成员接口增加部门列表参数

* 清理无用代码

* #530 微信支付申请退款接口结果类增加单个代金券相关参数 ,并根据官方文档整理其他参数

* #531 小程序WxMaMessage类增加小程序卡片消息相关的几个属性

* #520 企业微信网页授权增加使用user_ticket获取成员详情的接口

* 发布3.0.3.BETA测试版本

* 优化代码

* 完善测试

* #559 微信开放平台:1. WxOpenInRedisConfigStorage 支持 JedisPool/JedisSentinelPool 等 Pool<Jedis> 的子类;2. WxOpenInRedisConfigStorage 增加 keyPrefix 以支持可配置的前缀;

* #560 微信开放平台:增加小程序代码模板库管理 

* 微信开放平台:1. WxOpenInRedisConfigStorage 支持 JedisPool/JedisSentinelPool 等 Pool<Jedis> 的子类;2. WxOpenInRedisConfigStorage 增加 keyPrefix 以支持可配置的前缀;

* 微信开放平台:增加小程序代码模板库管理

* #562 小程序增加代码管理相关 API

* 微信开放平台:1. WxOpenInRedisConfigStorage 支持 JedisPool/JedisSentinelPool 等 Pool<Jedis> 的子类;2. WxOpenInRedisConfigStorage 增加 keyPrefix 以支持可配置的前缀;

* 微信开放平台:增加小程序代码模板库管理

* 小程序:增加代码管理相关 API

* #563 小程序增加修改服务器地址、成员管理 API 

* 微信开放平台:1. WxOpenInRedisConfigStorage 支持 JedisPool/JedisSentinelPool 等 Pool<Jedis> 的子类;2. WxOpenInRedisConfigStorage 增加 keyPrefix 以支持可配置的前缀;

* 微信开放平台:增加小程序代码模板库管理

* 小程序:增加代码管理相关 API

* 小程序:增加修改服务器地址、成员管理 API

* #565 小程序增加数据分析相关 API 

* 微信开放平台:1. WxOpenInRedisConfigStorage 支持 JedisPool/JedisSentinelPool 等 Pool<Jedis> 的子类;2. WxOpenInRedisConfigStorage 增加 keyPrefix 以支持可配置的前缀;

* 微信开放平台:增加小程序代码模板库管理

* 小程序:增加代码管理相关 API

* 小程序:增加修改服务器地址、成员管理 API

* 小程序:增加数据分析相关 API

* #567 微信开放平台增加 HTTP proxy 机制

* 微信开放平台:1. WxOpenInRedisConfigStorage 支持 JedisPool/JedisSentinelPool 等 Pool<Jedis> 的子类;2. WxOpenInRedisConfigStorage 增加 keyPrefix 以支持可配置的前缀;

* 微信开放平台:增加小程序代码模板库管理

* 小程序:增加代码管理相关 API

* 小程序:增加修改服务器地址、成员管理 API

* 小程序:增加数据分析相关 API

* 微信开放平台:增加 HTTP proxy 机制

* #568 修复三方平台多次授权时,RefreshToken 没有刷新的问题

* fix 多次授权时,RefreshToken 没有刷新

* null 判断

* 发布3.0.4.BETA测试版本

* fix code

* #569 微信支付几个查询关闭对账下载相关接口增加重载方法,以方便客户端指定更多参数

* #578 微信开放平台增加 WxMaUserService 的实现

* 微信开放平台:1. WxOpenInRedisConfigStorage 支持 JedisPool/JedisSentinelPool 等 Pool<Jedis> 的子类;2. WxOpenInRedisConfigStorage 增加 keyPrefix 以支持可配置的前缀;

* 微信开放平台:增加小程序代码模板库管理

* 小程序:增加代码管理相关 API

* 小程序:增加修改服务器地址、成员管理 API

* 小程序:增加数据分析相关 API

* 微信开放平台:增加 HTTP proxy 机制

* 微信开放平台:增加 WxMaUserService 的实现

* 修复小程序码的相关方法命名:WxCode->WxaCode, WxCodeLimit -> WxaCodeUnlimit

* #556 日志信息中如果含有secret值的,将其值隐藏掉

* #585 小程序二维码支持is_hyaline参数生成透明背景二维码

* 发布3.0.5.BETA测试版本

* #584 修复企业付款到银行卡接口签名失败的问题

* 简化代码

* #586 微信支付 WxPayConfig增加支持byte数组方式设置证书

* #581 增加微信公众号错误信息枚举类WxMpErrorMsg,并提供方法,方便根据错误代码查询错误信息内容

* #555 修复微信支付服务商模式支付验证签名失败的问题

* #521 微信支付回调通知类WxPayOrderNotifyResult增加version参数

* #583 企业微信新增人员接口新增字段to_invite

* #583 企业微信通讯录管理增加邀请成员接口

* #587 企业微信几个接口增加个人二维码字段

* 修复字符

* 修复单元测试

* 发布3.0.6.BETA测试版本

* 重构WxError相关代码,自动根据代码补充错误中文说明

* 优化微信支付代码

* #584 修复企业付款queryEntPay签名失败问题

* #591 文件上传接口不自动关闭inputStream,由调用方自己控制

* #595 优化WxPayException

* 发布3.0.7.BETA测试版本

* 更新pom

* 优化代码

* #615 公众号客服消息添加 "发送小程序卡片" 类型

* 优化XStreamTransformer

* 微信支付模块jodd-http修改scope

* 发布3.0.8.BETA测试版本

* #623 群发接口增加clientmsgid

* add author for some files

* clean code

* 重构规范RequestExecuter代码

* #532 实现微信AI开放接口的三个接口:语音上传、查询识别结果和微信翻译功能

* 发布3.0.9.BETA测试版本

* #516 增加获取Wi-Fi门店列表接口

* #629 修复WxPayOrderNotifyResult解析xml报错问题

* #639 修复小程序代码模版库管理 access_token key 错误

* 发布3.1.0正式版本
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants