Wysyłanie wiadomości przez WhatsApp

112

Odkąd znalazłem kilka starszych postów, które mówią, że WhatsApp tego nie obsługuje, zastanawiałem się, czy coś się zmieniło i czy istnieje sposób na otwarcie czatu WhatsApp z numerem, który wysyłam przez intencję?

Diego
źródło
czy próbowałeś udostępniać dostawcę akcji?
Basim Sherif,
Brzmi interesująco, ale jak by to działało. Czy mogę udostępnić ciąg (numer telefonu) i czy otworzy on WhatsApp (lub selektor?) Czy możesz podać mały przykład?
Diego
2
chociaż w WhatsApp jest intencja ACTION_SENDTO, nie jest ona wykonywana (prawidłowo), dlatego nie można zrobić z określonym numerem telefonu [to właśnie znalazłem]
Manan Sharma
Nadal nie mogę się doczekać, aby dołączyć obraz i tekst w tym samym czasie, ale nie znalazłem szczęścia, westchnij :(
gumuruh

Odpowiedzi:

180

AKTUALIZACJA Zobacz https://faq.whatsapp.com/en/android/26000030/?category=5245251

Funkcja WhatsApp Click to Chat umożliwia rozpoczęcie czatu z kimś bez zapisywania jego numeru telefonu w książce adresowej telefonu. Jeśli znasz numer telefonu tej osoby, możesz utworzyć link, który pozwoli Ci rozpocząć z nią czat.

Użyj: https://wa.me/15551234567

Nie używaj: https://wa.me/+001-(555)1234567

Przykład: https://wa.me/15551234567?text=I 'm% 20interested% 20in% 20your% 20car% 20for% 20sale

Oryginalna odpowiedź Oto rozwiązanie

public void onClickWhatsApp(View view) {

    PackageManager pm=getPackageManager();
    try {

        Intent waIntent = new Intent(Intent.ACTION_SEND);
        waIntent.setType("text/plain");
        String text = "YOUR TEXT HERE";

        PackageInfo info=pm.getPackageInfo("com.whatsapp", PackageManager.GET_META_DATA);
        //Check if package exists or not. If not then code 
        //in catch block will be called
        waIntent.setPackage("com.whatsapp");

        waIntent.putExtra(Intent.EXTRA_TEXT, text);
        startActivity(Intent.createChooser(waIntent, "Share with"));

   } catch (NameNotFoundException e) {
        Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT)
                .show();
   }  

}

Zobacz też http://www.whatsapp.com/faq/en/android/28000012

Manan Sharma
źródło
Jak zintegrować się z komunikatorami? aby użytkownik mógł wybrać WhatsApp lub wiadomości
Srikanth Pai
33
jeśli mamy już dane kontaktowe, czy możliwe jest dodanie danych kontaktowych i wysłanie wiadomości bez konieczności dotykania kontaktu, aby wybrać i kliknąć OK, aby wysłać?
user1492955
4
Źródło @MananMerevikSharma nie kłamie ( android.googlesource.com/platform/frameworks/base/+/refs/heads/ ... ). Dodatkowo podstawowa zasada Javy: obiekt żyje, dopóki nie ma do niego żadnych odniesień.
JRomero
1
@MananMerevikSharma -1. Nie zmienia się w zerowy wskaźnik. Innej części nigdy nie można osiągnąć. Gdy WhatsApp nie jest zainstalowany, intencja jest nadal wysyłana, ale otwiera się okno dialogowe z informacją, że nie ma pasującej aplikacji. Oznacza to, że nie dajesz możliwości sprawdzenia, czy WhatsApp jest zainstalowany, czy nie.
0101100101
64

Za pomocą tego kodu możesz otworzyć czat WhatsApp z podanym numerem.

void openWhatsappContact(String number) {
    Uri uri = Uri.parse("smsto:" + number);
    Intent i = new Intent(Intent.ACTION_SENDTO, uri);
    i.setPackage("com.whatsapp");  
    startActivity(Intent.createChooser(i, ""));
}
user2957782
źródło
3
@ user2957782 Śledziłem to proszę pana, ale kiedy klikam przycisk, aby uruchomić
WhatsApp, pojawia się komunikat
@VihaanVerma czy możesz podzielić się tym, jak to działa? Zaimplementowałem ten sam kod dla WhatsApp w wersji 2.11.56021 i nic nie dostaję ...
Alamgir Mand
1
Zaznaczone, wysyła mnie do wszystkich list czatów, a nie do okna czatu określonego numeru.
Darpan
8
Działa tylko wtedy, gdy masz ten numer na liście czatu lub liście kontaktów.
Anshul Tyagi
1
zamiast startActivity(Intent.createChooser(i, ""));używać startActivity(i);do bezpośrednio otwartego czatu numerycznego. 1. Testowany na Samsung J7 prime działa. 2. numeru nie było na mojej liście kontaktów ani na liście czatu. 3. jeśli numer nie korzysta z WhatsApp, pojawi się okno dialogowe z pytaniem, czy chciałbym zaprosić ten kontakt do WhatsApp. Myślę, że to najlepsze rozwiązanie, jeśli chcesz zapewnić użytkownikom aplikacji pomoc w zakresie kontaktu z WhatsApp.
Muhammad Saqib
25

Znalazłem następujące rozwiązanie, najpierw potrzebujesz identyfikatora WhatsApp:

Zgodnie z raportami z innych wątków tutaj i na innych forach nazwa logowania, którą znalazłem, była w pewnym sensie: międzynarodowy numer kierunkowy bez zer lub + na początku + numer telefonu bez pierwszego 0 + @ s.whatsapp.net

Na przykład, jeśli mieszkasz w Holandii i masz numer telefonu 0612325032, będzie to [email protected] -> +31 dla Holandii bez 0 lub + oraz numer telefonu bez 0.

public void sendWhatsAppMessageTo(String whatsappid) {

Cursor c = getSherlockActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI,
        new String[] { ContactsContract.Contacts.Data._ID }, ContactsContract.Data.DATA1 + "=?",
        new String[] { whatsappid }, null);
c.moveToFirst();

Intent whatsapp = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.android.contacts/data/" + c.getString(0)));
c.close();

 if (whatsapp != null) {

startActivity(whatsapp);      

} else {
        Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT)
                .show();
//download for example after dialog
                Uri uri = Uri.parse("market://details?id=com.whatsapp");
                Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
    }

}
Diego
źródło
Próbuję tego kodu, ale mówi mi, że getSherlockActivity () jest niezdefiniowane. jak to naprawić ??
Eman87,
2
@ Eman87 Diego używa Action Bar Sherlock, więc metoda. Uzyskaj zakres swojej aktywności zamiast getSherlockActivity ().
Manan Sharma
4
Nie ma sensu, if (whatsapp != null)jak zrobiłaś to w 2 linijkach powyżej Intent whatsapp = new Intent(...).
Carcamano,
2
Jest to dobra opcja do bezpośredniego otwierania okna czatu, jeśli dana osoba istnieje w Kontaktach. Czy jest sposób, aby zrobić to samo dla nowego numeru, którego nie ma w naszych kontaktach?
MohammedYakub Moriswala
1
Musisz dodać <uses-permission android:name="android.permission.READ_CONTACTS" />pozwolenie wAndroidManifest.xml
Pratik Butani
16

Powinno to działać niezależnie od tego, czy Whatsapp jest zainstalowany, czy nie.

boolean isWhatsappInstalled = whatsappInstalledOrNot("com.whatsapp");
if (isWhatsappInstalled) {
    Uri uri = Uri.parse("smsto:" + "98*********7")
    Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
    sendIntent.putExtra(Intent.EXTRA_TEXT, "Hai Good Morning");
    sendIntent.setPackage("com.whatsapp");
    startActivity(sendIntent);
} else {
    Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT).show();
    Uri uri = Uri.parse("market://details?id=com.whatsapp");
    Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(goToMarket);

}

private boolean whatsappInstalledOrNot(String uri) {
    PackageManager pm = getPackageManager();
    boolean app_installed = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        app_installed = true;
    } catch (PackageManager.NameNotFoundException e) {
        app_installed = false;
    }
    return app_installed;
}
Satheesh
źródło
11
Wyjątek
2
Nie znaleziono działania obsługującego zamiar {act = android.intent.action.SENDTO typ = text / plain pkg = com.whatsapp (has extras)}
Rajesh
2
Musisz usunąć tę linię, aby pracować z tobą sendIntent.setType ("text / plain");
MSaudi
2
usunięcie sendIntent.setType ("text / plain") zapobiega wyrzucaniu wyjątku Activity Not Found, ale teraz tekst nie jest dodawany jako wiadomość
Rik van Velzen
wygląda na to, że nie jest to już możliwe, działanie, które otrzymuje intencję, ma odniesienie do „sms_body”, ale nie mogę tego zrobić
sherpya
15

Proste rozwiązanie, spróbuj tego.

String phoneNumberWithCountryCode = "+62820000000";
String message = "Hallo";

startActivity(
    new Intent(Intent.ACTION_VIEW,
        Uri.parse(
            String.format("https://api.whatsapp.com/send?phone=%s&text=%s", phoneNumberWithCountryCode, message)
        )
    )
);
Latief Anwar
źródło
10

Testowane na Marshmallow S5 i działa!

    Uri uri = Uri.parse("smsto:" + "phone number with country code");
    Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
    sendIntent.setPackage("com.whatsapp");
    startActivity(sendIntent); 

Spowoduje to otwarcie bezpośredniego czatu z osobą, jeśli WhatsApp nie zostanie zainstalowany, spowoduje to wyjątek , jeśli numer telefonu nie jest znany WhatsApp, zaoferuje wysłanie zaproszenia przez sms lub prostą wiadomość sms

Ilya Gazman
źródło
a co z „przyciskiem wyślij”? Czy możemy to również zrobić programowo ...?
gumuruh
3

Poniższy kod jest używany przez aplikację Google Now i NIE będzie działał z żadną inną aplikacją.

Piszę ten post, ponieważ denerwuję się, że WhatsApp nie pozwala innym programistom na wysyłanie wiadomości bezpośrednio poza Google.

I chcę, żeby inni niezależni programiści wiedzieli, że tego rodzaju współpraca ma miejsce, podczas gdy Google ciągle mówi o „otwartym dla każdego”, a WhatsApp mówi, że nie chcą zapewniać dostępu do programistów.

Niedawno WhatsApp dodał intencję specjalnie dla Google Now, która powinna wyglądać następująco:

Intent intent = new Intent("com.google.android.voicesearch.SEND_MESSAGE_TO_CONTACTS");
intent.setPackage("com.whatsapp");
intent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.VoiceMessagingActivity"));

intent.putExtra("com.google.android.voicesearch.extra.RECIPIENT_CONTACT_CHAT_ID", number);
intent.putExtra("android.intent.extra.TEXT", text);
intent.putExtra("search_action_token", ?????);

Mogłem również dowiedzieć się, że „search_action_token” to PendingIntent, który zawiera obiekt IBinder, który jest wysyłany z powrotem do Google App i sprawdzany, czy został utworzony przez Google Now.

W przeciwnym razie WhatsApp nie przyjmie wiadomości.

czarny Jastrząb
źródło
Ciekawy! ale czy możesz wyjaśnić więcej na temat parametru „search_action_token”, jak możemy go uzyskać i wdrożyć.
Bilal Mustafa
APK com.google.android.googlequicksearchbox Klasa com.google.android.search.verification.api.SearchActionVerificationService Metoda createGoogleVerificationIntent
black-hawk
3

Obecnie jedyne oficjalne API, o które możesz GETpoprosić:

https://api.whatsapp.com/send?phone=919773207706&text=Hello

W każdym razie WhatsApp ma już tajny program API

Zameer
źródło
1
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie. - Z recenzji
Kumar Saurabh
1
@KumarSaurabh To nie jest link, to żądanie GET
Zameer
3

użyj tego pojedynczego kodu używanego do wysyłania wiadomości przez WhatsApp

//NOTE : please use with country code first 2digits without plus signed
try {
      String mobile = "911234567890";
      String msg = "Its Working";
      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://api.whatsapp.com/send?phone=" + mobile + "&text=" + msg)));
      }catch (Exception e){
        //whatsapp app not install
     }
milan pithadia
źródło
2

To działa dla mnie:

PackageManager pm = context.getPackageManager();
try {
    pm.getPackageInfo("com.whatsapp", PackageManager.GET_ACTIVITIES);
    Intent intent = new Intent();
            intent.setComponent(new ComponentName(packageName,
                    ri.activityInfo.name));
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_TEXT, element);

} catch (NameNotFoundException e) {
    ToastHelper.MakeShortText("Whatsapp have not been installed.");
}
Cabezas
źródło
2

Oto, co zadziałało dla mnie:

        Uri uri = Uri.parse("https://api.whatsapp.com/send?phone=" + "<number>" + "&text=" + "Hello WhatsApp!!");
        Intent sendIntent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(sendIntent);
maximus
źródło
2

Użyj bezpośredniego adresu URL WhatsApp

String url = "https://api.whatsapp.com/send?phone="+number;
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Pierre Alexandre
źródło
1

jest to bardzo długie, ale gburowate działanie. miłego kodu :)

 //method used to show IMs
private void show_custom_chooser(String value) {
    List<ResolveInfo> list = null;
    final Intent email = new Intent(Intent.ACTION_SEND);
    email.setData(Uri.parse("sms:"));
    email.putExtra(Intent.EXTRA_TEXT, "" + value);
    email.setType("text/plain"); // vnd.android-dir/mms-sms

    WindowManager.LayoutParams WMLP = dialogCustomChooser.getWindow()
            .getAttributes();
    WMLP.gravity = Gravity.CENTER;
    dialogCustomChooser.getWindow().setAttributes(WMLP);
    dialogCustomChooser.getWindow().setBackgroundDrawable(
            new ColorDrawable(android.graphics.Color.TRANSPARENT));
    dialogCustomChooser.setCanceledOnTouchOutside(true);
    dialogCustomChooser.setContentView(R.layout.about_dialog);
    dialogCustomChooser.setCancelable(true);
    ListView lvOfIms = (ListView) dialogCustomChooser
            .findViewById(R.id.listView1);
    PackageManager pm = getPackageManager();
    List<ResolveInfo> launchables = pm.queryIntentActivities(email, 0);
    // ////////////new
    list = new ArrayList<ResolveInfo>();
    for (int i = 0; i < launchables.size(); i++) {
        String string = launchables.get(i).toString();
        Log.d("heh", string);
//check only messangers
        if (string.contains("whatsapp")) {
            list.add(launchables.get(i));
        }
    }
    Collections.sort(list, new ResolveInfo.DisplayNameComparator(pm));
    int size = launchables.size();
    adapter = new AppAdapter(pm, list, MainActivity.this);
    lvOfIms.setAdapter(adapter);
    lvOfIms.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1,
                int position, long arg3) {
            ResolveInfo launchable = adapter.getItem(position);
            ActivityInfo activity = launchable.activityInfo;
            ComponentName name = new ComponentName(
                    activity.applicationInfo.packageName, activity.name);
            email.addCategory(Intent.CATEGORY_LAUNCHER);
            email.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
            email.setComponent(name);
            startActivity(email);
            dialogCustomChooser.dismiss();
        }
    });
    dialogCustomChooser.show();

}
John Smith
źródło
1

Jestem tu naprawdę spóźniony, ale wierzę, że obecnie mamy krótsze i lepsze rozwiązania do wysyłania wiadomości przez WhatsApp.

Możesz skorzystać z następujących opcji, aby wywołać selektor systemowy, a następnie wybrać aplikację, której będziesz używać do udostępniania, co chcesz.

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);

Jeśli naprawdę potrzebujesz wysłać przez WhatsApp, wszystko, co musisz zrobić, to następujące czynności (pominiesz selektor systemu)

 Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
    sendIntent.setType("text/plain");
    // Put this line here
    sendIntent.setPackage("com.whatsapp");
    //
    startActivity(sendIntent);

Jeśli potrzebujesz więcej informacji, możesz je znaleźć tutaj: Często zadawane pytania dotyczące WhatsApp

Będzie
źródło
1

Jak mówi dokumentacja , możesz po prostu użyć adresu URL, takiego jak:

https://wa.me/15551234567

Gdzie ostatni segment to liczba w formacie E164

Uri uri = Uri.parse("https://wa.me/15551234567");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
GVillani82
źródło
1
private fun sendWhatsappMessage(phoneNumber:String, text:String) {        
  val url = if (Intent().setPackage("com.whatsapp").resolveActivity(packageManager) != null) {
        "whatsapp://send?text=Hello&phone=$phoneNumber"
    } else {
        "https://api.whatsapp.com/send?phone=$phoneNumber&text=$text"
    }

    val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
    startActivity(browserIntent)
}

To znacznie łatwiejszy sposób na osiągnięcie tego. Ten kod sprawdza, czy na urządzeniu jest zainstalowana aplikacja WhatsApp. Jeśli jest zainstalowany, omija selektor systemowy i przechodzi do kontaktu w WhatsApp i wstępnie wpisuje tekst na czacie. Jeśli nie jest zainstalowany, otwiera łącze WhatsApp w przeglądarce internetowej.

Adekola Akano
źródło
1

Będziesz chciał użyć adresu URL w następującym formacie ...

https://api.whatsapp.com/send?text=text

Następnie możesz poprosić o wysłanie dowolnego tekstu, który chcesz. Masz również możliwość określenia numeru telefonu ...

https://api.whatsapp.com/send?text=text&phone=1234

Czego nie można zrobić , to użyć następujących czynności:

https://wa.me/send?text=text

Dostaniesz...

Nie mogliśmy znaleźć strony, której szukasz

wa.meJednak zadziała, jeśli podasz zarówno numer telefonu, jak i tekst. Ale w większości, jeśli próbujesz utworzyć łącze do udostępniania, naprawdę nie chcesz podawać numeru telefonu, ponieważ chcesz, aby użytkownik kogoś wybrał. W takim przypadku, jeśli nie podasz numeru i nie użyjesz go wa.mejako adresu URL, wszystkie linki do udostępniania zakończą się niepowodzeniem. Proszę użyć app.whatsapp.com.

HoldOffHunger
źródło
0

Sprawdź ten kod,

    public void share(String subject,String text) {
     final Intent intent = new Intent(Intent.ACTION_SEND);

String score=1000;
     intent.setType("text/plain");
     intent.putExtra(Intent.EXTRA_SUBJECT, score);
     intent.putExtra(Intent.EXTRA_TEXT, text);

     startActivity(Intent.createChooser(intent, getString(R.string.share)));
}
Basim Sherif
źródło
0

To działa dla mnie:

public static void shareWhatsApp(Activity appActivity, String texto) {

    Intent sendIntent = new Intent(Intent.ACTION_SEND);     
    sendIntent.setType("text/plain");
    sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, texto);

    PackageManager pm = appActivity.getApplicationContext().getPackageManager();
    final List<ResolveInfo> matches = pm.queryIntentActivities(sendIntent, 0);
    boolean temWhatsApp = false;
    for (final ResolveInfo info : matches) {
      if (info.activityInfo.packageName.startsWith("com.whatsapp"))  {
          final ComponentName name = new ComponentName(info.activityInfo.applicationInfo.packageName, info.activityInfo.name);
          sendIntent.addCategory(Intent.CATEGORY_LAUNCHER);
          sendIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_TASK);
          sendIntent.setComponent(name);
          temWhatsApp = true;
          break;
      }
    }               

    if(temWhatsApp) {
        //abre whatsapp
        appActivity.startActivity(sendIntent);
    } else {
        //alerta - você deve ter o whatsapp instalado
        Toast.makeText(appActivity, appActivity.getString(R.string.share_whatsapp), Toast.LENGTH_SHORT).show();
    }
}
user3124158
źródło
0

zdobądź numer kontaktowy, do którego chcesz wysłać wiadomość i utwórz uri dla WhatsApp, tutaj c to Kursor zwracający wybrany kontakt.

Uri.parse("content://com.android.contacts/data/" + c.getString(0)));
i.setType("text/plain");
i.setPackage("com.whatsapp");           // so that only Whatsapp reacts and not the chooser
i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
i.putExtra(Intent.EXTRA_TEXT, "I'm the body.");
startActivity(i);
Kiran Maniya
źródło
0

Z dokumentacji

Aby utworzyć własny link z wstępnie wypełnioną wiadomością, która automatycznie pojawi się w polu tekstowym czatu, użyj https://wa.me/whatsappphonenumber/?text=urlencodedtext gdzie whatsappphonenumber to pełny numer telefonu w formacie międzynarodowym i adres URL -encodedtext to wstępnie wypełniona wiadomość zakodowana w postaci adresu URL.

Przykład: https://wa.me/15551234567?text=I 'm% 20interested% 20in% 20your% 20car% 20for% 20sale

Przykład kodu

val phoneNumber = "13492838472"
    val text = "Hey, you know... I love StackOverflow :)"
    val uri = Uri.parse("https://wa.me/$phoneNumber/?text=$text")
    val sendIntent = Intent(Intent.ACTION_VIEW, uri)
    startActivity(sendIntent)
Gastón Saillén
źródło
-1

Poniższego interfejsu API można używać w języku c ++, jak pokazano w moim artykule .

Musisz zdefiniować kilka stałych:

//
#define    GroupAdmin                <YOUR GROUP ADMIN MOBILE PHONE>
#define GroupName                <YOUR GROUP NAME>
#define CLIENT_ID                <YOUR CLIENT ID>
#define CLIENT_SECRET            <YOUR CLIENT SECRET>

#define GROUP_API_SERVER        L"api.whatsmate.net"
#define GROUP_API_PATH          L"/v3/whatsapp/group/text/message/12"
#define IMAGE_SINGLE_API_URL    L"http://api.whatsmate.net/v3/whatsapp/group/image/message/12"

//

Następnie łączysz się z punktem końcowym interfejsu API.

hOpenHandle = InternetOpen(_T("HTTP"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hOpenHandle == NULL)
{
    return false;
}

hConnectHandle = InternetConnect(hOpenHandle,
    GROUP_API_SERVER,
    INTERNET_DEFAULT_HTTP_PORT,
    NULL, NULL, INTERNET_SERVICE_HTTP,
    0, 1);

if (hConnectHandle == NULL)
{
    InternetCloseHandle(hOpenHandle);
    return false;
}

Następnie wyślij nagłówek i treść i poczekaj na wynik, który musi być „OK”.

Krok 1 - otwórz żądanie HTTP:

const wchar_t *AcceptTypes[] = { _T("application/json"),NULL };
HINTERNET hRequest = HttpOpenRequest(hConnectHandle, _T("POST"), GROUP_API_PATH, NULL, NULL, AcceptTypes, 0, 0);

if (hRequest == NULL)
{
    InternetCloseHandle(hConnectHandle);
    InternetCloseHandle(hOpenHandle);
    return false;
}

Krok 2 - wyślij nagłówek:

std::wstring HeaderData;

HeaderData += _T("X-WM-CLIENT-ID: ");
HeaderData += _T(CLIENT_ID);
HeaderData += _T("\r\nX-WM-CLIENT-SECRET: ");
HeaderData += _T(CLIENT_SECRET);
HeaderData += _T("\r\n");
HttpAddRequestHeaders(hRequest, HeaderData.c_str(), HeaderData.size(), NULL);

Krok 3 - wyślij wiadomość:

std::wstring WJsonData;
WJsonData += _T("{");
WJsonData += _T("\"group_admin\":\"");
WJsonData += groupAdmin;
WJsonData += _T("\",");
WJsonData += _T("\"group_name\":\"");
WJsonData += groupName;
WJsonData += _T("\",");
WJsonData += _T("\"message\":\"");
WJsonData += message;
WJsonData += _T("\"");
WJsonData += _T("}");

const std::string JsonData(WJsonData.begin(), WJsonData.end());

bResults = HttpSendRequest(hRequest, NULL, 0, (LPVOID)(JsonData.c_str()), JsonData.size());

Teraz po prostu sprawdź wynik:

TCHAR StatusText[BUFFER_LENGTH] = { 0 };
DWORD StatusTextLen = BUFFER_LENGTH;
HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_TEXT, &StatusText, &StatusTextLen, NULL);
bResults = (StatusTextLen && wcscmp(StatusText, L"OK")==FALSE);
Michael Haephrati
źródło