WIN-2308041133\Administrator há 5 meses atrás
pai
commit
a8810ca369
1 ficheiros alterados com 30 adições e 8 exclusões
  1. 30 8
      extend/liuniu/WechatService.php

+ 30 - 8
extend/liuniu/WechatService.php

@@ -605,7 +605,7 @@ class WechatService
 
 // 使用动态时间戳
         $current_timestamp = time();
-        $contract_code = preg_replace("/[^0-9]/", "", $contract_code);
+//        $contract_code = preg_replace("/[^0-9]/", "", $contract_code);
         $params = [
             'appid' => 'wx5681205d1ef4d9d3',
             'mch_id' => $mch_id,
@@ -613,7 +613,7 @@ class WechatService
             'contract_code' => $contract_code,
             'request_serial' => $current_timestamp, // 使用时间戳作为序列号
             'contract_display_account' => '昔拉',
-            'notify_url' => 'https://red.igxys.com/api/wechat/notify/12',
+            'notify_url' => 'http://red.igxys.com/api/wechat/notify/12',
             'timestamp' => $current_timestamp, // 动态时间戳
             'version' => '1.0',
         ];
@@ -636,7 +636,8 @@ class WechatService
         $stringSignTemp = $stringA . 'key=' . $key;
 
 // 关键步骤5:正确生成HMAC-SHA256签名
-        $sign = strtoupper(hash_hmac('sha256', $stringSignTemp, '')); // 注意:第三个参数为空字符串
+//        $sign = strtoupper(hash_hmac('sha256', $stringSignTemp, '')); // 注意:第三个参数为空字符串
+        $sign = self::generateWechatMD5Sign($params, $key);
         $params['sign'] = $sign;
         $params['notify_url'] = urlencode($params['notify_url']);
 //        $params['contract_display_account'] = urlencode($params['contract_display_account']);
@@ -687,11 +688,11 @@ class WechatService
         }
 
         curl_close($ch);
-        if (curl_errno($ch)) {
-            echo 'CURL Error: ' . curl_error($ch);
-        } else {
-            echo "Response:\n" . $response;
-        }
+//        if (curl_errno($ch)) {
+//            echo 'CURL Error: ' . curl_error($ch);
+//        } else {
+//            echo "Response:\n" . $response;
+//        }
 
 //        $request_serial = time();
 //        $timestamp = time();
@@ -705,6 +706,27 @@ class WechatService
         @file_put_contents("quanju3.txt", json_encode($response) . "-签约返回结果测试\r\n", 8);
         return $response;
     }
+    public static function generateWechatMD5Sign($params, $key) {
+        // 1. 过滤空值和签名参数
+        $filteredParams = array_filter($params, function($value, $key) {
+            return $value !== '' && $key !== 'sign';
+        }, ARRAY_FILTER_USE_BOTH);
+
+        // 2. 按键名ASCII字典序排序
+        ksort($filteredParams);
+
+        // 3. 拼接键值对
+        $stringA = '';
+        foreach ($filteredParams as $k => $v) {
+            $stringA .= "{$k}={$v}&";
+        }
+
+        // 4. 拼接API密钥
+        $stringSignTemp = $stringA . "key={$key}";
+
+        // 5. MD5加密并转为大写
+        return strtoupper(md5($stringSignTemp));
+    }
     /**
      * 签约申请扣款
      * @param $openid