From 1f1d2d26d54f414171333c06e7a5b2e86eb2f8a2 Mon Sep 17 00:00:00 2001 From: Hankin Date: Mon, 27 Apr 2026 09:27:17 +0800 Subject: [PATCH] callback --- app/Http/Controllers/WechatPayController.php | 1 + app/Services/WechatPayService.php | 49 +++++++++++++++++--- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/WechatPayController.php b/app/Http/Controllers/WechatPayController.php index 752438a..f39d220 100644 --- a/app/Http/Controllers/WechatPayController.php +++ b/app/Http/Controllers/WechatPayController.php @@ -60,6 +60,7 @@ class WechatPayController extends Controller Log::info("请求头", ["headers" => $headers]); Log::info("请求体", ["body" => $body]); $res = WechatPayService::mchTransferCallback($headers, $body); + dd($res); if (empty($res)) { return $this->failure("回调失败"); } diff --git a/app/Services/WechatPayService.php b/app/Services/WechatPayService.php index 1caa11f..e2a0974 100644 --- a/app/Services/WechatPayService.php +++ b/app/Services/WechatPayService.php @@ -1,6 +1,7 @@ $headers]); // return null; // 返回 500 让微信重试 // } - + $decryptData = $this->decryptToString($rawBody); // 4. 解密回调数据 - $decryptData = $this->decryptNotifyData($rawBody); - if (!$decryptData) { - Log::error('数据解密失败'); - return null; - } + // $decryptData = $this->decryptNotifyData($rawBody); + // if (!$decryptData) { + // Log::error('数据解密失败'); + // return null; + // } return $decryptData; } @@ -218,6 +220,41 @@ class WechatPayService return json_decode($decrypted, true); } + public function decryptToString($data) + { + try { + $resource = $data['resource']; + $nonceStr = $resource['nonce']; + $ciphertext = $resource['ciphertext']; + $associatedData = $resource['associated_data'] ?? ''; + $apiV3Key = config("wechatpay.payment.api3_key"); + + $ciphertext = base64_decode($ciphertext); + if (strlen($ciphertext) <= 16) { + return false; + } + if (in_array('aes-256-gcm', openssl_get_cipher_methods())) { + $ctext = substr($ciphertext, 0, -16); + $authTag = substr($ciphertext, -16); + $res = openssl_decrypt( + $ctext, + 'aes-256-gcm', + $apiV3Key, + OPENSSL_RAW_DATA, + $nonceStr, + $authTag, + $associatedData + ); + return json_decode($res, true); + } + return null; + } catch (Exception $e) { + $this->getError($e); + return null; + } + + } + /** * 商家批量转账到零钱 */