php实现电子签章
PHP实现电子签章的基本方法
电子签章在PHP中通常涉及数字签名、图像处理和PDF操作。以下是几种常见的实现方式:
使用TCPDF库生成带签章的PDF
TCPDF是一个流行的PHP库,可用于生成PDF文档并添加电子签章:
require_once('tcpdf/tcpdf.php');
$pdf = new TCPDF();
$pdf->AddPage();
$pdf->SetFont('helvetica', '', 12);
$pdf->Write(0, 'This is a signed document');
// 添加签章图像
$pdf->Image('signature.png', 15, 40, 30, 10, 'PNG');
// 添加数字签名
$pdf->setSignature('file://cert.pem', 'file://key.pem', 'password', '', 2);
$pdf->Output('signed_document.pdf', 'D');
使用PHP的OpenSSL扩展进行数字签名
对文档内容进行哈希并签名:
$data = "Document content to be signed";
$private_key = openssl_pkey_get_private("file://path/to/private.key", "password");
openssl_sign($data, $signature, $private_key, OPENSSL_ALGO_SHA256);
// 验证签名
$public_key = openssl_pkey_get_public("file://path/to/public.pem");
$valid = openssl_verify($data, $signature, $public_key, OPENSSL_ALGO_SHA256);
使用第三方API服务
许多电子签名服务提供API接口:
$api_url = "https://api.e-sign.com/sign";
$api_key = "your_api_key";
$data = [
'document' => base64_encode(file_get_contents('document.pdf')),
'signers' => [
['email' => 'signer@example.com', 'name' => 'John Doe']
]
];
$options = [
'http' => [
'header' => "Content-type: application/json\r\nAuthorization: Bearer $api_key",
'method' => 'POST',
'content' => json_encode($data)
]
];
$context = stream_context_create($options);
$result = file_get_contents($api_url, false, $context);
实现可视化电子签章
结合Canvas和PHP保存签名图像:
前端HTML/JavaScript:
<canvas id="signature-pad" width="400" height="200"></canvas>
<button id="save">Save Signature</button>
<script>
const canvas = document.getElementById('signature-pad');
const signaturePad = new SignaturePad(canvas);
document.getElementById('save').addEventListener('click', function() {
const dataURL = signaturePad.toDataURL();
// 发送到服务器
});
</script>
后端PHP处理:
$imageData = $_POST['signature'];
$imageData = str_replace('data:image/png;base64,', '', $imageData);
$imageData = base64_decode($imageData);
file_put_contents('signatures/signature_'.time().'.png', $imageData);
合规性注意事项
- 遵循相关电子签名法律法规(如eIDAS、ESIGN Act等)
- 使用符合标准的加密算法(如RSA 2048位或ECC)
- 存储完整的审计日志
- 考虑时间戳服务确保签名时间可信
- 实现证书吊销检查功能
以上方法可根据具体需求组合使用,完整的电子签章系统通常需要结合前端交互、后端处理和合规性验证。对于关键业务场景,建议使用专业电子签名服务提供商(如DocuSign、Adobe Sign等)的API解决方案。






