【问题标题】:Creating Evernote Business Notebooks in PHP在 PHP 中创建 Evernote 商务笔记本
【发布时间】:2017-03-21 13:30:19
【问题描述】:

我正在尝试通过 PHP 创建一个新的 Business Notebook,但我没有运气。

我已尝试关注 this documentation 并使用 Thrift module: NoteStore 将代码调整为我可用的代码。

根据我对流程的理解,它是;创建一个新笔记本,使用返回的笔记本获取它的 shareKey、shareID 和 businessId,使用该信息在业务笔记存储中创建一个链接的笔记本。

我首先尝试使用非商业笔记存储创建新笔记本,但是返回的新笔记本不包含 shareKey 或创建链接笔记本所需的任何其他信息。相反,我发现使用商业笔记商店创建一个新笔记本返回了一个新笔记本,其中包含“sharedNotebooks”字段下的一些必需信息,但是 businessNotebook 参数为空,并且 sharedNotebooks 中没有 shareId。即使这个新笔记本被成功退回,它在我的个人或企业帐户中也看不到。

返回的笔记本看起来像

{
    "guid": "d341cd12-9f98-XXX-XXX-XXX",
    "name": "Hello World",
    "updateSequenceNum": 35838,
    "defaultNotebook": false,
    "serviceCreated": 1478570056000,
    "serviceUpdated": 1478570056000,
    "publishing": null,
    "published": null,
    "stack": null,
    "sharedNotebookIds": [603053],
    "sharedNotebooks": [{
        "id": 603053,
        "userId": 40561553,
        "notebookGuid": "d341cd12-9f98-XXX-XXX-XXX",
        "email": "jack@businessEvernoteAccountEmail",
        "notebookModifiable": true,
        "requireLogin": null,
        "serviceCreated": 1478570056000,
        "serviceUpdated": 1478570056000,
        "shareKey": "933ad-xxx",
        "username": "xxx",
        "privilege": 5,
        "allowPreview": null,
        "recipientSettings": {
            "reminderNotifyEmail": null,
            "reminderNotifyInApp": null
        }
    }],
    "businessNotebook": null,
    "contact": {
        "id": 111858676,
        "username": "XXX",
        "email": "jack@personalEvernoteAccountEmail",
        "name": "Jack XXXX",
        "timezone": null,
        "privilege": null,
        "created": null,
        "updated": null,
        "deleted": null,
        "active": true,
        "shardId": null,
        "attributes": null,
        "accounting": null,
        "premiumInfo": null,
        "businessUserInfo": null
    },
    "restrictions": {
        "noReadNotes": null,
        "noCreateNotes": null,
        "noUpdateNotes": null,
        "noExpungeNotes": true,
        "noShareNotes": null,
        "noEmailNotes": true,
        "noSendMessageToRecipients": null,
        "noUpdateNotebook": null,
        "noExpungeNotebook": true,
        "noSetDefaultNotebook": true,
        "noSetNotebookStack": true,
        "noPublishToPublic": true,
        "noPublishToBusinessLibrary": null,
        "noCreateTags": null,
        "noUpdateTags": true,
        "noExpungeTags": true,
        "noSetParentTag": true,
        "noCreateSharedNotebooks": null,
        "updateWhichSharedNotebookRestrictions": null,
        "expungeWhichSharedNotebookRestrictions": null
    }
}

到目前为止,我的代码流程如下 //尝试为排序而忽略的捕获

//Check if business user
$ourUser = $this->userStore->getUser($authToken);
if(!isset($ourUser->accounting->businessId)){
    $returnObject->status = 400;
    $returnObject->message = 'Not a buisness user';
    return $returnObject;
}

// authenticateToBusiness and get business token
$bAuthResult = $this->userStore->authenticateToBusiness($authToken);
$bAuthToken = $bAuthResult->authenticationToken;

//Create client and set up business note store
$client = new \Evernote\AdvancedClient($authToken, false);
$bNoteStore = $client->getBusinessNoteStore();

//Create a new notebook in business note store- example result is json above
$newNotebook = new Notebook();
$newNotebook->name = $title;
$newNotebook = $bNoteStore->createNotebook($bAuthToken, $newNotebook);

//Look at new notebook and get information needed to create linked notebook
$sharedNotebooks = $newNotebook->sharedNotebooks[0];

$newLinkedNotebook = new LinkedNotebook();
$newLinkedNotebook->shareName = $title;
$newLinkedNotebook->shareKey = $sharedNotebooks->shareKey;
$newLinkedNotebook->username = $sharedNotebooks->username;
//$newLinkedNotebook->shardId = $sharedNotebooks->shardId; //isnt there

//This is where I think the trouble is happening ???
$newLinkedNotebook = $bNoteStore->createLinkedNotebook($bAuthToken, $newLinkedNotebook);

//Trying with business token throws 
//{"errorCode":3,"parameter":"authenticationToken"}
//Even though within Evernote itself, I can add notebooks to this business 


//Alternatively trying with the regular $authToken i receive 
//{"errorCode":12,"message":"s570","rateLimitDuration":null}
// error code 12 being SHARD_UNAVAILABLE

//and trying on the regular noteStore 
$newLinkedNotebook = $noteStore->createLinkedNotebook($authToken, $newLinkedNotebook);
//returns {"errorCode":5,"parameter":"LinkedNotebook.shardId"}

【问题讨论】:

    标签: php api evernote


    【解决方案1】:

    好的,我已经能够让它工作了。基本上,你的代码有太多错误:

    • username 和 shardId 是用户的属性,而不是共享笔记本的属性。
    • 必须在用户商店而不是企业商店中创建链接的笔记本。基本上,链接的笔记本只是您创建的“真实”共享商务笔记本的“链接”。它允许用户访问商务笔记本。

    所以这里有一些对我有用的代码:

    $client = new \Evernote\AdvancedClient($authToken, false, null, null, false);
    
    $userStore = $client->getUserStore();
    $userNoteStore = $client->getNoteStore();
    
    $ourUser = $userStore->getUser($authToken);
    if(!isset($ourUser->accounting->businessId)){
        $returnObject = new \stdClass();
        $returnObject->status = 400;
        $returnObject->message = 'Not a buisness user';
        return $returnObject;
    }
    
    $bAuthResult = $userStore->authenticateToBusiness($authToken);
    $bAuthToken = $bAuthResult->authenticationToken;
    
    $bNoteStore = $client->getBusinessNoteStore();
    
    $title = 'My title';
    
    $newNotebook = new \EDAM\Types\Notebook();
    $newNotebook->name = $title;
    $newNotebook = $bNoteStore->createNotebook($bAuthToken, $newNotebook);
    
    $sharedNotebook = $newNotebook->sharedNotebooks[0];
    
    $newLinkedNotebook = new \EDAM\Types\LinkedNotebook();
    $newLinkedNotebook->shareName = $newNotebook->name;
    $newLinkedNotebook->shareKey = $sharedNotebook->shareKey;
    
    $newLinkedNotebook->username = $bAuthResult->user->username;
    $newLinkedNotebook->shardId = $bAuthResult->user->shardId;
    
    $newLinkedNotebook = $userNoteStore->createLinkedNotebook($authToken, $newLinkedNotebook);

    希望有帮助!

    PS:替我向克里斯打个招呼;)

    【讨论】:

    【解决方案2】:

    我只是快速浏览了一下,所以我可能错了,但description of the error code n° 12 是:“带有帐户数据的服务分片暂时关闭”

    可能是临时错误。告诉我,如果不是这样,我会花一些时间来检查这个问题。

    【讨论】:

    • 您好,感谢您的回复,但我仍然收到相同的错误代码。我注意到我还尝试将最后一行 $newLinkedNotebook = $bNoteStore->createLinkedNotebook($bAuthToken, $newLinkedNotebook); 从使用 $bNoteStore 更改为 $noteStore 以及非业务身份验证,它返回的错误是 {"errorCode":5,"parameter":"LinkedNotebook.shardId"} 这让我回到前面提到的问题,当我创建一个商业笔记商店中的笔记本我只得到了一个 shareKey 而没有 shareId
    • 好的,我今天试试看。不过没有保证,因为我现在有很多事情要做。
    猜你喜欢
    • 1970-01-01
    • 2014-06-14
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    相关资源
    最近更新 更多