ฉันกำลังทำงานกับคำขอ cURL เมื่อผู้ใช้ส่งแบบฟอร์มที่มีอยู่เพื่อส่งข้อมูลบางอย่างไปยังบริการภายนอก
ฉันได้เพิ่มฟังก์ชันนี้ด้วยบรรทัดนี้:
$form['actions'][$action]['#submit'][] = 'my_module_push_data';
และคำขอ cURL ของฉัน:
$ch = curl_init();
// รับโทเค็นการเข้าถึงที่นี่
curl_setopt($ch, CURLOPT_URL, 'https://resturl.com&id=' . $id . '&secret=' . $secret);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, จริง);
// จากนั้นส่งข้อมูล
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://resturl.com/submit.json?access_token=' . $result['access_token']);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($formData));
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, จริง);
$server_output = curl_exec($ch); // <--- บรรทัดนี้ทำให้เกิดปัญหา
$server_output = json_decode($server_output);
ด้วยรหัสนี้ ฉันได้รับข้อผิดพลาดนี้:
Uncaught ข้อยกเว้น PHP LogicException: "ไม่สามารถตั้งค่าข้อผิดพลาดของแบบฟอร์มได้หลังจากการตรวจสอบความถูกต้องของแบบฟอร์มเสร็จสิ้น" ที่ /mnt/gfs/.../.../docroot/core/lib/Drupal/Core/Form/FormState.php
ฉันไปทีละบรรทัดผ่านคำขอ cURL นี้และบรรทัดที่ฉันทำเครื่องหมาย (วินาที curl_exec()
ทำให้เกิดข้อผิดพลาดนี้ ถ้าฉันละเว้นบรรทัดนั้นก็ใช้ได้ผลดี ครั้งแรก curl_exec()
ใช้งานได้ดีและฉันตรวจสอบแล้วว่าส่งคืนโทเค็นการเข้าถึง
ฉันทำอะไรผิดที่นี่? ขอขอบคุณ!
แก้ไข: ฟังก์ชั่นเต็มรูปแบบ (ทำให้รายละเอียดบางส่วนสับสน)
/**
* ตัวจัดการการส่งแบบกำหนดเองเพื่อส่งข้อมูลไปยังบริการ
*/
ฟังก์ชัน my_module_service_signup (อาร์เรย์ $form, \Drupal\Core\Form\FormStateInterface $form_state) {
$vals = $form_state->getValues();
$formData = [];
$myVals = [];
$clientId = การตั้งค่า::get('service_api_id');
$clientSecret = การตั้งค่า::get('service_api_secret');
$accountId = 'abc123456';
$formData['unique_id'] = '1234';
$myVals = [
'company' => $vals['field_company'][0]['value'],
'firstName' => $vals['field_first_name'][0]['value'],
'lastName' => $vals['field_last_name'][0]['value'],
...
];
$formData['input'][0]['fields'] = $myVals;
พยายาม {
$getClient = \Drupal::httpClient();
$request = $getClient->post('https://' . $accountId . '.resturl.com/get/token?my_id=' . $clientId . '&my_secret=' . $clientSecret);
$response = json_decode($request->getBody());
} จับ (RequestException $e) {
// ไม่พบ LogicException ที่นี่
}
}