Jump to content

Subscribe To Mailchimp


daniels
 Share

Recommended Posts

  • 3 months later...

Hi @daniels, on a site, where I had installed and used the module since its first release, the subscribe method doesn't work anymore.
To clarify: The module is upgraded to the last master version.

Could it be, that there was a change introduced by MC, maybe two months ago? Since then it seems not to work anymore.
I setup a logger at these two points:
A) https://github.com/danielstieber/SubscribeToMailchimp/blob/fd5039ec94e2b4ad49458ce090a240ba2d3979d6/SubscribeToMailchimp.module#L53
and
B) https://github.com/danielstieber/SubscribeToMailchimp/blob/fd5039ec94e2b4ad49458ce090a240ba2d3979d6/SubscribeToMailchimp.module#L62

The responses are now all the time:

A) (status) 401
B)

{
  "type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/",
  "title":"Resource Not Found","status":404,"detail":"The requested resource could not be found.",
  "instance":"c31XXX66-XXXX-XXXX-XXXX-47c61XXX89eb"
}

Do you know about any changes?

EDIT:
This only happens when I try to subscribe a NEW user. When I send a already known user, I get back correct responses, like before:
A) (status): unsubscribed or subscribed
B)

{
   "id":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
   "email_address":"mctest13@xxxxxxxxxxx.xxx",
   "unique_email_id":"xxxxxxxxxxx",
   "email_type":"html",
   "status":"pending",
   "merge_fields":{"FNAME":"","LNAME":""},
   "stats":{"avg_open_rate":0,"avg_click_rate":0},
   "ip_signup":"xxx.xxx.xxx.xxx",
   "timestamp_signup":"2018-04-25T14:56:05+00:00",
   "ip_opt":"xxx.xxx.xxx.xxx",
   "timestamp_opt":"2018-04-25T15:11:24+00:00",
   "member_rating":2,
   "last_changed":"2019-04-04T08:15:30+00:00",
   "language":"",
   "vip":false,
   "email_client":"",
   "location":{"latitude":0,"longitude":0,"gmtoff":0,"dstoff":0,"country_code":"","timezone":""},
   "marketing_permissions":[],
   "source":"Unknown",
   "tags_count":0,
   "tags":[],
   "list_id":"xxxxxxxxxx",
}

 

Link to comment
Share on other sites

Hey @horst,

thanks for reaching out. I have to check the details, but just on first sight:

I think error B is just because of a problem at A. Line 62 is not supposed to be executed for new user.

I'm very sorry, but I won't be able to look into it before Friday/Saturday due to a business trip. I made a todo and will do some testing and refactoring when I'm back.

Maybe a quick and dirty fix for you meanwhile:

With an if, check If you get the 404 in line 62 (patch), and if yes, execute the post request which is supposed to be executed for new users:
$response = $http->send($api, json_encode($param), 'POST');
 

 

Link to comment
Share on other sites

Hi @daniels,

thanks for the quick response! Now, when so say it, maybe I have added a bug by myself when editing the module to add the logger. I've also wonder why not the other send method was invoked. I will check / resolve that and post here again with the new results before friday!

Link to comment
Share on other sites

  • 1 month later...

Hi @daniels,

I'm using your module and I have to thank you a lot, it is saving me hours of time.

However I'm facing a problem: if I subscribe a user (goes fine), unsuscribe him (goes fine too) and then try to subscribe him again there goes nothing. He stays with the "Unsubscribed" status inside my Audience section of the Dashboard.

How could I try to solve this issue?

Thanks!

 

Link to comment
Share on other sites

  • 3 weeks later...
On 4/7/2019 at 8:17 PM, horst said:

Hi @daniels,

thanks for the quick response! Now, when so say it, maybe I have added a bug by myself when editing the module to add the logger. I've also wonder why not the other send method was invoked. I will check / resolve that and post here again with the new results before friday!

Hi @horst,

I'm facing similar problems with subscribing a new user to my list, here is my code: (an hook for the LoginRegister module by ryan)

wire()->addHookAfter('LoginRegister::processRegisterForm', function($event) {
    $form = $event->arguments[0];
    foreach($form->getAll() as $f) {
        $name = $f->attr('name');
        if(strpos($name, 'register_') !== 0) continue;
        if($name == 'register_subscribe_newsletter' && wire('input')->post->register_subscribe_newsletter == 1) {
            $mc = wire('modules')->get("SubscribeToMailchimp");
            $email_dirty = wire('input')->post->register_email;
            $email = wire('sanitizer')->email($email_dirty);
            $subscriber = [
                'FNAME' => wire('input')->post->register_nome_iscritto,
                'LNAME' => wire('input')->post->register_cognome_iscritto
            ];
            $mc->subscribe($email, $subscriber);
        }
    }
});

And here is what the mailchimp console said about the request:

Cattura.thumb.JPG.005781d18809040f419525c754e4f0b6.JPG

I've tested everything I can imagine (list_id, api key, etc...) but nothing.

I've also tried to edit the line 62 of the module with

$response = $http->send($api, json_encode($param), 'POST');

but the error still remain....

Did you solved it somehow?

Thanks!

 

EDIT:

I've solved changing line 54 of the module from:

if($status !== false) {
//...
}

to

if($status !== 404) {
//...
}

Basically Mailchimp returns a status of 404 (and not false) when the module tries to insert a new user. This is correct because the user is not there in the list at first.

Link to comment
Share on other sites

  • 1 month later...

Hey @horst, @3fingers,

I'm very sorry for the late response. I finally found some time to look into this.

@horst at the beginning, you mentioned a 401 error. I think this could be caused by a wrong audience id. But seems like this was no problem later?

- Regarding 404: you get a 404 for every new user, because the "getStatus" method simply can't find a status for that user. This is absolutely correct behaviour and the check itself is suggested by the API documentation. I guess it is not a good idea to log this as a warning, as it is part of the normal process. I removed that.

- @3fingers do you have double opt-in enabled or disabled? there was an extra 'if' on line 55 that has caused problems with resubscription when double opt-in was disabled. This should be fixed in 0.0.5. Thanks to jliebermann for posting this issue on github. (Note, that after a 'resubscribe', the user has to confirm his email adress again and will disappear in your "contacts" list until he does that!) 

- @3fingers your solution with updating line 54 can not really work, because the $status you are checking is not the HTTP_STATUS. It is supposed to be the subscription status, and it will be false, when you (correctly) get a 404 during the API call. So there should never be a 404 in $status 🤔.

Besides that, I changed the wording in the readme and comments from 'list' to 'audience', since this is the new wording by Mailchimp. Version 0.0.5 is live in a minute. Appreciate your feedback.

Thanks a lot for posting your issues and for your patience! Trying to answer you faster next time. Let me know if you still have problems.

  • Like 5
Link to comment
Share on other sites

  • 3 months later...

Hey @Sevarf2,

the module is using WireHttp. It seems like wirehttp introduced a curl fallback as mentioned here

You could try to play around with the options of the send methods in the mailchimp module e.g. trying socket instead of auto (=curl?) as a fallback  (here are the options of the send method of http wire https://github.com/processwire/processwire/blob/dev/wire/core/WireHttp.php#L434). Let me know if this makes a difference!

Another possibility:
Have you made the module work on that same server already? Maybe there are some serversided settings that make problems with curl.

  • Like 1
Link to comment
Share on other sites

2 hours ago, daniels said:

Hey @Sevarf2,

the module is using WireHttp. It seems like wirehttp introduced a curl fallback as mentioned here

You could try to play around with the options of the send methods in the mailchimp module e.g. trying socket instead of auto (=curl?) as a fallback  (here are the options of the send method of http wire https://github.com/processwire/processwire/blob/dev/wire/core/WireHttp.php#L434). Let me know if this makes a difference!

Another possibility:
Have you made the module work on that same server already? Maybe there are some serversided settings that make problems with curl.

I added a parameters array to the send command using socket as fallback as suggested, don't see the error anymore but neither the user subscribed 😞

$params = array(
   'fallback' => 'socket',
);
$response = $http->send($api . '/' . md5($email), json_encode($param), 'PATCH', $params);
Link to comment
Share on other sites

  • 6 months later...

Did anyone figure out the issue with error:

Raw data option with CURL not supported for PATCH

I'm having the same issue, and digging around can't see where the issue is...

Any help would be greatly appreciated.

UPDATE: Thought I'd sorted it but it turns out I haven't. I've added a log to output the parameter to make sure that data is set and not empty and it appears to be correct: {"email_address":"someemail@here.com"} yet I'm getting the PATCH error.

Hoping someone has figured this out 🙏

Edited by alexmercenary
NOT SOLVED
Link to comment
Share on other sites

  • 3 weeks later...
On 4/28/2020 at 2:22 PM, alexmercenary said:

Did anyone figure out the issue with error:

Raw data option with CURL not supported for PATCH

I'm having the same issue, and digging around can't see where the issue is...

Any help would be greatly appreciated.

UPDATE: Thought I'd sorted it but it turns out I haven't. I've added a log to output the parameter to make sure that data is set and not empty and it appears to be correct: {"email_address":"someemail@here.com"} yet I'm getting the PATCH error.

Hoping someone has figured this out 🙏

@alexmercenary, Maybe the fix here will help you: https://github.com/danielstieber/SubscribeToMailchimp/issues/9

 

I am also having troubles using this module. 

The test for the api settings works but when i try to subscribe a user it does not work. I dumped the response text and I get 

"{"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"Resource Not Found","status":404,"detail":"The reques ...

I am on localhost at the moment but I guess that should not matter? Anybody had this problem so far?

 

 

EDIT: Problem fixed with 0.0.6 dev branch on github. 

Link to comment
Share on other sites

Hey all,

open issues are fixed in 0.0.6 (changelog), you can update it now. I would strongly recommend to update it, as there were major issues regarding subscription of new users.

Thanks for your help and patience! Keep me updated if you run into errors ❤️

 

  • Like 3
Link to comment
Share on other sites

  • 5 months later...

Hey @Marco Ro,

you should be able to update user information with the subscribe method. If a user is already subscribed, it overwrites / sets field values. Let me know if this doesn’t work.

Users can not update their mail adress though.

In general, users can probably update their data and settings via Mailchimps preferences link directly in MC. The module is not meant to be a Mailchimp database editor, viewer or sync, it is mostly made to add People to MC without saving their personal data on the webspace. 

 

  • Like 1
Link to comment
Share on other sites

  • 6 months later...
  • 7 months later...

I have extended this module to include     

    public function deleteTag($email, $tag, $list = NULL) {}
    public function setTag($email, $tag, $list = NULL) {}
    public function getTags($email, $list = NULL) {}

would you like to add these to your module so that it can handle tags?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...