If you are using or would like to use TwitterOAuth v0.9+ this should be fairly easy.
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessSecret);
$data = [
'event' => [
'type' => 'message_create',
'message_create' => [
'target' => [
'recipient_id' => $userId
],
'message_data' => [
'text' => 'Hello World!'
]
]
]
];
$connection->post('direct_messages/events/new', $data, true);