yansongda / pay

可能是我用过的最优雅的 Alipay/WeChat/Unipay 的支付 SDK 扩展包了

Home Page:http://pay.yansongda.cn

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

3.6.2 微信签名为空

ganxiaozhe opened this issue · comments

包版本号

3.6.2

问题描述

Yansongda\Pay\Exception\InvalidSignException: 签名异常: 微信签名为空

你的代码

Pay::config(config('payment'));
$result = Pay::wechat()->scan([
    'out_trade_no' => $otn,
    'description' => $payment->description,
    'amount' => [
        'total' => $payment->amount*100,
    ],
]);

报错详情

Yansongda\Pay\Exception\InvalidSignException: 签名异常: 微信签名为空 in /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/pay/src/Functions.php:238<br/>
Stack trace:<br/>
#0 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/pay/src/Plugin/Wechat/V3/VerifySignaturePlugin.php(42): Yansongda\Pay\verify_wechat_sign(Object(GuzzleHttp\Psr7\Response), Array)<br/>
#1 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/supports/src/Pipeline.php(93): Yansongda\Pay\Plugin\Wechat\V3\VerifySignaturePlugin->assembly(Object(Yansongda\Artful\Rocket), Object(Closure))<br/>
#2 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/pay/src/Plugin/Wechat/ResponsePlugin.php(25): Yansongda\Supports\Pipeline->Yansongda\Supports\{closure}(Object(Yansongda\Artful\Rocket))<br/>
#3 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/supports/src/Pipeline.php(93): Yansongda\Pay\Plugin\Wechat\ResponsePlugin->assembly(Object(Yansongda\Artful\Rocket), Object(Closure))<br/>
#4 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/pay/src/Plugin/Wechat/AddRadarPlugin.php(46): Yansongda\Supports\Pipeline->Yansongda\Supports\{closure}(Object(Yansongda\Artful\Rocket))<br/>
#5 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/supports/src/Pipeline.php(93): Yansongda\Pay\Plugin\Wechat\AddRadarPlugin->assembly(Object(Yansongda\Artful\Rocket), Object(Closure))<br/>
#6 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/pay/src/Plugin/Wechat/V3/AddPayloadSignaturePlugin.php(52): Yansongda\Supports\Pipeline->Yansongda\Supports\{closure}(Object(Yansongda\Artful\Rocket))<br/>
#7 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/supports/src/Pipeline.php(93): Yansongda\Pay\Plugin\Wechat\V3\AddPayloadSignaturePlugin->assembly(Object(Yansongda\Artful\Rocket), Object(Closure))<br/>
#8 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/artful/src/Plugin/AddPayloadBodyPlugin.php(31): Yansongda\Supports\Pipeline->Yansongda\Supports\{closure}(Object(Yansongda\Artful\Rocket))<br/>
#9 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/supports/src/Pipeline.php(93): Yansongda\Artful\Plugin\AddPayloadBodyPlugin->assembly(Object(Yansongda\Artful\Rocket), Object(Closure))<br/>
#10 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Native/PayPlugin.php(60): Yansongda\Supports\Pipeline->Yansongda\Supports\{closure}(Object(Yansongda\Artful\Rocket))<br/>
#11 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/supports/src/Pipeline.php(93): Yansongda\Pay\Plugin\Wechat\V3\Pay\Native\PayPlugin->assembly(Object(Yansongda\Artful\Rocket), Object(Closure))<br/>
#12 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/pay/src/Plugin/Wechat/StartPlugin.php(22): Yansongda\Supports\Pipeline->Yansongda\Supports\{closure}(Object(Yansongda\Artful\Rocket))<br/>
#13 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/supports/src/Pipeline.php(93): Yansongda\Pay\Plugin\Wechat\StartPlugin->assembly(Object(Yansongda\Artful\Rocket), Object(Closure))<br/>
#14 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/supports/src/Pipeline.php(57): Yansongda\Supports\Pipeline->Yansongda\Supports\{closure}(Object(Yansongda\Artful\Rocket))<br/>
#15 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/artful/src/Artful.php(257): Yansongda\Supports\Pipeline->then(Object(Closure))<br/>
#16 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/artful/src/Artful.php(236): Yansongda\Artful\Artful::artful(Array, Array)<br/>
#17 /Users/chengrenju/Development/php/enneatao-api/vendor/yansongda/pay/src/Provider/Wechat.php(63): Yansongda\Artful\Artful::shortcut('\\Yansongda\\Pay\\...', Array)<br/>
#18 /Users/chengrenju/Development/php/enneatao-api/app/controller/pay/wechat/indexController.php(26): Yansongda\Pay\Provider\Wechat->__call('scan', Array)<br/>
#19 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/webman-framework/src/App.php(319): app\controller\pay\wechat\IndexController->scan(Object(support\Request))<br/>
#20 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/webman-framework/src/App.php(349): Webman\App::Webman\{closure}(Object(support\Request))<br/>
#21 /Users/chengrenju/Development/php/enneatao-api/app/middleware/AuthControl.php(62): Webman\App::Webman\{closure}(Object(support\Request))<br/>
#22 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/webman-framework/src/App.php(341): app\middleware\AuthControl->process(Object(support\Request), Object(Closure))<br/>
#23 /Users/chengrenju/Development/php/enneatao-api/app/middleware/AccessControl.php(12): Webman\App::Webman\{closure}(Object(support\Request))<br/>
#24 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/webman-framework/src/App.php(341): app\middleware\AccessControl->process(Object(support\Request), Object(Closure))<br/>
#25 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/webman-framework/src/App.php(168): Webman\App::Webman\{closure}(Object(support\Request))<br/>
#26 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/workerman/Connection/TcpConnection.php(646): Webman\App->onMessage(Object(Workerman\Connection\TcpConnection), Object(support\Request))<br/>
#27 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/workerman/Events/Select.php(311): Workerman\Connection\TcpConnection->baseRead(Resource id #190)<br/>
#28 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/workerman/Worker.php(1635): Workerman\Events\Select->loop()<br/>
#29 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/workerman/Worker.php(1426): Workerman\Worker::forkOneWorkerForLinux(Object(Workerman\Worker))<br/>
#30 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/workerman/Worker.php(1400): Workerman\Worker::forkWorkersForLinux()<br/>
#31 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/workerman/Worker.php(1785): Workerman\Worker::forkWorkers()<br/>
#32 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/workerman/Worker.php(1721): Workerman\Worker::monitorWorkersForLinux()<br/>
#33 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/workerman/Worker.php(562): Workerman\Worker::monitorWorkers()<br/>
#34 /Users/chengrenju/Development/php/enneatao-api/vendor/workerman/webman-framework/src/support/App.php(131): Workerman\Worker::runAll()<br/>
#35 /Users/chengrenju/Development/php/enneatao-api/start.php(4): support\App::run()<br/>#36 {main}

请问方便提供 SDK 的日志么?

问题似乎是由 out_trade_no 的错误造成的,但回显的却是 签名异常: 微信签名为空

2024-02-28T23:06:45.091125+08:00 > yansongda.artful.INFO > [Artful] 请求第三方 API 成功 {"rocket":{"radar":{"url":"https://api.mch.weixin.qq.com/v3/pay/transactions/native","method":"POST","headers":{"Host":["api.mch.weixin.qq.com"],"Accept":["application/json, text/plain, application/x-gzip"],"User-Agent":["yansongda/pay-v3"],"Content-Type":["application/json; charset=utf-8"],"Authorization":["WECHATPAY2-SHA256-RSA2048 mchid=\"1618697327\",nonce_str=\"***\",timestamp=\"1709132804\",serial_no=\"***\",signature=\"***\",\"description\":\"测试分析报告-标准版报告-人格九道\",\"amount\":{\"total\":2900},\"notify_url\":\"https:\\/\\/gxz.***.com\\/wechat\\/notify\",\"appid\":\"***\",\"mchid\":\"1618697327\"}"},"params":{"out_trade_no":"et01hqq9a1s6ebfya3m111qwvx7x1709132804","description":"测试分析报告-标准版报告","amount":{"total":2900.0}},"payload":{"out_trade_no":"et01hqq9a1s6ebfya3m111qwvx7x1709132804","description":"测试分析报告-标准版报告","amount":{"total":2900.0},"_method":"POST","_url":"v3/pay/transactions/native","_service_url":"v3/pay/partner/transactions/native","notify_url":"https://gxz.***.com/wechat/notify","appid":"wx6c973b972da5ff01","mchid":"1618697327","_body":"{\"out_trade_no\":\"et01hqq9a1s6ebfya3m111qwvx7x1709132804\",\"description\":\"测试分析报告-标准版报告\",\"amount\":{\"total\":2900},\"notify_url\":\"https:\\/\\/gxz.***.com\\/wechat\\/notify\",\"appid\":\"wx6c973b972da5ff01\",\"mchid\":\"1618697327\"}","_authorization":"WECHATPAY2-SHA256-RSA2048 mchid=\"1618697327\",nonce_str=\"***\",timestamp=\"1709132804\",serial_no=\"***\",signature=\"***\""},"packer":"Yansongda\\Artful\\Contract\\PackerInterface","direction":"Yansongda\\Artful\\Contract\\DirectionInterface","destination":{"GuzzleHttp\\Psr7\\Response":[]},"destination_origin":{"status":400,"headers":{"Server":["nginx"],"Date":["Wed, 28 Feb 2024 15:06:45 GMT"],"Content-Type":["application/json; charset=utf-8"],"Content-Length":["210"],"Connection":["keep-alive"],"Keep-Alive":["timeout=8"],"Cache-Control":["no-cache, must-revalidate"],"X-Content-Type-Options":["nosniff"],"Request-ID":["***-268435462"],"Content-Language":["zh-CN"]},"body":"{\"code\":\"PARAM_ERROR\",\"detail\":{\"location\":\"body\",\"value\":38},\"message\":\"输入源“/body/out_trade_no”映射到值字段“商户订单号”字符串规则校验失败,字节数 38,大于最大值 32\"}"}}} 

ok,我晚些时候看看怎么优化下。

PS:如果感兴趣,可以尝试提个 PR

@ganxiaozhe 麻烦 composer update 到最新版本试试看这个问题