Curl MailChimp OAuth2访问令牌

Curl MailChimp OAuth2访问令牌,curl,oauth-2.0,yii2,mailchimp,Curl,Oauth 2.0,Yii2,Mailchimp,这个问题与其他已经被问过的问题类似,但答案没有帮助,我认为有一个关键的部分缺失了。我正在MailChimp OAuth2流程的第4步,这需要一个带外post到authorize url()。它不断返回错误:invalid_grant,据我所知,这可能表示有许多不同的错误。这是我的代码(我使用的是Yii2) 答案就在这里,所以对重定向URI的匹配有很大的影响。但是有三个地方可以输入返回uri:注册应用程序时的Mailchimp、授权url和令牌url。这三个都需要精确地进行macth,还是只需要a

这个问题与其他已经被问过的问题类似,但答案没有帮助,我认为有一个关键的部分缺失了。我正在MailChimp OAuth2流程的第4步,这需要一个带外post到authorize url()。它不断返回错误:invalid_grant,据我所知,这可能表示有许多不同的错误。这是我的代码(我使用的是Yii2)


答案就在这里,所以对重定向URI的匹配有很大的影响。但是有三个地方可以输入返回uri:注册应用程序时的Mailchimp、授权url和令牌url。这三个都需要精确地进行macth,还是只需要auth和token URI?我试过各种组合,但都没用。我的问题可能有所不同,但这是我唯一不清楚的(我想)。和我之前的许多人一样,我对这个问题非常着迷。

这个解决方案是由另一位开发人员提供给我的

commmon/components/Mailchimp.php:

namespace common\components;

class Mailchimp extends \yii\authclient\OAuth2 
{
    public $clientId = 'client id';
    public $clientSecret = 'client secret';
    public $authUrl = 'https://login.mailchimp.com/oauth2/authorize';
    public $tokenUrl = 'https://login.mailchimp.com/oauth2/token';

    // min function needed to extend – just put the return to true as I don’t care the return value
    public function initUserAttributes()
    {
        return true;    
    }
}
控制器:

public function actionMailchimpAuthorize()
{
    $oauthClient = new \common\components\Mailchimp();
    $oauthClient->setReturnUrl(Url::toRoute(['controller/mailchimp-complete'], 'https));
    $url = $oauthClient->buildAuthUrl();
    $response = Yii::$app->getResponse()->redirect($url);

    return $this->render('mailchimpAuthorize');
}

public function actionMailchimpComplete()
{
    $code = Yii::$app->getRequest()->get('code');
    $oauthClient = new \common\components\Mailchimp();
    $oauthClient->setReturnUrl(Url::toRoute(['controller/mailchimp-complete'], 'https));
    $accessToken = $oauthClient->fetchAccessToken($code);

    // Complete MC flow with request to metadata url
    $headers = [                                                                                
        'User-Agent:oauth2-draft-v10', 
        'Host:login.mailchimp.com', 
        'Accept:application/json', 
        'Authorization:OAuth ' . $oauthClient->getAccessToken()->token
    ];
    $url = 'https://login.mailchimp.com/oauth2/metadata';
    $res = Utility::get($url, $headers);
    $dc = json_decode($res)->dc;   // retrieve datacenter

    return $this->render('mailchimpComplete', ['accessToken' => $accessToken, 'data' => $oauthClient]);     
}

// save token-datacenter to database for making api calls
查看文件mailchimpComplete.php:

echo($data->getAccessToken()->token);

Mailchimp中应用程序注册时设置的返回URI与上面列出的相同:

您是否使用了Mailchimp提供的默认库。否,我尝试过,但遇到了其他问题。我也试过Yii的auth manager。直接编码是最直接的,也是我得到最多的。我在示例库中遇到了这个问题:
echo($data->getAccessToken()->token);