2016-11-08 3 views
0

Я пытаюсь создать новый Business Notebook поверх PHP, но мне не повезло.Создание бизнес-ноутбуков Evernote в PHP

Я пробовал следовать 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": "[email protected]", 
     "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": "[email protected]", 
     "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 
    } 
} 

До сих пор мой код потока следующим образом // Пытаемся уловы, оставленные за sortness

//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"} 

ответ

0

OK Я смог заставить его работать. В основном, в вашем коде слишком много ошибок:

  • имя пользователя и 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: сказать привет Крису для меня;)

+0

Блестяще, спасибо! Оглядываясь назад, перечитайте https: //dev.evernote.com/doc/articles/business.php снова, это именно то, что он хочет сделать ... Извините за то, что вы использовали свое время на моем обмане! Крис, и мы все это ценим! –

0

Я только что быстрый взгляд, чтобы я мог быть неверно, но description of the error code № 12: «Сервисный осколок с данными учетной записи временно опускается»

Возможно, это временная ошибка. Дайте мне знать, и я попытаюсь потратить некоторое время, чтобы проверить этот вопрос, если это не так.

+0

Привет, спасибо за ответ, я до сих пор, однако я получаю тот же код ошибки. Я отмечаю, что я также просто попытался изменить эту последнюю строку '' '$ newLinkedNotebook = $ bNoteStore-> createLinkedNotebook ($ bAuthToken, $ newLinkedNotebook);' '' от использования $ bNoteStore до $ noteStore вместе с не-бизнесом и ошибки, которую он возвращает это '' '{" errorCode ": 5," parameter ":" LinkedNotebook.shardId "}' '', который возвращает меня к проблеме, упомянутой ранее, когда я создаю ноутбук в магазине бизнес-заметок, shareKey и no shareId –

+0

OK Я постараюсь взглянуть сегодня. Никаких обещаний, хотя у меня много на моей тарелке прямо сейчас. –

Смежные вопросы