/** * Create document from template - CORRECT FORMAT */ public function create_document_from_template($signer_data, $template_values = array()) { error_log('=== DIGIO: Create Document from Template ==='); error_log('API URL: ' . $this->api_url); error_log('Template ID: ' . $this->template_key); error_log('Signer: ' . print_r($signer_data, true)); error_log('Template Values: ' . print_r($template_values, true)); // CORRECT endpoint for template-based signing $endpoint = $this->api_url . '/client/document/template'; // CORRECT payload structure based on Digio documentation $payload = array( 'template_id' => $this->template_key, // NOT 'templates' array! 'signers' => array( array( 'identifier' => $signer_data['email'], 'name' => $signer_data['name'], 'signer_tag' => 'SIGNER 1', // Must match tag in your template 'auth_type' => 'aadhaar_otp' // Aadhaar OTP authentication ) ), 'document_data' => $template_values, // NOT 'template_values'! 'generate_document' => true, // Generate document from template 'notification_enabled' => true, // Send email/SMS to signer 'expire_in_days' => 7 ); $json_payload = json_encode($payload); error_log('Request Payload: ' . $json_payload); // Make API request $response = wp_remote_post($endpoint, array( 'headers' => array( 'Authorization' => 'Basic ' . base64_encode($this->client_id . ':' . $this->client_secret), 'Content-Type' => 'application/json', 'Accept' => 'application/json' ), 'body' => $json_payload, 'timeout' => 120, 'sslverify' => true, 'httpversion' => '1.1' )); if (is_wp_error($response)) { error_log('CONNECTION ERROR: ' . $response->get_error_message()); return array( 'success' => false, 'message' => 'Connection error: ' . $response->get_error_message() ); } $status_code = wp_remote_retrieve_response_code($response); $response_body = wp_remote_retrieve_body($response); $response_data = json_decode($response_body, true); error_log('Response Status: ' . $status_code); error_log('Response Body: ' . $response_body); // Handle errors if ($status_code !== 200 && $status_code !== 201) { $error_msg = 'API Error'; if (isset($response_data['message'])) { $error_msg = $response_data['message']; } elseif (isset($response_data['error'])) { $error_msg = is_string($response_data['error']) ? $response_data['error'] : json_encode($response_data['error']); } if (isset($response_data['details'])) { $error_msg .= ' (Details: ' . $response_data['details'] . ')'; } error_log('API ERROR: ' . $error_msg); return array( 'success' => false, 'message' => $error_msg ); } // Extract document ID and sign link $document_id = $response_data['id'] ?? $response_data['document_id'] ?? ''; $sign_link = ''; // Check multiple possible locations for sign link if (isset($response_data['signing_parties']) && is_array($response_data['signing_parties'])) { foreach ($response_data['signing_parties'] as $party) { if (isset($party['sign_link'])) { $sign_link = $party['sign_link']; break; } } } elseif (isset($response_data['sign_link'])) { $sign_link = $response_data['sign_link']; } if (empty($document_id)) { error_log('ERROR: No document ID in response'); return array( 'success' => false, 'message' => 'No document ID returned' ); } error_log('SUCCESS - Document ID: ' . $document_id); error_log('SUCCESS - Sign Link: ' . $sign_link); return array( 'success' => true, 'document_id' => $document_id, 'sign_link' => $sign_link, 'data' => $response_data ); }