SBordier44 / chorus-piste

7 stars 2 forks source link

Erreur soumission Facture #1

Closed MZK91 closed 2 years ago

MZK91 commented 2 years ago

Bonjour Sylvain,

Tout d'abord je souhaitais te remercier pour le travail que tu as effectué, car vraiment la documentation de Chorus et Piste est incompréhensible et ton travail m'a malgré tout permis d'avancer.

Néanmoins je suis actuellement bloqué lors de la soumission d'une facture, le web service me retourne constamment le même message d'erreur et ça peu importe les modifications que j'effectue, voici le message:

HTTP/1.1 100 Continue\r\n \r\n HTTP/1.1 403 Forbidden\r\n Date: Tue, 18 Oct 2022 20:43:43 GMT\r\n X-CorrelationID: Id-ff0f4f63e543e021add0c252 0\r\n WWW-Authenticate: Bearer realm="PISTE",error="[invalid field]",error_description="[invalid field]"\r\n Content-Type: application/json\r\n Transfer-Encoding: chunked\r\n X-Xss-Protection: 1; mode=block\r\n Referrer-Policy: no-referrer\r\n X-Permitted-Cross-Domain-Policies: none\r\n Expect-CT: max-age=86400, enforce, report-uri=https://example.com/ct-report\r\n

Si jamais du as une idée d'où l'erreur pourrait bien venir ?

Je te remercie par avance pour ton aide.

Gizmo091 commented 2 years ago

Bonjour, Sans voir le code que tu fais c'est délicat mais il est vrai que les erreurs de type invalid fields sont très peu explicite sur l'api piste. Si ça t'intéresse j'ai forké le projet pour le structurer d'avantage : https://github.com/Gizmo091/piste-gouv-fr ( et surtout j'avais besoin d'une compatibilité >= php7.0 ).

MZK91 commented 2 years ago

Bonjour Sylvain,

Merci pour ta réponse, je te copie mon code, je me suis inspiré de ton travail et voici ce qu'il en est:

La fonction d'envoi:

public function postFluxFacture( $template, $avecSignature = false, $syntaxeFlux = 'IN_DP_E2_UBL_INVOICE', $nomFichier = 'DepotFactureUBLE2V21.xml' ) {

    $url = 'https://sandbox-api.piste.gouv.fr/cpro/factures/v1/deposer/flux';
    $postsValues =
        [
            'idUtilisateurCourant' => 0,
            'fichierFlux' => base64_encode($template),
            'nomFichier' => $nomFichier . '.xml',
            'syntaxeFlux' => $syntaxeFlux,
            'avecSignature' => $avecSignature
        ];

    $headers =
        [
            'Authorization: Bearer ' . $this->token,
            'cpro-account: '.$this->cProAccount,
            'Content-Type: application/json;charset=utf-8',
            'Accept: application/json;charset=utf-8'
        ];

    $post = json_encode($postsValues);

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_HEADER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post);

    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

    $response = curl_exec($curl);

    dump($response);
    die;
}

Les parametres:

Comme j'avais constamment le même retour, j'ai utilisé un exemple fourni dans la documentation.

    $xml = <<<EOT

<?xml-stylesheet type="text/xsl" href="FSO1110A.xsl" ?>

A1 2.1 TSTF1104_2016006 2016-08-22 383 USD TSTF1104_2016006.pdf application/pdf 01 ...BASE 64 PDF... 00000000009545 TST070FOURNISSEUR FR 00000000009561 31 14.17 83.4000 4.17 5 TVA -50 10 20 TVA 33.4000 47.5700 47.5700 1 1 83.400 Z3241 3247 5 83.4000 2 1 -50 Z3241 3248 20 -50

EOT;

    $clientChorus->postFluxFacture($xml, false, 'IN_DP_E2_UBL_INVOICE', 'FSO1110-P30.xml ');

Je récupère bien en amont le token, j'ai bien vérifié que cela ne vienne pas de là, car quand je ne le transmet pas j'ai bien une erreur spécifique qui me précise que le token n'a pas été récupéré par l'API.

Merci par avance de tes conseils.

Gizmo091 commented 2 years ago

le token vient bien d'un environnement sandbox egalement ?

Gizmo091 commented 2 years ago

En revanche dans la doc je n'avais pas vu IN_DP_E2_UBL_INVOICE , en revanche IN_DP_E1_UBL_INVOICE existe.

Voir ici : https://communaute.chorus-pro.gouv.fr/documentation/exemples-de-flux/

Gizmo091 commented 2 years ago

Voir aussi ici pour les exemple de IN_DP_E1_UBL_INVOICE : https://communaute.chorus-pro.gouv.fr/wp-content/uploads/2018/12/201812_FSO1100A_Exemples.tar et ici pour les exemple de IN_DP_E2_UBL_INVOICE_MIN : https://communaute.chorus-pro.gouv.fr/wp-content/uploads/2017/08/FSO1110A_CPP.tar.zip

MZK91 commented 2 years ago

Le token provient bien de l'environnement de dev, j'ai également effectué les changements de format au niveau de la facture, voici le code mis à jour:

        $xml = <<<EOT
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="FSO1100A.xsl" ?>
<Invoice xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" 
         xmlns:ccts="urn:oasis:names:specification:ubl:schema:xsd:CoreComponentParameters-2" 
         xmlns:stat="urn:oasis:names:specification:ubl:schema:xsd:DocumentStatusCode-1.0" 
         xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" 
         xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" 
         xmlns:udt="urn:un:unece:uncefact:data:draft:UnqualifiedDataTypesSchemaModule:2" 
         xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" 
         xmlns:cec="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
         xmlns:aife="urn:AIFE:Facture:Extension">

    <!-- FSO1100A_P02 -->

    <cec:UBLExtensions>
        <cec:UBLExtension>
            <cec:ExtensionContent>
                <CategoryCode>A9</CategoryCode>
            </cec:ExtensionContent>
        </cec:UBLExtension>
    </cec:UBLExtensions>
    <cbc:UBLVersionID>2.1</cbc:UBLVersionID>
    <cbc:ID>FSO1100A_P02</cbc:ID> 
    <cbc:IssueDate>2018-01-01</cbc:IssueDate> 
    <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode> 
    <cbc:Note>Facture avec plusieurs lignes de facturation et TVA - Cas de sous-traitance à destination d'un service exécutant de l'Etat</cbc:Note>
    <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode> 
    <cac:InvoicePeriod>
        <cbc:StartDate>2017-01-01</cbc:StartDate>
        <cbc:EndDate>2017-12-31</cbc:EndDate> 
        <cbc:Description>Description de la periode</cbc:Description>
    </cac:InvoicePeriod>
    <cac:OrderReference> 
        <cbc:ID>0000131745</cbc:ID>
        <cbc:IssueDate>2018-01-31</cbc:IssueDate>
    </cac:OrderReference>
    <cac:BillingReference> 
        <cac:InvoiceDocumentReference>
            <cbc:ID>FAC001</cbc:ID>
        </cac:InvoiceDocumentReference>
    </cac:BillingReference>
    <cac:ContractDocumentReference>
        <cbc:ID>MP1234567890</cbc:ID>
        <cbc:IssueDate>2018-01-21</cbc:IssueDate>
        <cbc:DocumentTypeCode>Marché public</cbc:DocumentTypeCode>
    </cac:ContractDocumentReference>
    <cac:ContractDocumentReference>
        <cbc:ID>CO0987654321</cbc:ID>
        <cbc:IssueDate>2018-01-11</cbc:IssueDate>
        <cbc:DocumentTypeCode>Contrat</cbc:DocumentTypeCode>
    </cac:ContractDocumentReference>
    <cac:AdditionalDocumentReference>
        <cbc:ID>PJ1.png</cbc:ID>
        <cbc:DocumentTypeCode>image/png</cbc:DocumentTypeCode>
        <cbc:DocumentType>02</cbc:DocumentType>
        <cac:Attachment>
            <cbc:EmbeddedDocumentBinaryObject mimeCode="application/zip"> ... BASE 64... </cbc:EmbeddedDocumentBinaryObject>
        </cac:Attachment>
    </cac:AdditionalDocumentReference>  
    <cac:AccountingSupplierParty>
        <cac:Party>
            <cac:PartyIdentification>
                <cbc:ID schemeName="1">00000000091931</cbc:ID>
            </cac:PartyIdentification>
            <cac:PartyName>
                <cbc:Name>Nom commercial du fournisseur</cbc:Name>
            </cac:PartyName>
            <cac:PostalAddress>
                <cbc:StreetName>Adresse commerciale du fournisseur</cbc:StreetName>
                <cbc:AdditionalStreetName>Complement d'adresse commerciale du fournisseur</cbc:AdditionalStreetName>
                <cbc:CityName>Commune commerciale du fournisseur</cbc:CityName>
                <cbc:PostalZone>01001</cbc:PostalZone>  
                <cac:Country>
                    <cbc:IdentificationCode>FR</cbc:IdentificationCode>
                </cac:Country>
            </cac:PostalAddress>
            <cac:PartyTaxScheme>
                <cbc:CompanyID>FR00000000001</cbc:CompanyID>
                <cac:TaxScheme>
                    <cbc:TaxTypeCode>TVA DEBIT</cbc:TaxTypeCode>
                </cac:TaxScheme>
            </cac:PartyTaxScheme>
            <cac:PartyLegalEntity>
                <cbc:RegistrationName>Raison sociale du fournisseur</cbc:RegistrationName>
                <cac:RegistrationAddress>
                    <cbc:StreetName>Adresse legale du fournisseur</cbc:StreetName>
                    <cbc:AdditionalStreetName>Complement d'adresse legale du fournisseur</cbc:AdditionalStreetName>
                    <cbc:CityName>Commune legale du fournisseur</cbc:CityName>
                    <cbc:PostalZone>01002</cbc:PostalZone>
                    <cac:Country>
                        <cbc:IdentificationCode>FR</cbc:IdentificationCode>
                    </cac:Country>
                </cac:RegistrationAddress>
            </cac:PartyLegalEntity>
            <cac:Contact>
                <cbc:ID>SERV_FOUR</cbc:ID>
                <cbc:Name>Nom du service fournisseur</cbc:Name>
                <cbc:Note>Commentaires sur le fournisseur</cbc:Note>
            </cac:Contact>
            <cac:AgentParty>
                <cac:PartyIdentification>
                    <cbc:ID schemeName="1">00000000012664</cbc:ID>
                </cac:PartyIdentification>
                <cac:PartyLegalEntity>
                    <cbc:RegistrationName>Raison sociale du valideur</cbc:RegistrationName>
                    <cac:RegistrationAddress>
                        <cbc:StreetName>Adresse du valideur</cbc:StreetName>
                        <cbc:AdditionalStreetName>Complement d'adresse du valideur</cbc:AdditionalStreetName>
                        <cbc:CityName>Commune du valideur</cbc:CityName>
                        <cbc:PostalZone>03000</cbc:PostalZone>  
                        <cac:Country>
                            <cbc:IdentificationCode>FR</cbc:IdentificationCode>
                        </cac:Country>
                    </cac:RegistrationAddress>
                </cac:PartyLegalEntity> 
                <cac:Contact>
                    <cbc:Name>Nom du contact valideur</cbc:Name>
                    <cbc:Telephone>+33000000003</cbc:Telephone>
                    <cbc:Telefax>+33100000003</cbc:Telefax>
                    <cbc:ElectronicMail>valideur@cpp2017.fr</cbc:ElectronicMail>
                </cac:Contact>
            </cac:AgentParty>
        </cac:Party>
        <cac:AccountingContact>
            <cbc:Name>Nom du contact fournisseur</cbc:Name>
            <cbc:Telephone>+33000000001</cbc:Telephone>
            <cbc:Telefax>+33100000001</cbc:Telefax>
            <cbc:ElectronicMail>fournisseur@cpp2017.fr</cbc:ElectronicMail>
        </cac:AccountingContact>
    </cac:AccountingSupplierParty>
    <cac:AccountingCustomerParty>
        <cac:Party>
            <cac:PartyIdentification>
                <cbc:ID schemeName="1">11000201100044</cbc:ID>
            </cac:PartyIdentification>
            <cac:PartyName>
                <cbc:Name>Raison sociale du debiteur</cbc:Name>
            </cac:PartyName>
            <cac:PostalAddress>
                <cbc:StreetName>Adresse du debiteur</cbc:StreetName>
                <cbc:AdditionalStreetName>Complement d'adresse du debiteur</cbc:AdditionalStreetName>
                <cbc:CityName>Commune du debiteur</cbc:CityName>
                <cbc:PostalZone>02000</cbc:PostalZone>
                <cac:Country>
                    <cbc:IdentificationCode>FR</cbc:IdentificationCode>
                </cac:Country>
            </cac:PostalAddress>
            <cac:PartyTaxScheme>
                <cbc:CompanyID>FR00000000002</cbc:CompanyID>
                <cac:TaxScheme/>
            </cac:PartyTaxScheme>
            <cac:Contact>
                <cbc:Note>Commentaires sur le debiteur</cbc:Note>
            </cac:Contact>
        </cac:Party>
        <cac:AccountingContact>
            <cbc:ID>SFACETAT</cbc:ID>
            <cbc:Name>Nom du service debiteur</cbc:Name>
        </cac:AccountingContact>
    </cac:AccountingCustomerParty>
    <cac:PayeeParty>
        <cac:PartyIdentification>
            <cbc:ID schemeName="1">00000000054013</cbc:ID>
        </cac:PartyIdentification>
        <cac:PartyName>
            <cbc:Name>Raison sociale de l'encaisseur</cbc:Name>
        </cac:PartyName>
        <cac:PartyLegalEntity>
            <cac:RegistrationAddress>
                <cbc:StreetName>Adresse de l'encaisseur</cbc:StreetName>
                <cbc:AdditionalStreetName>Complement d'adresse de l'encaisseur</cbc:AdditionalStreetName>
                <cbc:CityName>Commune de l'encaisseur</cbc:CityName>
                <cbc:PostalZone>04000</cbc:PostalZone>
                <cac:Country>
                    <cbc:IdentificationCode>FR</cbc:IdentificationCode>
                </cac:Country>
            </cac:RegistrationAddress>
        </cac:PartyLegalEntity>
        <cac:Contact>
            <cbc:Name>Nom du contact encaisseur</cbc:Name>
            <cbc:Telephone>+33000000004</cbc:Telephone>
            <cbc:Telefax>+33100000004</cbc:Telefax>         
            <cbc:ElectronicMail>encaisseur@cpp.fr</cbc:ElectronicMail>
        </cac:Contact>
    </cac:PayeeParty>   
    <cac:Delivery>
        <cac:DeliveryLocation>
            <cbc:ID>SiteID</cbc:ID>
            <cbc:Description>Nom du site de livraison</cbc:Description>
            <cac:Address>
                <cbc:StreetName>Adresse du site de livraison</cbc:StreetName>
                <cbc:AdditionalStreetName>Complement d'adresse du site de livraison</cbc:AdditionalStreetName>
                <cbc:CityName>Commune du site de livraison</cbc:CityName>
                <cbc:PostalZone>05000</cbc:PostalZone>
                <cac:Country>
                    <cbc:IdentificationCode>FR</cbc:IdentificationCode>
                </cac:Country>
            </cac:Address>
        </cac:DeliveryLocation>
    </cac:Delivery>
    <cac:PaymentMeans>
        <cbc:PaymentMeansCode listID="UN/ECE 4461 Subset"
        listAgencyID="NES" listAgencyName="Northern European Subset"
        listName="Payment Means">42</cbc:PaymentMeansCode>
        <cbc:PaymentDueDate>2018-12-31</cbc:PaymentDueDate>
        <cbc:PaymentChannelCode>IBAN</cbc:PaymentChannelCode>
        <cac:PayeeFinancialAccount>
            <cbc:ID>FR0000000000000000000000000</cbc:ID>
            <cac:FinancialInstitutionBranch>
                <cbc:ID>BNPAFRPPXXX</cbc:ID>
            </cac:FinancialInstitutionBranch>
        </cac:PayeeFinancialAccount>        
    </cac:PaymentMeans>
    <cac:PaymentTerms>
        <cbc:Note>Note relative au mode de paiement</cbc:Note>
    </cac:PaymentTerms>
    <cac:AllowanceCharge>
        <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
        <cbc:AllowanceChargeReasonCode>C</cbc:AllowanceChargeReasonCode>
        <cbc:AllowanceChargeReason>ChargePied</cbc:AllowanceChargeReason>
        <cbc:Amount currencyID="EUR">8</cbc:Amount>
        <cbc:BaseAmount currencyID="EUR">723</cbc:BaseAmount>
    </cac:AllowanceCharge>  
    <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:AllowanceChargeReasonCode>R</cbc:AllowanceChargeReasonCode>
        <cbc:AllowanceChargeReason>RemisePied</cbc:AllowanceChargeReason>
        <cbc:Amount currencyID="EUR">31</cbc:Amount>
        <cbc:BaseAmount currencyID="EUR">723</cbc:BaseAmount>
    </cac:AllowanceCharge>
    <cac:TaxTotal>
        <cbc:TaxAmount currencyID="EUR">93</cbc:TaxAmount>
        <cac:TaxSubtotal>
            <cbc:TaxableAmount currencyID="EUR">330</cbc:TaxableAmount>
            <cbc:TaxAmount currencyID="EUR">33</cbc:TaxAmount>
            <cbc:Percent>10</cbc:Percent>
            <cac:TaxCategory>
                <cac:TaxScheme>
                    <cbc:TaxTypeCode>TVA10</cbc:TaxTypeCode>
                </cac:TaxScheme>
            </cac:TaxCategory>
        </cac:TaxSubtotal>
        <cac:TaxSubtotal>
            <cbc:TaxableAmount currencyID="EUR">300</cbc:TaxableAmount>
            <cbc:TaxAmount currencyID="EUR">60</cbc:TaxAmount>
            <cbc:Percent>20</cbc:Percent>
            <cac:TaxCategory>
                <cac:TaxScheme>
                    <cbc:TaxTypeCode>TVA20</cbc:TaxTypeCode>
                </cac:TaxScheme>
            </cac:TaxCategory>
        </cac:TaxSubtotal>      
    </cac:TaxTotal> 
    <cac:LegalMonetaryTotal>
        <cbc:TaxExclusiveAmount currencyID="EUR">630</cbc:TaxExclusiveAmount>
        <cbc:TaxInclusiveAmount currencyID="EUR">700</cbc:TaxInclusiveAmount>
        <cbc:AllowanceTotalAmount currencyID="EUR">31</cbc:AllowanceTotalAmount>
        <cbc:ChargeTotalAmount currencyID="EUR">8</cbc:ChargeTotalAmount>
        <cbc:PrepaidAmount currencyID="EUR">20</cbc:PrepaidAmount>
        <cbc:PayableAmount currencyID="EUR">680</cbc:PayableAmount>
    </cac:LegalMonetaryTotal>
    <cac:InvoiceLine>
        <cbc:ID>1</cbc:ID>
        <cbc:Note>Description de la ligne 1</cbc:Note>
        <cbc:InvoicedQuantity unitCode="U1">2</cbc:InvoicedQuantity>
        <cbc:LineExtensionAmount currencyID="EUR">300</cbc:LineExtensionAmount>
        <cac:Delivery>
            <cbc:ID>Site1</cbc:ID>
            <cbc:ActualDeliveryDate>2001-01-01</cbc:ActualDeliveryDate>
        </cac:Delivery>
        <cac:AllowanceCharge>
            <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
            <cbc:AllowanceChargeReasonCode>C1</cbc:AllowanceChargeReasonCode>
            <cbc:AllowanceChargeReason>ChargeLigne1</cbc:AllowanceChargeReason>
            <cbc:Amount currencyID="EUR">60</cbc:Amount>
            <cbc:BaseAmount currencyID="EUR">240</cbc:BaseAmount>
        </cac:AllowanceCharge>
        <cac:Item>
            <cbc:Description>Complement 1</cbc:Description>
            <cbc:Name>Nom du produit 1</cbc:Name>
            <cac:StandardItemIdentification>
                <cbc:ID>Reference produit 1</cbc:ID>
            </cac:StandardItemIdentification>
            <cac:ClassifiedTaxCategory>
                <cbc:Percent>20</cbc:Percent>
                <cac:TaxScheme>
                    <cbc:TaxTypeCode>TVA1</cbc:TaxTypeCode>
                </cac:TaxScheme>
            </cac:ClassifiedTaxCategory>
            <cac:AdditionalItemProperty>
                <cbc:Name>TYPE_LIGNE</cbc:Name>
                <cbc:Value>DETAIL</cbc:Value>
            </cac:AdditionalItemProperty>
        </cac:Item>
        <cac:Price>
            <cbc:PriceAmount currencyID="EUR">120</cbc:PriceAmount>
            <cbc:BaseQuantity unitCode="U1">1</cbc:BaseQuantity>
        </cac:Price>
    </cac:InvoiceLine>
    <cac:InvoiceLine>
        <cbc:ID>2</cbc:ID>
        <cbc:Note>Description de la ligne 2</cbc:Note>
        <cbc:InvoicedQuantity unitCode="U2">5</cbc:InvoicedQuantity>
        <cbc:LineExtensionAmount currencyID="EUR">80</cbc:LineExtensionAmount>
        <cac:Delivery>
            <cbc:ID>Site2</cbc:ID>
            <cbc:ActualDeliveryDate>2002-02-02</cbc:ActualDeliveryDate>
        </cac:Delivery>
        <cac:AllowanceCharge>
            <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
            <cbc:AllowanceChargeReasonCode>R2</cbc:AllowanceChargeReasonCode>
            <cbc:AllowanceChargeReason>RemiseLigne2</cbc:AllowanceChargeReason>
            <cbc:Amount currencyID="EUR">20</cbc:Amount>
            <cbc:BaseAmount currencyID="EUR">100</cbc:BaseAmount>
        </cac:AllowanceCharge>
        <cac:Item>
            <cbc:Description>Complement 2</cbc:Description>
            <cbc:Name>Nom du produit 2</cbc:Name>
            <cac:StandardItemIdentification>
                <cbc:ID>Reference produit 2</cbc:ID>
            </cac:StandardItemIdentification>
            <cac:ClassifiedTaxCategory>
                <cbc:Percent>10</cbc:Percent>
                <cac:TaxScheme>
                    <cbc:TaxTypeCode>TVA2</cbc:TaxTypeCode>
                </cac:TaxScheme>
            </cac:ClassifiedTaxCategory>
            <cac:AdditionalItemProperty>
                <cbc:Name>TYPE_LIGNE</cbc:Name>
                <cbc:Value>DETAIL</cbc:Value>
            </cac:AdditionalItemProperty>
        </cac:Item>
        <cac:Price>
            <cbc:PriceAmount currencyID="EUR">20</cbc:PriceAmount>
            <cbc:BaseQuantity unitCode="U2">1</cbc:BaseQuantity>
        </cac:Price>
    </cac:InvoiceLine>
    <cac:InvoiceLine>
        <cbc:ID>3</cbc:ID>
        <cbc:Note>Description de la ligne 3</cbc:Note>
        <cbc:InvoicedQuantity unitCode="U3">3</cbc:InvoicedQuantity>
        <cbc:LineExtensionAmount currencyID="EUR">250</cbc:LineExtensionAmount>
        <cac:Delivery>
            <cbc:ID>Site3</cbc:ID>
            <cbc:ActualDeliveryDate>2003-03-03</cbc:ActualDeliveryDate>
        </cac:Delivery>
        <cac:AllowanceCharge>
            <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
            <cbc:AllowanceChargeReasonCode>R3</cbc:AllowanceChargeReasonCode>
            <cbc:AllowanceChargeReason>RemiseLigne3</cbc:AllowanceChargeReason>
            <cbc:Amount currencyID="EUR">60</cbc:Amount>
            <cbc:BaseAmount currencyID="EUR">300</cbc:BaseAmount>
        </cac:AllowanceCharge>
        <cac:AllowanceCharge>
            <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
            <cbc:AllowanceChargeReasonCode>C3</cbc:AllowanceChargeReasonCode>
            <cbc:AllowanceChargeReason>ChargeLigne3</cbc:AllowanceChargeReason>
            <cbc:Amount currencyID="EUR">10</cbc:Amount>
            <cbc:BaseAmount currencyID="EUR">300</cbc:BaseAmount>
        </cac:AllowanceCharge>
        <cac:Item>
            <cbc:Description>Complement 3</cbc:Description>
            <cbc:Name>Nom du produit 3</cbc:Name>
            <cac:StandardItemIdentification>
                <cbc:ID>Reference produit 3</cbc:ID>
            </cac:StandardItemIdentification>
            <cac:ClassifiedTaxCategory>
                <cbc:Percent>10</cbc:Percent>
                <cac:TaxScheme>
                    <cbc:TaxTypeCode>TVA3</cbc:TaxTypeCode>
                </cac:TaxScheme>
            </cac:ClassifiedTaxCategory>
            <cac:AdditionalItemProperty>
                <cbc:Name>TYPE_LIGNE</cbc:Name>
                <cbc:Value>DETAIL</cbc:Value>
            </cac:AdditionalItemProperty>
        </cac:Item>
        <cac:Price>
            <cbc:PriceAmount currencyID="EUR">100</cbc:PriceAmount>
            <cbc:BaseQuantity unitCode="U3">1</cbc:BaseQuantity>
        </cac:Price>
    </cac:InvoiceLine>  
</Invoice>
EOT;

        $clientChorus = new ChorusPisteUtil($clientId, $clientSecret, $login, $password, true);
        $clientChorus->postFluxFacture($xml, false, 'IN_DP_E1_UBL_INVOICE', 'FSO1110-P30.xml 

Voici les dumps des différentes étapes:

line 55:
"https://sandbox-oauth.piste.gouv.fr/api/oauth/token"

line 56:
"https://sandbox-api.piste.gouv.fr"

line 89:
"BABuGKNvE2TeE20VTsdKcpPpa3TQ61pFJhoNXv4WtOWokE4Kk6sIH1"

line 90:
"R0VTVF9QUklWRV8xXzgxMTU4OTE0NjkwMTAxQGNwcm8uZnI6aG1zY2prS2FiLmNlNg=="

line 175:
"""
HTTP/1.1 100 Continue\r\n
\r\n
HTTP/1.1 403 Forbidden\r\n
Date: Wed, 19 Oct 2022 15:05:54 GMT\r\n
X-CorrelationID: Id-52125063f41b7b0b3a79d7ef 0\r\n
WWW-Authenticate: Bearer realm="PISTE",error="[invalid field]",error_description="[invalid field]"\r\n
Content-Type: application/json\r\n
Transfer-Encoding: chunked\r\n
X-Xss-Protection: 1; mode=block\r\n
Referrer-Policy: no-referrer\r\n
X-Permitted-Cross-Domain-Policies: none\r\n
Expect-CT: max-age=86400, enforce, report-uri=https://example.com/ct-report\r\n
\r\n

"""
Gizmo091 commented 2 years ago

Et vous avez changé la syntaxeFlux ?

MZK91 commented 2 years ago

La syntaxe flux est celle que tu m'as demandé d'utiliser "IN_DP_E1_UBL_INVOICE" avec le XML correspondant trouvé dans le zip que j'ai téléchargé du site officiel, c'est pour ça que je n'arrives pas à comprendre d'où peut bien venir l'erreur qui n'est pas très explicite.

Gizmo091 commented 2 years ago

Tu as essayé de faire tes requêtes avec un outils type postman pour voir si ça passe ? Il faudrait avoir une trace de la requête et de la réponse pour bien savoir.

Quand tu fais ça : 'fichierFlux' => base64_encode($template),est ce que $template est le contenu du fichier ou le path.

Gizmo091 commented 2 years ago

Le problème venait d'où ?

MZK91 commented 2 years ago

Une erreur stupide d'activation d'API. Petite question, quel est le format le plus simple que tu utilises pour envoyer une facture ?

Gizmo091 commented 2 years ago

Une erreur stupide d'activation d'API. Petite question, quel est le format le plus simple que tu utilises pour envoyer une facture ?

je comprend, c'est un enfer de comprendre ce qu'on fait sur ces différentes plateformes. Moi j'ai préféré soumettre des PDF que je génère dans notre format de facture.