config = $data; } /** * 请求签名算法 * @param array $data 待签名的数据 * @date 2022-10-20 */ public function getSign($data = []) { $value_list = []; // 处理待签名数据 foreach ($data as $k => $v) { // other_settle_params, sign, app_id , thirdparty_id 字段用于标识身份字段,不参与签名 if ($k == "other_settle_params" || $k == "app_id" || $k == "sign" || $k == "thirdparty_id") { continue; } // 去除value前后空格 $value = trim(strval($v)); // 空值不参与签名 if ($value == "" || $value == "null") { continue; } array_push($value_list, $value); } // 拼接支付SALT $salt = $this->config['salt']; array_push($value_list, $salt); // 把每一项作为字符串来处理 升序排序 sort($value_list, 2); // 使用&符号链接 $str = implode('&', $value_list); // 使用 md5 算法对该字符串计算摘要 return md5($str); } /** * 回调签名算法 * @param array $data 待验签的数据 * @date 2022-10-20 */ public function checkSign($data){ $msg_signature = $data['msg_signature']; unset($data['msg_signature']); unset($data['type']); $value_list = []; // 处理待验签数据 foreach ($data as $k => $v) { // msg_signature, type字段,不参与签名 if ($k == "msg_signature" || $k == "type") { continue; } // 去除value前后空格 $value = trim(strval($v)); // 空值不参与签名 if ($value == "" || $value == "null") { continue; } array_push($value_list, $value); } $token = $this->config['token']; array_push($value_list,$token); // 把每一项作为字符串来处理 升序排序 sort($value_list, 2); // 拼接为字符串 $str = implode('', $value_list); // 使用 md5 算法对该字符串计算摘要 $sign = sha1($str); return $sign === $msg_signature; } }