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

fix: 微信服务商模式预下单存在子商户appid时,invoke 时也应该为子商户 appid #638

Merged
merged 3 commits into from
Jul 24, 2022

Conversation

Wsmallnews
Copy link
Contributor

修复 #637 ,公众号服务商模式支付,未正确返回 发起公众号,也就是子商户关联公众号 appid 问题

@yansongda
Copy link
Owner

有微信官方文档支撑么?

@Wsmallnews
Copy link
Contributor Author

没有说明,支付接口(包括服务商)微信官方只会返回 类似如下信息

{
	"prepay_id": "wx26112221580621e9b071c00d9e093b0000"
}

,实际调用包里面的方法返回的是如下信息

appId: "wx385asd6546e24212df244"
nonceStr: "K0R8mfJucEKCDgWbLBDdOancPwYYJqHt"
package: "prepay_id=wx23152610108710cb4a25b7ce2fb5040000"
paySign: "h0SUZGSYOoa9d7GUMZER4dLhH0AEGJGPzI1Qtu7yLGLyUwdg3rCDjLPCXwl7Vg6rvc9S6zmB4wpt29t9jGpj3hnbdcNVSG2NJfqWTIFj6hHLYfiJPLyRxvqoz9XDnOi6lB/TY+ZvGwZlSRWRfrI37hcseutfC4RimyexQt+jjILPb1ihUagP1W5Xj/NJMnQ2u987BKXWSUFzCjM+9Cizt6zmHOng0XzYWV6Dy3N8nDqvzRtSAgSaHyyzN2JndJt9Hp+0xUOZKMfEiq/PwztOJTUBYOTmkNB8+E7vtbdulS1ygPvUhWTDj6b9WsJWc9h4Rphi1zxP7op+qiSGPsnlxw=="
signType: "RSA"
timeStamp: "1658561170"

别的返回参数应该是咱这个包组装的,目前实测结果是像小程序 InvokePrepayPlugin.php 一样给公众号的也加一个服务商判断,包返回结果中的 appid 是会变为子商户关联公众号的 appid,也就是发起支付的公众号 appid,并且能正常支付,否则就是提示 “支付验证签名失败”

@Wsmallnews
Copy link
Contributor Author

需要打印什么地方的参数确认,我可以帮忙打印信息

@yansongda
Copy link
Owner

截屏2022-07-23 16 46 10

我再官方文档上只看到了这样一句话,现在想弄清楚的是

下单的时候怎么传值的,是否和 官方文档上 这句话有关

@yansongda
Copy link
Owner

看看你那边怎么传参的,然后,能否帮忙测试下关于这句话是否和你遇到的问题有关

@Wsmallnews
Copy link
Contributor Author

Yansongda\Pay\Plugin\Wechat\Pay\Common\InvokePrepayPlugin getInvokeConfig 中打印生成参数,appid 确实是主商户号关联的 appid, 并且生成签名,也确实用的是主商户的 key 证书;按照你截图这句话的说法这个应该是正确的,但是目前支付确实是提示签名错误
image

@yansongda
Copy link
Owner

我改了一下,拉下代码,帮忙用现在的代码测试下看看?

@Wsmallnews
Copy link
Contributor Author

我刚把代码拷过去试了下,公众号服务商支付是可以正常拉起来的,并且包返回结果是子商户关联的 appid

@Wsmallnews
Copy link
Contributor Author

刚思考了一下, 前端拉起支付是使用的 jssdk, 而jssdk 需要初始化用的是发起支付公众号的 appid,也就是子商户的 appid,所以这里报签名错误,可能是和这个有关系,如果发起支付使用 WeixinJSBridge ,猜想可能服务商的 appid 也能正常拉起支付

不过这里使用子商户的 appid 肯定是没问题的

@yansongda
Copy link
Owner

测试没问题了?

@Wsmallnews
Copy link
Contributor Author

对的,没问题了, 我这边测试了公众号和小程序都没有问题

@Wsmallnews
Copy link
Contributor Author

刚检查代码,发现 h5 的普通商户支付可能存在问题,我正在测试,稍等

@Wsmallnews
Copy link
Contributor Author

不好意思应该是我这边问题,不过目前因为 h5 支付,和 app 支付未开发完成, 没办法帮忙测试

@yansongda
Copy link
Owner

yansongda commented Jul 23, 2022

好,晚些时候我把测试用例补上到时候再合吧

@Wsmallnews
Copy link
Contributor Author

好的,感谢

@yansongda yansongda changed the title fix: 公众号服务商模式支付未返回正确的子商户公众号 appid fix: 微信服务商模式预下单存在子商户appid时,invoke 时也应该为子商户 appid Jul 24, 2022
@yansongda yansongda merged commit bd56ba3 into yansongda:master Jul 24, 2022
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

Successfully merging this pull request may close these issues.

2 participants