$merchantId, 'POSID' => $posId, 'BRANCHID' => $branchId, 'ORDERID' => $orderId, 'PAYMENT' => $payment, 'CURCODE' => $curCode, 'TXCODE' => $txCode, 'REMARK1' => '', 'REMARK2' => '', 'TIMEOUT' => $timeout ]; // 生成签名 $mac = self::signPaymentString($params, $privateKey); // 构建完整的支付字符串(不包含私钥) $fields = []; foreach ($params as $key => $value) { $fields[] = $key . '=' . $value; } $paymentString = implode('&', $fields); return [ 'payment_string' => $paymentString, 'mac' => $mac, 'params' => $params ]; } /** * 验证支付字符串签名 * * @param array $params 支付参数 * @param string $mac 待验证的MAC值 * @param string $privateKey 商户私钥 * @return bool 签名是否有效 */ public static function verifyPaymentSignature($params, $mac, $privateKey) { $expectedMac = self::signPaymentString($params, $privateKey); return $expectedMac === strtolower($mac); } /** * 生成交易流水号 * 格式:YYYYMMDDHHMMSS + 6位随机数 * * @return string 20位交易流水号 */ public static function generateTransactionSeq() { $timestamp = date('YmdHis'); $random = str_pad(mt_rand(0, 999999), 6, '0', STR_PAD_LEFT); return $timestamp . $random; } /** * 生成订单号 * 格式:前缀 + YYYYMMDDHHMMSS + 4位随机数 * * @param string $prefix 订单号前缀,默认'CCB' * @return string 订单号 */ public static function generateOrderId($prefix = 'CCB') { $timestamp = date('YmdHis'); $random = str_pad(mt_rand(0, 9999), 4, '0', STR_PAD_LEFT); return $prefix . $timestamp . $random; } }