diff --git a/Service/FacebookMessengerService.php b/Service/FacebookMessengerService.php index b70ee72..30e8e3c 100644 --- a/Service/FacebookMessengerService.php +++ b/Service/FacebookMessengerService.php @@ -169,6 +169,32 @@ public function getPsid($linkingToken) return json_decode($this->curlService->get($url, $params), true); } + /** + * Account Unlink + * + * @param string|int $psid + * + * @return mixed + * + * @throws FacebookMessengerException + */ + public function unlinkAccount($psid) + { + $this->checkAccessToken(); + + $params = [ + 'access_token' => $this->accessToken, + ]; + + $content = $this->serializer->serialize([ + 'psid' => $psid, + ], 'json'); + + $url = self::FB_API_URL.'/me/unlink_accounts?'.http_build_query($params); + + return json_decode($this->curlService->post($url, $content), true); + } + /** * Handle a verification token request, check against the given verificationToken. * Throw an exception when the token is invalid, or return null when the request isn't a verification request. diff --git a/Tests/Service/FacebookMessengerServiceTest.php b/Tests/Service/FacebookMessengerServiceTest.php index 9c1c274..5dce3e1 100644 --- a/Tests/Service/FacebookMessengerServiceTest.php +++ b/Tests/Service/FacebookMessengerServiceTest.php @@ -154,6 +154,30 @@ public function testGetPsid() self::assertEquals(2, $result['recipient']); } + /** + * Test unlink an account + * + * @throws \PouleR\FacebookMessengerBundle\Exception\FacebookMessengerException + */ + public function testUnlinkAccount() + { + $curlService = $this->createMock(CurlService::class); + $curlService->expects(self::once()) + ->method('post') + ->with( + 'https://graph.facebook.com/v2.6/me/unlink_accounts?access_token=token', + '{"psid":"PSID"}' + ) + ->willReturn('{"result": "unlink account success"}'); + + $service = new FacebookMessengerService($curlService); + $service->setAccessToken('token'); + + $result = $service->unlinkAccount('PSID'); + + self::assertEquals('unlink account success', $result['result']); + } + /** * Test if null is returned when there is no hub_mode set in the request */