Partage
  • Partager sur Facebook
  • Partager sur Twitter

Trouver le chemain public avec DataPart Synfony

    25 avril 2024 à 17:17:24

    Bonjour à tous je voudrait utiliser l'api Yousing, qui permet la signature de document. Pour cela il faut générer un pdf qui est créer dans le dossier public de Symfony, mais visiplement je n'arrive pas à créer mon chemin  car j'ai l'erreur

    Unable to open path "/../../public/pdf/".

    Voici ma fonction qui permet d'uploder le pdf .

    Je me suis aider de la doc Yousing

    https://developers.yousign.com/docs/symfony-new

    Voici ma fonction:

            public function addDocumentToSignatureRequest(string $signatureRequestId, string $filename): string
            {
                // $signatureRequestId = 'c3fd4243-de20-48b3-849a-ca1012ed2b59';
                $filePath = '/path/to/pdf/';
                $filePath = '/../../public/pdf/';
        
                $formFields = [
                    'nature' => 'signable_document',
                    'file' => DataPart::fromPath($filePath, $filename, 'application'),
                ];
        
                
                $formData = new FormDataPart($formFields);
                $headers = $formData->getPreparedHeaders()->toArray();
        
                $response = $this->yousignClient->request(
                    'POST',
                    sprintf('signature_requests/%s/documents', $signatureRequestId),
                    [
                        'headers' => $headers,
                        'body' => $formData->bodyToIterable(),
                    ]
                );
        
                $StatusCode =  $response->setStatusCode();
        
                if ($StatusCode != 201) {
                    throw new Exception('Invalid strength passed ');
                }
        
                return $response->toArray();
            }
        
        

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      25 avril 2024 à 19:00:28

      Salut

      Je serais toi, plutôt que de naviguer sur un chemin relatif avec des ../, j'utiliserais le paramètre de Symfony kernel.project_dir afin d'avoir un chemin absolu.

      • Partager sur Facebook
      • Partager sur Twitter
        25 avril 2024 à 22:46:01

         Meric du renseignement, j'ai utiliser cette fonction pour uploder les photos mais je butte à remplacer la ligne :

         'file' => DataPart::fromPath(self::PATHFIL . $filename, $filename, 'application/pdf'),

        avec le kremel.

        Je suis exactement la documentation yousing avec le tuto de
        YoanDev.

        • Partager sur Facebook
        • Partager sur Twitter
          25 avril 2024 à 22:54:59

          Sans avoir plus d'indications sur ce que contient la constante PATHFIL, difficile de fournir des indications précises…

          As-tu regardé ce que contenait le paramètre de Symfony mentionné précédemment ? Tu devrais pouvoir en récupérer la valeur dans un contrôleur avec $this->getParameter(…).

          • Partager sur Facebook
          • Partager sur Twitter
            25 avril 2024 à 23:45:17

            Oui, j'ai oublier de mettre la variable PATHFIL:

                private const PATHFIL = __DIR__ . '/../../public/pdf/';


            Comme je doit récupérer un fichier pdf, j'ai créer un fichier pdf dans public.

            J'ai donc l'erreur:

            Unable to open path "C:\Users\utilisateur\immolier\src\Controller\YousignService/../../public/pdf/contract_teste.pdf".

            Le dossier YousignService et la ou j'ai mis mes fonction yousing

            -
            Edité par Frédouze 25 avril 2024 à 23:45:32

            • Partager sur Facebook
            • Partager sur Twitter
              26 avril 2024 à 0:02:04

              Je vais encore me répéter, mais essaie plutôt d'utiliser le paramètre que j'ai mentionné plutôt que __DIR__ et des "remontées de dossier`.

              Quelle bibliothèque utilises-tu pour tes requêtes vers l'API de YouSign ?

              Edit

              Ça pourrait ressembler à du Guzzle, en fait. Mais du coup, DataPart est inclue dans cette bibliothèque ? Parce que suivant comment, un "simple" file_get_contents() pourrait suffire — je ne saurais pas parler de classes Symfony pour aider dans ce cas.

              -
              Edité par Ymox 26 avril 2024 à 0:10:20

              • Partager sur Facebook
              • Partager sur Twitter
                26 avril 2024 à 16:24:38

                J'ai créer une clef api pour Yousing:

                Je t'envoie toute ma bibliothéque yousing.

                <?php
                
                namespace App\Controller\YousignService;
                
                use Symfony\Contracts\HttpClient\HttpClientInterface;
                use Symfony\Component\Mime\Part\DataPart;
                use Symfony\Component\Mime\Multipart\FormDataPart;
                
                
                class YousignService
                {
                
                
                    private const PATHFIL = __DIR__ . '/../../public/pdf/';
                
                
                
                    public function __construct(
                        private HttpClientInterface $yousignClient,
                    ) {
                    }
                
                    public function createSignatureRequest(): array
                    {
                        $response = $this->yousignClient->request(
                            'POST',
                            'signature_requests',
                            [
                                'body' => <<<JSON
                                          {
                                            "name": "The name of your Signature Request",
                                            "delivery_mode": "none",
                                            "timezone": "Europe/Paris"
                                          }
                                          JSON,
                                'headers' => [
                                    'Content-Type' => 'application/json',
                                ],
                            ]
                        );
                
                        $StatusCode =  $response->getStatusCode();
                
                        if ($StatusCode != 201) {
                            throw new Exception('Invalid strength passed ');
                        }
                
                        return $response->toArray();
                    }
                
                
                
                
                
                
                    public function addDocumentToSignatureRequest(string $signatureRequestId, string $filename,): string
                    {
                        // $signatureRequestId = 'c3fd4243-de20-48b3-849a-ca1012ed2b59';
                        $filePath = '/path/to/pdf/test.pdf';
                        $filename = 'contract_teste.pdf';
                
                        $formFields = [
                            'nature' => 'signable_document',
                            'file' => DataPart::fromPath( self::PATHFIL . $filename, $filename,  'application/pdf'),
                        ];
                
                
                        $formData = new FormDataPart($formFields);
                        $headers = $formData->getPreparedHeaders()->toArray();
                
                        $response = $this->yousignClient->request(
                            'POST',
                            sprintf('signature_requests/%s/documents', $signatureRequestId),
                            [
                                'headers' => $headers,
                                'body' => $formData->bodyToIterable(),
                            ]
                        );
                
                        $StatusCode =  $response->setStatusCode();
                
                        if ($StatusCode != 201) {
                            throw new Exception('Invalid strength passed ');
                        }
                
                        return $response->toArray();
                    }
                
                
                
                
                    public function addSignerToSignatureRequest(string $signatureRequestId, $documentId, $nom, $prenom, $email): string
                    {
                        // $signatureRequestId = 'c3fd4243-de20-48b3-849a-ca1012ed2b59';
                        //  $documentId = '34972edf-d033-40c0-9305-3341c3ce3744';
                
                        $response = $this->yousignClient->request(
                            'POST',
                            sprintf('signature_requests/%s/signers', $signatureRequestId),
                            [
                                'body' => <<<JSON
                                           {
                                               "info":{
                                                  "first_name": $nom,
                                                  "last_name":$prenom,
                                                  "email": $email,
                                                  "locale":"fr"
                                               },
                                               "fields":[
                                                  {
                                                     "type":"signature",
                                                     "document_id": $documentId,
                                                     "page":1,
                                                     "x":77,
                                                     "y":581
                                                  }
                                               ],
                                               "signature_level":"electronic_signature",
                                               "signature_authentication_mode":"no_otp"
                                           }
                                           JSON,
                                'headers' => [
                                    'Content-Type' => 'application/json',
                                ],
                            ]
                        );
                
                
                        $StatusCode =  $response->setStatusCode();
                
                        if ($StatusCode != 201) {
                            throw new Exception('Invalid strength passed ');
                        }
                
                        return $response->toArray();
                    }
                
                
                    public function activateSignatureRequest(string $signatureRequestId): string
                    {
                        //  $signatureRequestId = 'c3fd4243-de20-48b3-849a-ca1012ed2b59';
                
                        $response = $this->yousignClient->request(
                            'POST',
                            sprintf('signature_requests/%s/activate', $signatureRequestId)
                        );
                
                        $StatusCode =  $response->setStatusCode();
                
                        if ($StatusCode != 201) {
                            throw new Exception('Invalid strength passed ');
                        }
                
                        return $response->toArray();
                    }
                }
                

                J'ai suivi le tuto de Yohandev sur youtube


                https://www.youtube.com/watch?v=rGcd3iRNREY

                et la doc Yousing:


                https://developers.yousign.com/docs/symfony-new

                J'ai déjà utuliser le Kremel pour uploder photos mais j'ai des erreur quand je l’utiliser dans ce cas.



                • Partager sur Facebook
                • Partager sur Twitter
                  26 avril 2024 à 23:32:44

                  OK, il ne te reste donc plus qu'à vérifier que le fichier que tu tentes d'envoyer est bien là où tu vas le chercher.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 avril 2024 à 17:58:18

                    Merci , ca fonctionne pour l'upload ; Voici ce que j'ai modifier

                        $signatureRequestId = '1';
                     
                    
                            $formFields = [
                                'nature' => 'signable_document',
                                'file' => $homepage,
                            ];


                    Mais j'ai pas encore fait fonctionner mon api Yousing.

                    Meric de ton aide!

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Trouver le chemain public avec DataPart Synfony

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    • Editeur
                    • Markdown