|
@@ -605,7 +605,7 @@ class WechatService
|
|
|
|
|
|
|
|
// 使用动态时间戳
|
|
// 使用动态时间戳
|
|
|
$current_timestamp = time();
|
|
$current_timestamp = time();
|
|
|
- $contract_code = preg_replace("/[^0-9]/", "", $contract_code);
|
|
|
|
|
|
|
+// $contract_code = preg_replace("/[^0-9]/", "", $contract_code);
|
|
|
$params = [
|
|
$params = [
|
|
|
'appid' => 'wx5681205d1ef4d9d3',
|
|
'appid' => 'wx5681205d1ef4d9d3',
|
|
|
'mch_id' => $mch_id,
|
|
'mch_id' => $mch_id,
|
|
@@ -613,7 +613,7 @@ class WechatService
|
|
|
'contract_code' => $contract_code,
|
|
'contract_code' => $contract_code,
|
|
|
'request_serial' => $current_timestamp, // 使用时间戳作为序列号
|
|
'request_serial' => $current_timestamp, // 使用时间戳作为序列号
|
|
|
'contract_display_account' => '昔拉',
|
|
'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, // 动态时间戳
|
|
'timestamp' => $current_timestamp, // 动态时间戳
|
|
|
'version' => '1.0',
|
|
'version' => '1.0',
|
|
|
];
|
|
];
|
|
@@ -636,7 +636,8 @@ class WechatService
|
|
|
$stringSignTemp = $stringA . 'key=' . $key;
|
|
$stringSignTemp = $stringA . 'key=' . $key;
|
|
|
|
|
|
|
|
// 关键步骤5:正确生成HMAC-SHA256签名
|
|
// 关键步骤5:正确生成HMAC-SHA256签名
|
|
|
- $sign = strtoupper(hash_hmac('sha256', $stringSignTemp, '')); // 注意:第三个参数为空字符串
|
|
|
|
|
|
|
+// $sign = strtoupper(hash_hmac('sha256', $stringSignTemp, '')); // 注意:第三个参数为空字符串
|
|
|
|
|
+ $sign = self::generateWechatMD5Sign($params, $key);
|
|
|
$params['sign'] = $sign;
|
|
$params['sign'] = $sign;
|
|
|
$params['notify_url'] = urlencode($params['notify_url']);
|
|
$params['notify_url'] = urlencode($params['notify_url']);
|
|
|
// $params['contract_display_account'] = urlencode($params['contract_display_account']);
|
|
// $params['contract_display_account'] = urlencode($params['contract_display_account']);
|
|
@@ -687,11 +688,11 @@ class WechatService
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
curl_close($ch);
|
|
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();
|
|
// $request_serial = time();
|
|
|
// $timestamp = time();
|
|
// $timestamp = time();
|
|
@@ -705,6 +706,27 @@ class WechatService
|
|
|
@file_put_contents("quanju3.txt", json_encode($response) . "-签约返回结果测试\r\n", 8);
|
|
@file_put_contents("quanju3.txt", json_encode($response) . "-签约返回结果测试\r\n", 8);
|
|
|
return $response;
|
|
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
|
|
* @param $openid
|