2017-08-05 31 views
1

我正在MemberMouse訂閱Wordpress網站上工作。在用戶通過網絡註冊成爲會員之後,我想調用一個腳本,將用戶添加到Mailchimp郵件列表中並使用雙重選擇。 Membermouse通過Mailchimp提供集成,但只有一個選擇加入。因此,由於政府法律,我需要使用雙重選擇。在WordPress用戶訂閱後通過通知腳本添加Mailchimp用戶(Membermouse)PHP和API

我寫了下面的腳本,應該,一旦成員添加它發送下面的PHP sript的情況下被調用:

<?php 

require_once("wp-load.php"); 
require_once("wp-content/plugins/membermouse/includes/mm-constants.php"); 
require_once("wp-content/plugins/membermouse/includes/init.php"); 


// Your Membermouse API URL 
$apiUrl = "MYDOMAIN/wp-content/plugins/membermouse/api/request.php"; 

// Your API key 
$apiKey = "my API key"; 

// Your API secret 
$apiSecret = "my API secret"; 


// ---- GET EVENT TYPE ---- 
if(!isset($_GET["mm_member_add"])) 
{ 
    // event type was not found, so exit 
    exit; 
} 


// ---- ACCESS DATA ---- 
// member data 
$username = $_GET["username"]; 
$email = $_GET["email"]; 


      $apiKey1 = 'my Mailchimp API key'; 
      $listID1 = 'my Mailchimp list ID'; 

      // MailChimp API URL 
      $memberID1 = md5(strtolower($email)); 
      $dataCenter1 = substr($apiKey1,strpos($apiKey1,'-')+1); 
      $url1 = 'https://' . $dataCenter1 . '.api.mailchimp.com/3.0/lists/' . $listID1 . '/members/' . $memberID1; 

      // member information 
      $json = json_encode([ 
        'email_address' => $email, 
        'status'  => 'pending',    
      ]); 

      // send a HTTP POST request with curl 
      $ch1 = curl_init($url1); 
      curl_setopt($ch1, CURLOPT_USERPWD, 'user:' . $apiKey1); 
      curl_setopt($ch1, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); 
      curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch1, CURLOPT_TIMEOUT, 10); 
      curl_setopt($ch1, CURLOPT_CUSTOMREQUEST, 'PUT'); 
      curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false); 
      curl_setopt($ch1, CURLOPT_POSTFIELDS, $json); 
      $result1 = curl_exec($ch1); 
      $httpCode = curl_getinfo($ch1, CURLINFO_HTTP_CODE); 
      curl_close($ch1); 
     break; 

echo "<pre>".print_r($result1, true)."</pre>"; 

?> 

但是,它不會響應。該腳本將被執行。

到目前爲止這麼好。然而,我正在嘗試幾天後如何編寫這個PHP來讓這個工作。另外,我不確定PHP代碼是否正確。這只是一個假設。

對於參考文獻,我發現從membermouse這個腳本:https://dl.dropboxusercontent.com/u/265387542/files/member_notification_script.php

而這個腳本Mailchimp:https://www.codexworld.com/add-subscriber-to-list-mailchimp-api-php/

我想這兩個結合起來,但至今沒有成功。

回答

0

與您當前密碼的問題是:

1)您在URL中供應MEMBERID - 這是不是你想要的一個職位,以創建一個新用戶。那麼做

$url1 = 'https://' . $dataCenter1 . '.api.mailchimp.com/3.0/lists/' . $listID1 . '/members/'; 

改爲。

2)你的一些cURL設置是錯誤的。爲您的文章字段,你想

curl_setopt($ch1, CURLOPT_USERPWD, 'api_v3:' . $apiKey1); 
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, true); 

擺脫

curl_setopt($ch1, CURLOPT_CUSTOMREQUEST, 'PUT'); 
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false); 
1

感謝您的回覆快@scottcwilson,但我得到無法從這個PHP文件響應。

這是現在的樣子:

<?php 

require_once("wp-load.php"); 
require_once("wp-content/plugins/membermouse/includes/mm-constants.php"); 
require_once("wp-content/plugins/membermouse/includes/init.php"); 


// Your API URL 
$apiUrl = "MYDOMAIN/wp-content/plugins/membermouse/api/request.php"; 

// Your API key 
$apiKey = "My API key"; 

// Your API secret 
$apiSecret = "My API secret"; 


// ---- GET EVENT TYPE ---- 
if(!isset($_GET["mm_member_add"])) 
{ 
    // event type was not found, so exit 
    exit; 
} 


// ---- ACCESS DATA ---- 
// member data 
$username = $_GET["username"]; 
$email = $_GET["email"]; 


      $apiKey1 = 'Mailchimp API'; 
      $listID1 = 'Mailchimp List ID'; 

      // MailChimp API URL 
      $memberID1 = md5(strtolower($email)); 
      $dataCenter1 = substr($apiKey1,strpos($apiKey1,'-')+1); 
      $url1 = 'https://' . $dataCenter1 . '.api.mailchimp.com/3.0/lists/' . $listID1 . '/members/'; 

      // member information 
      $json = json_encode([ 
        'email_address' => $email, 
        'status'  => 'pending',    
      ]); 

      // send a HTTP POST request with curl 
      $ch1 = curl_init($url1); 
      curl_setopt($ch1, CURLOPT_USERPWD, 'api_v3:' . $apiKey1); 
      curl_setopt($ch1, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); 
      curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch1, CURLOPT_TIMEOUT, 10); 
      curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, true); 
      curl_setopt($ch1, CURLOPT_POSTFIELDS, $json); 
      $result1 = curl_exec($ch1); 
      $httpCode = curl_getinfo($ch1, CURLINFO_HTTP_CODE); 
      curl_close($ch1); 
     break; 

echo "<pre>".print_r($result1, true)."</pre>"; 

?> 

這是正確的,你怎麼說的吧?

相關問題