{"id":371,"date":"2025-08-27T20:45:15","date_gmt":"2025-08-27T20:45:15","guid":{"rendered":"https:\/\/1v0.net\/blog\/?p=371"},"modified":"2025-08-27T20:45:16","modified_gmt":"2025-08-27T20:45:16","slug":"integrating-laravel-with-third-party-apis-mail-sms-payment","status":"publish","type":"post","link":"https:\/\/1v0.net\/blog\/integrating-laravel-with-third-party-apis-mail-sms-payment\/","title":{"rendered":"Integrating Laravel with Third-Party APIs (Mail, SMS, Payment)"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Integrating Laravel with Third-Party APIs (Mail, SMS, Payment)<\/strong><\/h2>\n\n\n\n<p>Most apps rely on third-party APIs for critical features: sending emails, delivering SMS, and processing payments. Laravel makes it easy with built-in Mail and Notification facades, and clean HTTP client integration for external services. In this guide, you\u2019ll integrate Mailgun for email, Twilio for SMS, and Stripe for payments, complete with secure validation and example UI.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1 &#8211; Mail Integration with Mailgun<\/strong><\/h2>\n\n\n\n<p>Laravel\u2019s <code>Mail<\/code> facade supports many drivers, including Mailgun. Configure credentials and send a test message.<\/p>\n\n\n<!-- DomainException(0): Unknown language: \"dotenv\" --># .env\nMAIL_MAILER=mailgun\nMAILGUN_DOMAIN=your-domain.mailgun.org\nMAILGUN_SECRET=your-mailgun-api-key\nMAIL_FROM_ADDRESS=no-reply@example.com\nMAIL_FROM_NAME=&#8221;MyApp&#8221;\n\n\n<p>These credentials authenticate Laravel against Mailgun\u2019s API. <code>MAIL_MAILER<\/code> selects the driver, and <code>MAIL_FROM_ADDRESS<\/code> defines the sender identity visible to users.<\/p>\n\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ app\/Mail\/WelcomeMail.php<\/span>\n<span class=\"hljs-keyword\">namespace<\/span> <span class=\"hljs-title\">App<\/span>\\<span class=\"hljs-title\">Mail<\/span>;\n\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Bus<\/span>\\<span class=\"hljs-title\">Queueable<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Mail<\/span>\\<span class=\"hljs-title\">Mailable<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Queue<\/span>\\<span class=\"hljs-title\">SerializesModels<\/span>;\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">WelcomeMail<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Mailable<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Queueable<\/span>, <span class=\"hljs-title\">SerializesModels<\/span>;\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">__construct<\/span><span class=\"hljs-params\">(public string $name)<\/span> <\/span>{}\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">build<\/span><span class=\"hljs-params\">()<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">$this<\/span>-&gt;subject(<span class=\"hljs-string\">'Welcome!'<\/span>)\n            -&gt;view(<span class=\"hljs-string\">'emails.welcome'<\/span>);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This mailable builds a message using a Blade view. You can pass variables like <code>$name<\/code> into the template for personalization.<\/p>\n\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ resources\/views\/emails\/welcome.blade.php<\/span>\n&lt;h1&gt;Welcome, {{ $name }}!&lt;\/h1&gt;\n&lt;p&gt;Thanks <span class=\"hljs-keyword\">for<\/span> joining our platform.&lt;\/p&gt;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The Blade template defines the HTML body. Laravel will send it via Mailgun with proper headers.<\/p>\n\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2 &#8211; SMS Integration with Twilio<\/strong><\/h2>\n\n\n\n<p>SMS notifications keep users engaged. Use Twilio\u2019s REST API to send messages.<\/p>\n\n\n<!-- DomainException(0): Unknown language: \"dotenv\" --># .env\nTWILIO_SID=your-twilio-sid\nTWILIO_TOKEN=your-twilio-auth-token\nTWILIO_FROM=+1234567890\n\n\n<p>The SID and Token authenticate your API requests. <code>TWILIO_FROM<\/code> is your Twilio number that messages are sent from.<\/p>\n\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ app\/Services\/TwilioService.php<\/span>\n<span class=\"hljs-keyword\">namespace<\/span> <span class=\"hljs-title\">App<\/span>\\<span class=\"hljs-title\">Services<\/span>;\n\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Support<\/span>\\<span class=\"hljs-title\">Facades<\/span>\\<span class=\"hljs-title\">Http<\/span>;\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TwilioService<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">sendSms<\/span><span class=\"hljs-params\">(string $to, string $message)<\/span>: <span class=\"hljs-title\">bool<\/span>\n    <\/span>{\n        $response = Http::withBasicAuth(\n            config(<span class=\"hljs-string\">'services.twilio.sid'<\/span>),\n            config(<span class=\"hljs-string\">'services.twilio.token'<\/span>)\n        )-&gt;asForm()-&gt;post(\n            <span class=\"hljs-string\">'https:\/\/api.twilio.com\/2010-04-01\/Accounts\/'<\/span>.config(<span class=\"hljs-string\">'services.twilio.sid'<\/span>).<span class=\"hljs-string\">'\/Messages.json'<\/span>,\n            &#91;\n                <span class=\"hljs-string\">'From'<\/span> =&gt; config(<span class=\"hljs-string\">'services.twilio.from'<\/span>),\n                <span class=\"hljs-string\">'To'<\/span>   =&gt; $to,\n                <span class=\"hljs-string\">'Body'<\/span> =&gt; $message,\n            ]\n        );\n\n        <span class=\"hljs-keyword\">return<\/span> $response-&gt;successful();\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This service wraps Twilio\u2019s API. It sends form-encoded requests with credentials and message details. The <code>Http<\/code> client simplifies authentication and error handling.<\/p>\n\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ config\/services.php<\/span>\n<span class=\"hljs-string\">'twilio'<\/span> =&gt; &#91;\n    <span class=\"hljs-string\">'sid'<\/span>   =&gt; env(<span class=\"hljs-string\">'TWILIO_SID'<\/span>),\n    <span class=\"hljs-string\">'token'<\/span> =&gt; env(<span class=\"hljs-string\">'TWILIO_TOKEN'<\/span>),\n    <span class=\"hljs-string\">'from'<\/span>  =&gt; env(<span class=\"hljs-string\">'TWILIO_FROM'<\/span>),\n],<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Centralize Twilio config in <code>services.php<\/code> to keep code clean and manageable.<\/p>\n\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3 &#8211; Payment Integration with Stripe<\/strong><\/h2>\n\n\n\n<p>Stripe provides a secure API for handling payments. Install the PHP SDK and connect via Laravel\u2019s service container.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">composer require stripe\/stripe-php<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<!-- DomainException(0): Unknown language: \"dotenv\" --># .env\nSTRIPE_SECRET=sk_test_your_secret\nSTRIPE_KEY=pk_test_your_public_key\n\n\n<p>The <code>STRIPE_SECRET<\/code> is used on the server to create charges. The <code>STRIPE_KEY<\/code> is exposed on the frontend to generate payment methods securely.<\/p>\n\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ app\/Http\/Controllers\/PaymentController.php<\/span>\n<span class=\"hljs-keyword\">namespace<\/span> <span class=\"hljs-title\">App<\/span>\\<span class=\"hljs-title\">Http<\/span>\\<span class=\"hljs-title\">Controllers<\/span>;\n\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Illuminate<\/span>\\<span class=\"hljs-title\">Http<\/span>\\<span class=\"hljs-title\">Request<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Stripe<\/span>\\<span class=\"hljs-title\">Stripe<\/span>;\n<span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Stripe<\/span>\\<span class=\"hljs-title\">PaymentIntent<\/span>;\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">PaymentController<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">Controller<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">createIntent<\/span><span class=\"hljs-params\">(Request $request)<\/span>\n    <\/span>{\n        $request-&gt;validate(&#91;\n            <span class=\"hljs-string\">'amount'<\/span> =&gt; <span class=\"hljs-string\">'required|integer|min:100'<\/span>, <span class=\"hljs-comment\">\/\/ cents<\/span>\n            <span class=\"hljs-string\">'currency'<\/span> =&gt; <span class=\"hljs-string\">'required|string'<\/span>,\n        ]);\n\n        Stripe::setApiKey(config(<span class=\"hljs-string\">'services.stripe.secret'<\/span>));\n\n        $intent = PaymentIntent::create(&#91;\n            <span class=\"hljs-string\">'amount'<\/span>   =&gt; $request-&gt;amount,\n            <span class=\"hljs-string\">'currency'<\/span> =&gt; $request-&gt;currency,\n            <span class=\"hljs-string\">'metadata'<\/span> =&gt; &#91;<span class=\"hljs-string\">'user_id'<\/span> =&gt; $request-&gt;user()-&gt;id],\n        ]);\n\n        <span class=\"hljs-keyword\">return<\/span> response()-&gt;json(&#91;<span class=\"hljs-string\">'client_secret'<\/span> =&gt; $intent-&gt;client_secret]);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This controller endpoint creates a Payment Intent with Stripe. The mobile app uses the returned <code>client_secret<\/code> to complete payment using Stripe\u2019s mobile SDKs (iOS\/Android). Metadata helps link the payment to your DB records.<\/p>\n\n\n\n<p><strong>Related Reading:<\/strong> For a full step-by-step tutorial on payments, see <a href=\"\/blog\/how-to-integrate-stripe-payments-in-laravel\">How to Integrate Stripe Payments in Laravel<\/a>, where we cover card forms, error handling, and secure webhook validation.<\/p>\n\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/\/ config\/services.php<\/span>\n<span class=\"hljs-string\">'stripe'<\/span> =&gt; &#91;\n    <span class=\"hljs-string\">'secret'<\/span> =&gt; env(<span class=\"hljs-string\">'STRIPE_SECRET'<\/span>),\n    <span class=\"hljs-string\">'key'<\/span>    =&gt; env(<span class=\"hljs-string\">'STRIPE_KEY'<\/span>),\n],<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Centralizing Stripe config makes swapping keys easy between dev, staging, and prod environments.<\/p>\n\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4 &#8211; Minimal UI Tester<\/strong><\/h2>\n\n\n\n<p>Here\u2019s a basic Blade UI to test sending email, SMS, and creating a payment intent from your browser (use your test credentials).<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-comment\">&lt;!-- resources\/views\/api\/tester.blade.php --&gt;<\/span>\n@extends('layouts.app')\n\n@section('content')\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"container\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h1<\/span>&gt;<\/span>API Integration Tester<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h1<\/span>&gt;<\/span>\n\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">form<\/span> <span class=\"hljs-attr\">method<\/span>=<span class=\"hljs-string\">\"POST\"<\/span> <span class=\"hljs-attr\">action<\/span>=<span class=\"hljs-string\">\"\/api\/test\/mail\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"mb-4\"<\/span>&gt;<\/span>\n    @csrf\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"email\"<\/span> <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"Email\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control mb-2\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-theme\"<\/span>&gt;<\/span>Send Test Mail<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">form<\/span>&gt;<\/span>\n\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">form<\/span> <span class=\"hljs-attr\">method<\/span>=<span class=\"hljs-string\">\"POST\"<\/span> <span class=\"hljs-attr\">action<\/span>=<span class=\"hljs-string\">\"\/api\/test\/sms\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"mb-4\"<\/span>&gt;<\/span>\n    @csrf\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"to\"<\/span> <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"Phone Number\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control mb-2\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"message\"<\/span> <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"Message\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control mb-2\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-secondary\"<\/span>&gt;<\/span>Send SMS<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">form<\/span>&gt;<\/span>\n\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">form<\/span> <span class=\"hljs-attr\">method<\/span>=<span class=\"hljs-string\">\"POST\"<\/span> <span class=\"hljs-attr\">action<\/span>=<span class=\"hljs-string\">\"\/api\/test\/payment\"<\/span>&gt;<\/span>\n    @csrf\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"number\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"amount\"<\/span> <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"Amount in cents\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control mb-2\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"currency\"<\/span> <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"Currency\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control mb-2\"<\/span> <span class=\"hljs-attr\">value<\/span>=<span class=\"hljs-string\">\"usd\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-success\"<\/span>&gt;<\/span>Create Payment Intent<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">form<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n@endsection<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This UI lets you quickly verify Mail, SMS, and Stripe integrations with test credentials. It posts to your test routes which internally use Mailgun, Twilio, and Stripe APIs.<\/p>\n\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping Up<\/h2>\n\n\n\n<p>You integrated three common APIs into a Laravel app: Mailgun for emails, Twilio for SMS, and Stripe for payments. You learned how to configure credentials, call APIs with Laravel\u2019s Http client or SDKs, and secure sensitive keys. With consistent services and a tester UI, you can extend this approach to any third-party API.<\/p>\n\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n\n<h2 class=\"wp-block-heading\">What\u2019s Next<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/blog\/paypal-integration-in-laravel-step-by-step\">PayPal Integration in Laravel (Step by Step)<\/a> \u2014 if you prefer PayPal, this article shows the full flow of creating and capturing payments.<\/li>\n<li><a href=\"\/blog\/how-to-build-a-secure-file-upload-api-in-laravel\">How to Build a Secure File Upload API in Laravel<\/a> \u2014 essential if your app also needs to handle documents or images alongside payments.<\/li>\n<li><a href=\"\/blog\/building-a-mobile-app-backend-with-laravel-12-api\">Building a Mobile App Backend with Laravel 12 API<\/a> \u2014 learn how to expose these integrations cleanly to iOS and Android apps.<\/li>\n<\/ul>\n\n","protected":false},"excerpt":{"rendered":"<p>Integrating Laravel with Third-Party APIs (Mail, SMS, Payment) Most apps rely on third-party APIs for critical features: sending emails, delivering SMS, and processing payments. Laravel makes it easy with built-in Mail and Notification facades, and clean HTTP client integration for external services. In this guide, you\u2019ll integrate Mailgun for email, Twilio for SMS, and Stripe [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":375,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[25,61,51,62],"class_list":["post-371","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-api","tag-mail","tag-payments","tag-sms"],"_links":{"self":[{"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/posts\/371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/comments?post=371"}],"version-history":[{"count":1,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/posts\/371\/revisions"}],"predecessor-version":[{"id":374,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/posts\/371\/revisions\/374"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/media\/375"}],"wp:attachment":[{"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/media?parent=371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/categories?post=371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/1v0.net\/blog\/wp-json\/wp\/v2\/tags?post=371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}