Mailchimp 不适用于生产 [laravel on azure]

Posted

技术标签:

【中文标题】Mailchimp 不适用于生产 [laravel on azure]【英文标题】:Mailchimp Does not work on production [laravel on azure] 【发布时间】:2016-11-14 01:20:02 【问题描述】:

我部署了一个小型 laravel 应用程序,它可以为用户订阅 mailchimp 列表。 这是非常基本的,但它不适用于生产

注意: 在 Localhost 环境中一切都很好,而且联系表也可以正常工作(使用 SMTP)

.env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=587
MAIL_USERNAME=AUSERNAME
MAIL_PASSWORD=APASSWORD
MAIL_ENCRYPTION=TLS

MAILCHIMP_APIKEY=APIKEYHERE
MAILCHIMP_LIST_ID=LISTIDHERE

控制器

Newsletter::subscribe($request->email, [
                'firstName' => 'test', 
                'lastName' => 'tessst', 
                'listName' => 'whishlist' ], 'subscribers');

return response()->json([
                     'status' => 'success',
                     'msg'  => 'Subscribed successfully']);

laravel-newsletter 配置文件

<?php

return [

    'apiKey'          => env('MAILCHIMP_APIKEY'),


    'defaultListName' => 'subscribers',

    'lists'           => [


        'subscribers' => [


            'id' => '5920168294',
        ],
        'whishlist'   => [


            'id' => '8e553f3d39',
        ],
    ],
];

我猜这与 HTTPS 有关(我通过添加文件 cacert.pem 并在 php.ini 中引用它来解决问题) 如果这是问题,我该如何在 azure 上解决这个问题?

很抱歉没有错误输出,因为它返回成功到 ajax 调用。(如果我怎样才能从 mailchimp 获得响应来检查错误?)

提前致谢。

【问题讨论】:

你用的是smpt还是api? API 因为我正在使用spatie/laravel-newsletter 也许您的网站是 https 并尝试从 http 加载 mailchimp 脚本? 是的,我正在使用 http,我该如何解决?我必须要有证书吗? 【参考方案1】:

我不知道这里有什么问题。

但是当我摆脱了我正在使用的包 spatie/laravel-newsletter 并改用 CURL 和 API V3 时,我设法完成了这项工作。

 $email = $request->email;
    $listid = env('MAILCHIMP_LIST_ID');
    $apikey =  env('MAILCHIMP_APIKEY');
    $server = substr($apikey, strpos($apikey, '-') + 1);
    $auth = base64_encode('user:' . $apikey);
    $data = array(
        'apikey'        => $apikey,
        'email_address' => $email,
        'status'        => 'subscribed',
        'merge_fields'  => array(
            'FNAME' => 'test1',
            'LNAME' => 'test2',
        ),

    );
    $json_data = json_encode($data);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://'. $server.'api.mailchimp.com/3.0/lists/'. $listid .'/members/');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json',
        'Authorization: Basic ' . $auth));
    curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/2.0');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;

【讨论】:

以上是关于Mailchimp 不适用于生产 [laravel on azure]的主要内容,如果未能解决你的问题,请参考以下文章

JWT Auth 令牌适用于 Homestead,但不适用于生产服务器

在 Laravel 5.2 中使用 mailchimp API

Propel toJson 或 exportTo('JSON') 不适用于 Laravel

Laravel 4 模型事件不适用于 PHPUnit

Laravel 8速率限制器不适用于路线

yajra/laravel-datatables 搜索不适用于 laravel 5.7