У меня есть следующий код, чтобы сделать телеграм бот:
<?php
define('API_KEY','*****');
function makereq($method,$datas=[]){
$url = "https://api.telegram.org/bot".API_KEY."/".$method;
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($datas));
$res = curl_exec($ch);
if(curl_error($ch)){
var_dump(curl_error($ch));
}else{
return json_decode($res);
}
}
$result=json_decode($message,true);
//##############=--API_REQ
function apiRequest($method, $parameters) {
if (!is_string($method)) {
error_log("Method name must be a string\n");
return false;
}
if (!$parameters) {
$parameters = array();
} else if (!is_array($parameters)) {
error_log("Parameters must be an array\n");
return false;
}
foreach ($parameters as $key => &$val) {
// encoding to JSON array parameters, for example reply_markup
if (!is_numeric($val) && !is_string($val)) {
$val = json_encode($val);
}
}
$url = "https://api.telegram.org/bot".API_KEY."/".$method.'?'.http_build_query($parameters);
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($handle, CURLOPT_TIMEOUT, 60);
return exec_curl_request($handle);
}
//----######------
//---------
$update = json_decode(file_get_contents('php://input'));
var_dump($update);
$messages = $update->message;
//=========
$chat_id = $messages->chat->id;
$message_id = $update->callback_query->message->message_id;
$from_id = $messages->from->id;
$name = $messages->from->first_name;
$username = $messages->from->username;
$t = isset($messages->text)?$messages->text:'';
$reply = $messages->reply_to_message->forward_from->id;
$sticker = $messages->sticker;
$text = $messages->text;
$data = $update->callback_query->data;
$forward = $messages->forward_from;
$location = $messages->location->longitude;
$contact = $messages->contact->phone_number;
$admin = 88120404;
//-------
function SendMessage($chat_id, $TextMsg)
{
makereq('sendMessage',[
'chat_id'=>$chat_id,
'text'=>$TextMsg,
'parse_mode'=>"MarkDown"]);
}
function SendContact($chat_id, $contactMsg)
{
makereq('sendContact',[
'chat_id'=>$chat_id,
'phone_number'=>$contact,
'first_name'=>$name
]);
}
function SendSticker($chat_id, $sticker_ID)
{
makereq('sendSticker',[
'chat_id'=>$chat_id,
'sticker'=>$sticker_ID
]);
}
function bots($method,$datas=[]){
$url = "https://api.telegram.org/bot".API_KEY."/".$method;
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$datas);
$res = curl_exec($ch);
if(curl_error($ch)){
var_dump(curl_error($ch));
}else{
return json_decode($res);
}
}
function typing($chat_id)
{
file_get_contents(API_TELEGRAM.'sendChatAction?chat_id='.$chat_id.'&action=typing');
}
function Forward($KojaShe,$AzKoja,$KodomMSG)
{
makereq('ForwardMessage',[
'chat_id'=>$KojaShe,
'from_chat_id'=>$AzKoja,
'message_id'=>$KodomMSG
]);
}
function save($filename,$TXTdata)
{
$myfile = fopen($filename, "w") or die("Unable to open file!");
fwrite($myfile, "$TXTdata");
fclose($myfile);
}
//==========
if($t == "test1"){
var_dump(makereq('sendMessage',[
'chat_id'=>$chat_id,
'text'=>"Okay Share Your Number, Location And Your Zip Code",
'parse_mode'=>'MarkDown',
'reply_markup'=>json_encode([
'keyboard'=>[
[
['text'=>"Zip Code"],['text'=>"Address",'request_location'=>true], ['text'=>"Phone Number",'request_contact'=>true]
],
[
['text'=>"Done!"]
],
],
'resize_keyboard'=>true
])
]));
}
if($t == "Done!"){
var_dump(makereq('sendMessage',[
'chat_id'=>$Admin,
'text'=>"Hey some one just submit in our bot:
name : $name
id : @$username
phone number : $contact
address : $location
zip code :
",
]));
}
?>
Он отлично работает и получает данные от пользователей и показывает имя, идентификатор, но не показывает номер телефона пользователя, адрес …
Я думаю, мой код в порядке (основываться на этой документации), Я просто не знаю, почему он не работает и не показывает номер телефона и адрес.
Если кто-нибудь знает, где моя проблема, помогите мне решить ее, спасибо. Извините за плохой английский.
Вы не управляете обновлением контактов для общего доступа.
когда пользователь делится своим контактом, это похоже на очередное обновление, которое необходимо обработать. например, вам нужно добавить это if заявление в ваш код:
if(isset($contact)){
SendContact($chat_id, $contact, $name);
}
Также вам нужно передать переменные «$ contact» и «$ name» в функцию «sendContact»; поскольку эти переменные являются глобальными (вы определили их вне функции), они могут быть доступны только вне функции.
function SendContact($chat_id, $contact, $name)
{
makereq('sendContact', [
'chat_id' => $chat_id,
'phone_number' => $contact,
'first_name' => $name
]);
}
то же самое для совместного использования местоположения.
Других решений пока нет …