<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title><![CDATA[Forum du club des développeurs et IT Pro - Web & réseau]]></title>
		<link>https://www.developpez.net/forums/</link>
		<description>Développement web et programmation réseau avec Delphi</description>
		<language>fr</language>
		<lastBuildDate>Thu, 23 Jul 2026 10:03:10 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.png</url>
			<title><![CDATA[Forum du club des développeurs et IT Pro - Web & réseau]]></title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title>Delphi appel API ne fonctionne pas Sous Delphi, peut être faut il utiliser TOAuth1Authenticator</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2184223&amp;goto=newpost</link>
			<pubDate>Mon, 15 Jun 2026 08:03:00 GMT</pubDate>
			<description>Bonjour, je rencontre de...</description>
			<content:encoded><![CDATA[<div>Bonjour, je rencontre de nouveau un souci avec une API<br />
le fournisseur me donne une Clé et secret ID<br />
je calcule un HASH ensuite que je mets en base 64<br />
je crée ensuite un autorizationHeader<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">authorizationHeader := <span style="color: #FF0000;">'GCS v1HMAC:'</span> + apiKey + <span style="color: #FF0000;">':'</span> + hmacSignature;</code><hr />
</div>que je mets ainsi dans ma requête<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0">Headers<span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span> := TNameValuePair.Create<span class="br0">&#40;</span><span style="color: #FF0000;">'Authorization'</span>, authorizationHeader<span class="br0">&#41;</span>;
Headers<span class="br0">&#91;</span><span style="color: #cc66cc;">1</span><span class="br0">&#93;</span> := TNameValuePair.Create<span class="br0">&#40;</span><span style="color: #FF0000;">'Date'</span>, dateRFC1123<span class="br0">&#41;</span>;
Headers<span class="br0">&#91;</span><span style="color: #cc66cc;">2</span><span class="br0">&#93;</span> := TNameValuePair.Create<span class="br0">&#40;</span><span style="color: #FF0000;">'Content-Type'</span>, contentType<span class="br0">&#41;</span>;
Headers<span class="br0">&#91;</span><span style="color: #cc66cc;">3</span><span class="br0">&#93;</span> := TNameValuePair.Create<span class="br0">&#40;</span><span style="color: #FF0000;">'Accept'</span>, <span style="color: #FF0000;">'application/json'</span><span class="br0">&#41;</span>;</pre></td></tr></table></code><hr />
</div>en faisant ça j'ai systématiquement une erreur 403<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			[18:08:12] Response Content:<br />
[18:08:12] {<br />
&quot;errorId&quot;: &quot;cd56e7ef-9d2a-4dbf-901b-f12868521003&quot;,<br />
&quot;errors&quot;: [<br />
{<br />
&quot;code&quot;: &quot;9007&quot;,<br />
&quot;id&quot;: &quot;ACCESS_TO_MERCHANT_NOT_ALLOWED&quot;,<br />
&quot;category&quot;: &quot;DIRECT_PLATFORM_ERROR&quot;,<br />
&quot;message&quot;: &quot;ACCESS_TO_MERCHANT_NOT_ALLOWED&quot;,<br />
&quot;httpStatusCode&quot;: 403<br />
}<br />
],<br />
&quot;status&quot;: 403<br />
}<br />
[18:08:12]<br />
[18:08:12] ERROR 403: ACCESS_TO_MERCHANT_NOT_ALLOWED.<br />
[18:08:12] Check merchant access, API key permissions, and IP whitelist.<br />
[18:08:12]<br />
[18:08:12] === Payment Links API Test Completed ===
			
		<hr />
	</div>
</div>Je me demande s'il ne faut pas utiliser<br />
TOAuth1Authenticator mais je ne sais pas comment le paramétrer ici, si quelqu'un a une idée, je mets le code complet de la procédure ci dessous.<br />
<br />
Merci d'avance pour toute aide.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="40"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">procedure</span> TPaymentLinksTestForm.CreatePaymentLink;
<span style="color: #0000ff;">var</span>
HTTPClient: THTTPClient;
RequestBodyStream: TStringStream;
Response: IHTTPResponse;
Headers: TNetHeaders;
&nbsp;
pspid: <span style="color: #0080ff;">string</span>;
apiKey: <span style="color: #0080ff;">string</span>;
secretKey: <span style="color: #0080ff;">string</span>;
&nbsp;
requestMethod: <span style="color: #0080ff;">string</span>;
contentType: <span style="color: #0080ff;">string</span>;
baseURL: <span style="color: #0080ff;">string</span>;
resourcePath: <span style="color: #0080ff;">string</span>;
fullURL: <span style="color: #0080ff;">string</span>;
&nbsp;
dateRFC1123: <span style="color: #0080ff;">string</span>;
stringToHash: <span style="color: #0080ff;">string</span>;
hmacSignature: <span style="color: #0080ff;">string</span>;
authorizationHeader: <span style="color: #0080ff;">string</span>;
&nbsp;
jsonBody: <span style="color: #0080ff;">string</span>;
responseContent: <span style="color: #0080ff;">string</span>;
<span style="color: #0000ff;">begin</span>
<span style="color: #0000ff;">try</span>
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'=== Payment Links API Test Started ==='</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #808080;">// =========================================================</span>
<span style="color: #808080;">// CONFIGURATION</span>
<span style="color: #808080;">// =========================================================</span>
pspid := <span style="color: #FF0000;">'PRINTEMPS4'</span>;
&nbsp;
<span style="color: #808080;">// Replace these values with the real API key and secret.</span>
<span style="color: #808080;">// Important: if the previous secret was shared externally, rotate it.</span>
apiKey := <span style="color: #FF0000;">'YOUR_API_KEY_HERE'</span>;
secretKey := <span style="color: #FF0000;">'YOUR_SECRET_KEY_HERE'</span>;
&nbsp;
requestMethod := <span style="color: #FF0000;">'POST'</span>;
contentType := <span style="color: #FF0000;">'application/json'</span>;
&nbsp;
baseURL := <span style="color: #FF0000;">'https://payment.preprod.direct.worldline-solutions.com'</span>;
&nbsp;
<span style="color: #808080;">// This path is used BOTH for the URL and for the HMAC string.</span>
<span style="color: #808080;">// For the HMAC, it must be the path only, not the full URL.</span>
resourcePath := <span style="color: #FF0000;">'/v2/'</span> + pspid + <span style="color: #FF0000;">'/paymentlinks'</span>;
&nbsp;
fullURL := baseURL + resourcePath;
&nbsp;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'PSPID: '</span> + pspid<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Request Method: '</span> + requestMethod<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Content-Type: '</span> + contentType<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Base URL: '</span> + baseURL<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Resource Path: '</span> + resourcePath<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Full URL: '</span> + fullURL<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">''</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #808080;">// =========================================================</span>
<span style="color: #808080;">// DATE HEADER</span>
<span style="color: #808080;">// =========================================================</span>
dateRFC1123 := GetRFC1123DateTime;
&nbsp;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Date header: '</span> + dateRFC1123<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">''</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #808080;">// =========================================================</span>
<span style="color: #808080;">// HMAC SIGNATURE</span>
<span style="color: #808080;">// =========================================================</span>
<span style="color: #808080;">// Worldline HMAC string format:</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">// POST</span>
<span style="color: #808080;">// application/json</span>
<span style="color: #808080;">// Tue, 10 Jun 2026 12:34:56 GMT</span>
<span style="color: #808080;">// /v2/PRINTEMPS4/paymentlinks</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">// Use LF only: #10</span>
<span style="color: #808080;">// Do not use CRLF: #13#10</span>
<span style="color: #808080;">// Do not add the full host.</span>
<span style="color: #808080;">// Do not add an extra blank line unless the API documentation requires</span>
<span style="color: #808080;">// signed x-gcs headers.</span>
stringToHash :=
requestMethod + <span style="color: #cc66cc;">#10</span> +
contentType + <span style="color: #cc66cc;">#10</span> +
dateRFC1123 + <span style="color: #cc66cc;">#10</span> +
resourcePath;
&nbsp;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'String To Hash:'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span>StringReplace<span class="br0">&#40;</span>stringToHash, <span style="color: #cc66cc;">#10</span>, <span style="color: #FF0000;">'\n'</span>, <span class="br0">&#91;</span>rfReplaceAll<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">''</span><span class="br0">&#41;</span>;
&nbsp;
hmacSignature := ComputeHMACSHA256<span class="br0">&#40;</span>stringToHash, secretKey<span class="br0">&#41;</span>;
&nbsp;
authorizationHeader := <span style="color: #FF0000;">'GCS v1HMAC:'</span> + apiKey + <span style="color: #FF0000;">':'</span> + hmacSignature;
&nbsp;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'HMAC Signature: '</span> + hmacSignature<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Authorization Header: GCS v1HMAC:'</span> + apiKey + <span style="color: #FF0000;">':&lt;signature hidden&gt;'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">''</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #808080;">// =========================================================</span>
<span style="color: #808080;">// JSON BODY</span>
<span style="color: #808080;">// =========================================================</span>
jsonBody :=
<span style="color: #FF0000;">'{'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">' &quot;expirationDate&quot;: &quot;2026-08-01T14:15:22Z&quot;,'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">' &quot;description&quot;: &quot;TEST Payment Link - '</span> + FormatDateTime<span class="br0">&#40;</span><span style="color: #FF0000;">'yyyymmdd hhnn'</span>, Now<span class="br0">&#41;</span> + <span style="color: #FF0000;">'&quot;,'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">' &quot;paymentLinkOrder&quot;: {'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">' &quot;merchantReference&quot;: &quot;PRINTEMPS4-'</span> + FormatDateTime<span class="br0">&#40;</span><span style="color: #FF0000;">'yyyymmddhhnnss'</span>, Now<span class="br0">&#41;</span> + <span style="color: #FF0000;">'&quot;,'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">' &quot;amount&quot;: {'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">' &quot;amount&quot;: 1000,'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">' &quot;currencyCode&quot;: &quot;EUR&quot;'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">' }'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">' },'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">' &quot;recipientName&quot;: &quot;Jean Bon&quot;,'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">' &quot;merchantReference&quot;: &quot;your-order-'</span> + FormatDateTime<span class="br0">&#40;</span><span style="color: #FF0000;">'yyyymmddhhnnss'</span>, Now<span class="br0">&#41;</span> + <span style="color: #FF0000;">'&quot;'</span> + <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span> +
<span style="color: #FF0000;">'}'</span>;
&nbsp;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'JSON Body:'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span>jsonBody<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">''</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #808080;">// =========================================================</span>
<span style="color: #808080;">// HTTP HEADERS</span>
<span style="color: #808080;">// =========================================================</span>
SetLength<span class="br0">&#40;</span>Headers, <span style="color: #cc66cc;">4</span><span class="br0">&#41;</span>;
&nbsp;
Headers<span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span> := TNameValuePair.Create<span class="br0">&#40;</span><span style="color: #FF0000;">'Authorization'</span>, authorizationHeader<span class="br0">&#41;</span>;
Headers<span class="br0">&#91;</span><span style="color: #cc66cc;">1</span><span class="br0">&#93;</span> := TNameValuePair.Create<span class="br0">&#40;</span><span style="color: #FF0000;">'Date'</span>, dateRFC1123<span class="br0">&#41;</span>;
Headers<span class="br0">&#91;</span><span style="color: #cc66cc;">2</span><span class="br0">&#93;</span> := TNameValuePair.Create<span class="br0">&#40;</span><span style="color: #FF0000;">'Content-Type'</span>, contentType<span class="br0">&#41;</span>;
Headers<span class="br0">&#91;</span><span style="color: #cc66cc;">3</span><span class="br0">&#93;</span> := TNameValuePair.Create<span class="br0">&#40;</span><span style="color: #FF0000;">'Accept'</span>, <span style="color: #FF0000;">'application/json'</span><span class="br0">&#41;</span>;
&nbsp;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Headers:'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">' Authorization: GCS v1HMAC:'</span> + apiKey + <span style="color: #FF0000;">':&lt;signature hidden&gt;'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">' Date: '</span> + dateRFC1123<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">' Content-Type: '</span> + contentType<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">' Accept: application/json'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">''</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #808080;">// =========================================================</span>
<span style="color: #808080;">// EXECUTE REQUEST</span>
<span style="color: #808080;">// =========================================================</span>
HTTPClient := THTTPClient.Create;
<span style="color: #0000ff;">try</span>
HTTPClient.ConnectionTimeout := <span style="color: #cc66cc;">30000</span>;
HTTPClient.ResponseTimeout := <span style="color: #cc66cc;">30000</span>;
HTTPClient.UserAgent := <span style="color: #FF0000;">'Delphi Payment Links Test'</span>;
&nbsp;
RequestBodyStream := TStringStream.Create<span class="br0">&#40;</span>jsonBody, TEncoding.UTF8<span class="br0">&#41;</span>;
<span style="color: #0000ff;">try</span>
RequestBodyStream.Position := <span style="color: #cc66cc;">0</span>;
&nbsp;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Executing POST request...'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">''</span><span class="br0">&#41;</span>;
&nbsp;
Response := HTTPClient.Post<span class="br0">&#40;</span>
fullURL,
RequestBodyStream,
<span style="color: #0000ff;">nil</span>,
Headers
<span class="br0">&#41;</span>;
&nbsp;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'=== RESPONSE ==='</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'HTTP Status Code: '</span> + IntToStr<span class="br0">&#40;</span>Response.StatusCode<span class="br0">&#41;</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Status Text: '</span> + Response.StatusText<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">''</span><span class="br0">&#41;</span>;
&nbsp;
responseContent := Response.ContentAsString<span class="br0">&#40;</span>TEncoding.UTF8<span class="br0">&#41;</span>;
&nbsp;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Response Content:'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span>responseContent<span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">''</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">case</span> Response.StatusCode <span style="color: #0000ff;">of</span>
<span style="color: #cc66cc;">200</span>, <span style="color: #cc66cc;">201</span>:
<span style="color: #0000ff;">begin</span>
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'SUCCESS: Payment Link created.'</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">end</span>;
&nbsp;
<span style="color: #cc66cc;">400</span>:
<span style="color: #0000ff;">begin</span>
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'ERROR 400: Bad Request.'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Check the JSON payload/schema.'</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">end</span>;
&nbsp;
<span style="color: #cc66cc;">401</span>:
<span style="color: #0000ff;">begin</span>
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'ERROR 401: Unauthorized.'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Check API key, secret key, Date header, HMAC string, and Content-Type.'</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">end</span>;
&nbsp;
<span style="color: #cc66cc;">403</span>:
<span style="color: #0000ff;">begin</span>
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'ERROR 403: ACCESS_TO_MERCHANT_NOT_ALLOWED.'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Check merchant access, API key permissions, and IP whitelist.'</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">end</span>;
&nbsp;
<span style="color: #cc66cc;">406</span>:
<span style="color: #0000ff;">begin</span>
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'ERROR 406: Not Acceptable.'</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'Check the endpoint URL, Accept header, Content-Type header, and Payment Links API activation.'</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">end</span>;
&nbsp;
<span style="color: #0000ff;">else</span>
<span style="color: #0000ff;">begin</span>
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'ERROR: HTTP '</span> + IntToStr<span class="br0">&#40;</span>Response.StatusCode<span class="br0">&#41;</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">end</span>;
<span style="color: #0000ff;">end</span>;
&nbsp;
<span style="color: #0000ff;">finally</span>
RequestBodyStream.Free;
<span style="color: #0000ff;">end</span>;
&nbsp;
<span style="color: #0000ff;">finally</span>
HTTPClient.Free;
<span style="color: #0000ff;">end</span>;
&nbsp;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">''</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'=== Payment Links API Test Completed ==='</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">except</span>
<span style="color: #0000ff;">on</span> E: Exception <span style="color: #0000ff;">do</span>
<span style="color: #0000ff;">begin</span>
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">''</span><span class="br0">&#41;</span>;
LogMessage<span class="br0">&#40;</span><span style="color: #FF0000;">'EXCEPTION: '</span> + E.ClassName + <span style="color: #FF0000;">' - '</span> + E.Message<span class="br0">&#41;</span>;
<span style="color: #0000ff;">end</span>;
<span style="color: #0000ff;">end</span>;
<span style="color: #0000ff;">end</span>;</pre></td></tr></table></code><hr />
</div></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f779/environnements-developpement/delphi/web-reseau/"><![CDATA[Web & réseau]]></category>
			<dc:creator>nakos91</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2184223/environnements-developpement/delphi/web-reseau/delphi-appel-api-ne-fonctionne-sous-delphi-etre-faut-utiliser-toauth1authenticator/</guid>
		</item>
		<item>
			<title>Delphi appel API ne fonctionne pas sous Delphi mais ok sous postman et powershell</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182705&amp;goto=newpost</link>
			<pubDate>Tue, 17 Mar 2026 14:34:06 GMT</pubDate>
			<description>bonjour je dois faire un...</description>
			<content:encoded><![CDATA[<div>bonjour je dois faire un appel post vers une serveur pour mettre à jour des datas <br />
je fait un 1er appel afin de recupérer un Bearer , cela fonctionne dans Delphi<br />
<br />
puis un second appel pour faire la MAJ des données et là alors que ça fonctionne sans souci dans postman , dans powershell impossible de le faire fonctionner dans débogueur REST  12.0 ni dans Delphi <br />
<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td valign="top"><pre style="margin: 0">$headers = New-<span style="color: #0000ff;">Object</span> <span style="color: #FF0000;">&quot;System.Collections.Generic.Dictionary[[String],[String]]&quot;</span>
$headers.Add<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Authorization&quot;</span>, <span style="color: #FF0000;">&quot;Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMyIsImF1dGgiOiJBZG1pbmlzdHJhdGV1ciIsIm9yZ0NvZGUiOiI0NDUiLCJhdXRoZW50RGF0ZVRpbWUiOiIyMDI2MDMxNzA5MjIwOCIsImV4cCI6MTc3MzgyNTcyOH0.U44uVs-aopxqLf-cmvREwjSvwxo57NrK6QAn21WeerU&quot;</span><span class="br0">&#41;</span>
$headers.Add<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Content-Type&quot;</span>, <span style="color: #FF0000;">&quot;application/json&quot;</span><span class="br0">&#41;</span>
&nbsp;
<span style="color: #cc66cc;">$b</span>ody = @<span style="color: #FF0000;">&quot;</span>
<span style="color: #FF0000;">{</span>
<span style="color: #FF0000;">  `&quot;</span>documentNumber`<span style="color: #FF0000;">&quot;: `&quot;</span>V445013-0000001`<span style="color: #FF0000;">&quot;,</span>
<span style="color: #FF0000;">  `&quot;</span>orderType`<span style="color: #FF0000;">&quot;: `&quot;</span>VAD`<span style="color: #FF0000;">&quot;,</span>
<span style="color: #FF0000;">  `&quot;</span>paymentDetails`<span style="color: #FF0000;">&quot;: [</span>
<span style="color: #FF0000;">    {</span>
<span style="color: #FF0000;">      `&quot;</span>lineNumber`<span style="color: #FF0000;">&quot;: `&quot;</span><span style="color: #cc66cc;">1</span>`<span style="color: #FF0000;">&quot;,</span>
<span style="color: #FF0000;">      `&quot;</span>amount`<span style="color: #FF0000;">&quot;: `&quot;</span><span style="color: #cc66cc;">1</span>`<span style="color: #FF0000;">&quot;,</span>
<span style="color: #FF0000;">      `&quot;</span>paymentMethod`<span style="color: #FF0000;">&quot;: `&quot;</span>ZZ26`<span style="color: #FF0000;">&quot;</span>
<span style="color: #FF0000;">    },</span>
<span style="color: #FF0000;">     {</span>
<span style="color: #FF0000;">      `&quot;</span>lineNumber`<span style="color: #FF0000;">&quot;: `&quot;</span><span style="color: #cc66cc;">2</span>`<span style="color: #FF0000;">&quot;,</span>
<span style="color: #FF0000;">      `&quot;</span>amount`<span style="color: #FF0000;">&quot;: `&quot;</span><span style="color: #cc66cc;">1</span>`<span style="color: #FF0000;">&quot;,</span>
<span style="color: #FF0000;">      `&quot;</span>paymentMethod`<span style="color: #FF0000;">&quot;: `&quot;</span>ZZ26`<span style="color: #FF0000;">&quot;</span>
<span style="color: #FF0000;">    }</span>
<span style="color: #FF0000;">  ]</span>
<span style="color: #FF0000;">}</span>
<span style="color: #FF0000;">&quot;</span>@
&nbsp;
$response = Invoke-RestMethod <span style="color: #FF0000;">'https://api.ptsrc.adeiz.com/services/orderservice/api/v1/sales-orders-lite'</span> -Method <span style="color: #FF0000;">'POST'</span> -Headers $headers -Body <span style="color: #cc66cc;">$b</span>ody
$response | ConvertTo-Json<span class="br0">&#93;</span></pre></td></tr></table></code><hr />
</div><div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">procedure</span> SendSalesOrder;
<span style="color: #0000ff;">var</span>
  RESTClient: TRESTClient;
  RESTRequest: TRESTRequest;
  RESTResponse: TRESTResponse;
   paymentDetailsArray:tjsonarray;
  jsonBody, payment1, payment2: TJSONObject;
  jsonObject, paymentDetailsObject: TJSONObject;
<span style="color: #0000ff;">begin</span>
  <span style="color: #808080;">// Cr&eacute;er le client REST</span>
  RESTClient := TRESTClient.Create<span class="br0">&#40;</span><span style="color: #0000ff;">nil</span><span class="br0">&#41;</span>;
  <span style="color: #0000ff;">try</span>
    RESTClient.BaseURL := <span style="color: #FF0000;">'https://api.ptsrc.adeiz.com/services/orderservice/api/v1/sales-orders-lite'</span>;
&nbsp;
    <span style="color: #808080;">// Cr&eacute;er la requ&ecirc;te</span>
    RESTRequest := TRESTRequest.Create<span class="br0">&#40;</span><span style="color: #0000ff;">nil</span><span class="br0">&#41;</span>;
    <span style="color: #0000ff;">try</span>
      RESTRequest.Client := RESTClient;
      RESTRequest.Method := rmPOST;
&nbsp;
      <span style="color: #808080;">// Ajouter les en-t&ecirc;tes</span>
<span style="color: #808080;">//      restrequest.AddParameter('Authorization');</span>
      restrequest.AddParameter<span class="br0">&#40;</span><span style="color: #FF0000;">'&quot;Authorization&quot;'</span>,<span style="color: #FF0000;">'&quot;Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMyIsImF1dGgiOiJBZG1pbmlzdHJhdGV1ciIsIm9yZ0NvZGUiOiI0NDUiLCJhdXRoZW50RGF0ZVRpbWUiOiIyMDI2MDMxNzEzMjIzMCIsImV4cCI6MTc3Mzg0MDE1MH0.tIflejQyPcCKp52zPRhYCuiSB0XMkHLIAHyoF*****&quot;'</span>,pkHTTPHEADER<span class="br0">&#41;</span>;
<span style="color: #808080;">//      RESTRequest.AddHeader('Authorization', 'Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMyIsImF1dGgiOiJBZG1pbmlzdHJhdGV1ciIsIm9yZ0NvZGUiOiI0NDUiLCJhdXRoZW50RGF0ZVRpbWUiOiIyMDI2MDMxNzA5MjIwOCIsImV4cCI6MTc3MzgyNTcyOH0.U44uVs-aopxqLf-cmvREwjSvwxo57NrK6QAn21*****');</span>
      RESTRequest.Addparameter<span class="br0">&#40;</span><span style="color: #FF0000;">'Content-Type'</span>, <span style="color: #FF0000;">'application/json'</span><span class="br0">&#41;</span>;
&nbsp;
      <span style="color: #808080;">// Construire le corps JSON</span>
      jsonBody := TJSONobject.Create;
&nbsp;
      <span style="color: #808080;">// Cr&eacute;er la partie principale</span>
      jsonObject := TJSONObject.Create;
      <span style="color: #0000ff;">try</span>
        jsonObject.AddPair<span class="br0">&#40;</span><span style="color: #FF0000;">'documentNumber'</span>, <span style="color: #FF0000;">'V445013-0000001'</span><span class="br0">&#41;</span>;
        jsonObject.AddPair<span class="br0">&#40;</span><span style="color: #FF0000;">'orderType'</span>, <span style="color: #FF0000;">'VAD'</span><span class="br0">&#41;</span>;
&nbsp;
        <span style="color: #808080;">// PaymentDetails array</span>
        paymentDetailsArray := TJSONarray.Create;
&nbsp;
        <span style="color: #808080;">// Payment 1</span>
        payment1 := TJSONObject.Create;
        payment1.AddPair<span class="br0">&#40;</span><span style="color: #FF0000;">'lineNumber'</span>, <span style="color: #FF0000;">'1'</span><span class="br0">&#41;</span>;
        payment1.AddPair<span class="br0">&#40;</span><span style="color: #FF0000;">'amount'</span>, <span style="color: #FF0000;">'1'</span><span class="br0">&#41;</span>;
        payment1.AddPair<span class="br0">&#40;</span><span style="color: #FF0000;">'paymentMethod'</span>, <span style="color: #FF0000;">'ZZ26'</span><span class="br0">&#41;</span>;
&nbsp;
        <span style="color: #808080;">// Payment 2</span>
        payment2 := TJSONObject.Create;
        payment2.AddPair<span class="br0">&#40;</span><span style="color: #FF0000;">'lineNumber'</span>, <span style="color: #FF0000;">'2'</span><span class="br0">&#41;</span>;
        payment2.AddPair<span class="br0">&#40;</span><span style="color: #FF0000;">'amount'</span>, <span style="color: #FF0000;">'1'</span><span class="br0">&#41;</span>;
        payment2.AddPair<span class="br0">&#40;</span><span style="color: #FF0000;">'paymentMethod'</span>, <span style="color: #FF0000;">'ZZ26'</span><span class="br0">&#41;</span>;
&nbsp;
        paymentDetailsArray.Add<span class="br0">&#40;</span>payment1<span class="br0">&#41;</span>;
        paymentDetailsArray.Add<span class="br0">&#40;</span>payment2<span class="br0">&#41;</span>;
&nbsp;
        jsonObject.AddPair<span class="br0">&#40;</span><span style="color: #FF0000;">'paymentDetails'</span>, paymentDetailsArray<span class="br0">&#41;</span>;
&nbsp;
        <span style="color: #808080;">// Convertir en string</span>
        jsonBody:=jsonObject;
      <span style="color: #0000ff;">finally</span>
        <span style="color: #808080;">// Lib&eacute;rer les objets temporaires</span>
        <span style="color: #808080;">// Note: jsonObject, paymentDetailsArray, payment1, payment2 sont ajout&eacute;s &agrave; jsonBody</span>
        <span style="color: #808080;">// et seront lib&eacute;r&eacute;s avec jsonBody si on ne les lib&egrave;re pas ici</span>
      <span style="color: #0000ff;">end</span>;
&nbsp;
      <span style="color: #808080;">// D&eacute;finir le corps de la requ&ecirc;te</span>
      restrequest.AddBody<span class="br0">&#40;</span>jsonBody.ToString<span class="br0">&#41;</span>;
<span style="color: #808080;">//      RESTRequest.Body := TEncoding.UTF8.GetBytes(jsonBody.ToString);</span>
<span style="color: #808080;">//      RESTRequest.ContentType:=application/json;</span>
&nbsp;
      <span style="color: #808080;">// Ex&eacute;cuter la requ&ecirc;te</span>
      RESTResponse := TRESTResponse.Create<span class="br0">&#40;</span><span style="color: #0000ff;">nil</span><span class="br0">&#41;</span>;
      <span style="color: #0000ff;">try</span>
        RESTRequest.Response := RESTResponse;
        RESTRequest.Execute;
&nbsp;
        <span style="color: #808080;">// Traiter la r&eacute;ponse</span>
<span style="color: #808080;">//        showmessage ('R&eacute;ponse: ', RESTResponse.Content);</span>
        form5.memo1.lines.add<span class="br0">&#40;</span>RESTResponse.Content<span class="br0">&#41;</span>;
        <span style="color: #0000ff;">finally</span>
        RESTResponse.Free;
      <span style="color: #0000ff;">end</span>;
&nbsp;
    <span style="color: #0000ff;">finally</span>
      RESTRequest.Free;
    <span style="color: #0000ff;">end</span>;
&nbsp;
  <span style="color: #0000ff;">finally</span>
    RESTClient.Free;
  <span style="color: #0000ff;">end</span>;
<span style="color: #0000ff;">end</span>;</pre></td></tr></table></code><hr />
</div>Le bearer est différent car récupérer à chaque fois <br />
<br />
<br />
et là l'export de REST DEBOGUEUR<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">object</span> RESTClient1: TRESTClient
  BaseURL = 
    <span style="color: #FF0000;">'https://api.ptsrc.adeiz.com/services/orderservice/api/v1/sales-o'</span> +
    <span style="color: #FF0000;">'rders-lite'</span>
  Params = &lt;&gt;
  SynchronizedEvents = <span style="color: #0000ff;">False</span>
<span style="color: #0000ff;">end</span>
<span style="color: #0000ff;">object</span> RESTRequest1: TRESTRequest
  AssignedValues = <span class="br0">&#91;</span>rvConnectTimeout, rvReadTimeout<span class="br0">&#93;</span>
  Client = RESTClient1
  Method = rmPOST
  Params = &lt;
    item
      Kind = pkHTTPHEADER
      Name = <span style="color: #FF0000;">'Authorization'</span>
      Options = <span class="br0">&#91;</span>poDoNotEncode<span class="br0">&#93;</span>
      Value = 
        <span style="color: #FF0000;">'Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMyIsImF1dGgiOiJBZG1pbmlz'</span> +
        <span style="color: #FF0000;">'dHJhdGV1ciIsIm9yZ0NvZGUiOiI0NDUiLCJhdXRoZW50RGF0ZVRpbWUiOiIyMDI2'</span> +
        <span style="color: #FF0000;">'MDMxNjE0MjMxOSIsImV4cCI6MTc3Mzc1NzM5OX0.esg-OQXCTo_Nwke8G_6HkuGM'</span> +
        <span style="color: #FF0000;">'dGa3g3Z7b0uK5mrH_xY'</span>
    <span style="color: #0000ff;">end</span>
    item
      Kind = pkREQUESTBODY
      Name = <span style="color: #FF0000;">'bodyB6827D9362784EE6BA295D02118AD896'</span>
      Value = 
        <span style="color: #FF0000;">'bodyB6827D9362784EE6BA295D02118AD896{'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'  &quot;documentNumber&quot;: &quot;V445013-0000001&quot;,'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'  &quot;orderType&quot;: &quot;VAD&quot;,'</span> +
        <span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'  &quot;paymentDetails&quot;: ['</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'    {'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'      &quot;lineNumber&quot;: &quot;1&quot;,'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'      '</span> +
        <span style="color: #FF0000;">'&quot;amount&quot;: &quot;1&quot;,'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'      &quot;paymentMethod&quot;: &quot;ZZ26&quot;'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'    },'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'     {'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">' '</span> +
        <span style="color: #FF0000;">'     &quot;lineNumber&quot;: &quot;2&quot;,'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'      &quot;amount&quot;: &quot;1&quot;,'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'      &quot;paymentMet'</span> +
        <span style="color: #FF0000;">'hod&quot;: &quot;ZZ26&quot;'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'    }'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'  ]'</span><span style="color: #cc66cc;">#13</span><span style="color: #cc66cc;">#10</span><span style="color: #FF0000;">'}'</span>
      ContentTypeStr = <span style="color: #FF0000;">'application/json'</span>
    end&gt;
  Response = RESTResponse1
  SynchronizedEvents = <span style="color: #0000ff;">False</span>
<span style="color: #0000ff;">end</span>
<span style="color: #0000ff;">object</span> RESTResponse1: TRESTResponse
<span style="color: #0000ff;">end</span></pre></td></tr></table></code><hr />
</div>je ne comprend pas pourquoi j'ai toujours cette erreur en Ddelphi ou REST debogueur<br />
{&quot;status &quot;:&quot;UNAUTHORIZED&quot;,&quot;statusCode&quot;:&quot;401 Unauthorized&quot;,&quot;ExceptionType&quot;:&quot;org.springframework.security.authentication.InsufficientAuthenticationException&quot;,&quot;message&quot;:&quot;Full authentication is required to access this resource&quot;,&quot;path&quot;:&quot;/api/v1/sales-orders-lite&quot;,&quot;resourceVarName&quot;:&quot;&quot;}</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f779/environnements-developpement/delphi/web-reseau/"><![CDATA[Web & réseau]]></category>
			<dc:creator>nakos91</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182705/environnements-developpement/delphi/web-reseau/delphi-appel-api-ne-fonctionne-sous-delphi-ok-sous-postman-powershell/</guid>
		</item>
		<item>
			<title>tNetHTTPRequest tNetHTTPClient comportement etrange sous linux</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180547&amp;goto=newpost</link>
			<pubDate>Thu, 20 Nov 2025 10:04:00 GMT</pubDate>
			<description>Bonjour 
 
je suis en train...</description>
			<content:encoded><![CDATA[<div>Bonjour<br />
<br />
je suis en train de d’écrire une unité pour générer des downtime ou plage de maintenance sur nos serveurs de supervisions (Zabbix, Nagios)<br />
j'utilise Delphi 13 avec les deux patch<br />
et environnement Windows et Linux<br />
pour la partie Zabbix ras a premiere vue<br />
mais Nagios il y a un petit soucis sous linux<br />
pour générer un downtime il faut passer par un post sur une url du style<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			%APIBASE%/nrdp/?cmd=submitcmd&amp;token=%TOKEN%&amp;command=SCHEDULE_HOST_DOWNTIME;%HOST%;%DATEDEB%;%DATEFIN%;1%;0;0;%USER%;%COMMENTAIRE%
			
		<hr />
	</div>
</div>ce qui donne apres remplacement des varriables<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			ht..s://supervision/NAEMON/api/nrdp/?cmd=submitcmd&amp;token=montoken&amp;command=SCHEDULE_HOST_DOWNTIME%3BSERVEUR001%3B1763624844%3B1763626044%3B1%3B0%3B0%3BFBASS%3BTest+V3.0+pour+vôir+éèç
			
		<hr />
	</div>
</div>qui dans un curl, page web, .. fonctionne nickel <br />
<br />
la partie du code d’envoi rien de particulier ici j'ai commenter l'utilisation du tNetHTTPRequest mais çà change rien au souci <br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			//    res := fNetHTTPRequest.get ( strCmdTmp );<br />
    res := fNetHTTPClient.get ( strCmdTmp );
			
		<hr />
	</div>
</div>la déclaration du fNetHTTPClient est :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			 fNetHTTPClient                   := TNetHTTPClient.Create( nil );<br />
  fNetHTTPClient.Asynchronous      := False;<br />
  fNetHTTPClient.ConnectionTimeout := 1000;<br />
  fNetHTTPClient.ResponseTimeout   := 1000;<br />
  fNetHTTPClient.HandleRedirects   := True;<br />
  fNetHTTPClient.AllowCookies      := True;<br />
  fNetHTTPClient.UserAgent         := 'Embarcadero URI Client/1.0';<br />
  fNetHTTPClient.OnValidateServerCertificate := onValidateCerttificat;<br />
  fNetHTTPClient.UseDefaultCredentials := false;
			
		<hr />
	</div>
</div>pour l'utilisation du request j'avais mis un datamodule et placé les deux composant Client et request dessus<br />
<br />
le soucis que j'ai sous linux c'est que nrpd reçois en double les requêtes et donc me génère deux downtime<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			[1763626112] SCHEDULE_HOST_DOWNTIME;SERVEUR001;1763624844;1763626044;1;0;0;FBASS;Test V3.0 pour vôir éèç<br />
[1763626112] SCHEDULE_HOST_DOWNTIME;SERVEUR001;1763624844;1763626044;1;0;0;FBASS;Test V3.0 pour vôir éèç
			
		<hr />
	</div>
</div>il semble que fNetHTTPClient envoie deux fois la requête sous linux<br />
malgré que le onreceivedata ne soit appelé qu'une fois<br />
<br />
j'ai testé <br />
- avec <div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			fNetHTTPClient.HandleRedirects   := false;
			
		<hr />
	</div>
</div>- sans les accents dans le commentaire<br />
<br />
suis je devant un bug tNetHTTPClient vs linux ou j'ai zappé quelque chose ?<br />
<br />
ps le retour est le suivant<br />
HTTP/1.1 200 OK <br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			&quot;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;result&gt;   &lt;status&gt;0&lt;/status&gt;   &lt;message&gt;OK&lt;/message&gt; &lt;/result&gt;
			
		<hr />
	</div>
</div></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f779/environnements-developpement/delphi/web-reseau/"><![CDATA[Web & réseau]]></category>
			<dc:creator>fbalien</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180547/environnements-developpement/delphi/web-reseau/tnethttprequest-tnethttpclient-comportement-etrange-sous-linux/</guid>
		</item>
		<item>
			<title>Taille max cumulée des cookies vers un service Web Delphi</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2179401&amp;goto=newpost</link>
			<pubDate>Mon, 22 Sep 2025 08:31:06 GMT</pubDate>
			<description>Bonjour, 
 
Une de nos...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
Une de nos application (html/js) échange avec différents web services.<br />
Certains web services (externes ou internes non Delphi) produisent des cookies volumineux.<br />
<br />
<b>Dès que la somme des tailles des cookies dépasse environ 4096o nos web services ISAPI en Delphi (12.3) ne traitent plus aucun cookies.</b><br />
Nous n'observons aucun problème coté clients (essaie avec tous les navigateurs : aucun avertissement, les services non Delphi traitent les cookies).<br />
<br />
Je vois la rfc2109 (<a rel="nofollow" href="https://www.rfc-editor.org/rfc/rfc2109.html" target="_blank">https://www.rfc-editor.org/rfc/rfc2109.html</a>) qui indique qu'un navigateur (donc le serveur qui répond) doit accepter 20cookies par domaine d'une taille max de 4096o<br />
<br />
<b>Connaissez-vous un paramètre coté Delphi pour supporter plus de cookies ?</b><br />
<br />
(sachant que parallèlement nous discutons avec les émetteurs de ces cookies afin de voir si ils peuvent êtres réduits)</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f779/environnements-developpement/delphi/web-reseau/"><![CDATA[Web & réseau]]></category>
			<dc:creator>Zatoobux</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2179401/environnements-developpement/delphi/web-reseau/taille-max-cumulee-cookies-vers-service-web-delphi/</guid>
		</item>
		<item>
			<title>Envoyer un mail sans utiliser Hello ( Amazon AWS )</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2178838&amp;goto=newpost</link>
			<pubDate>Tue, 26 Aug 2025 08:32:10 GMT</pubDate>
			<description>Bonjour à tous, 
 
Voici mon...</description>
			<content:encoded><![CDATA[<div>Bonjour à tous,<br />
<br />
Voici mon problème : j'utilise Delphi  XE7 ( Indy version: 10.6.0.5169 ) pour envoyer des mails avec le composant IdSMTP, tout fonctionne bien mais récemment  j'ai reçu un mail de Amazon AWS qui me dit qu'il n'accepte plus &quot;The V2 Client Hello handshake mechanism&quot; et &quot;use a modern TLS handshake method that aligns with current security standards&quot;.<br />
<br />
Je ne comprend absolument pas le message de Amazon, sauriez vous s'il vous plaît me dire comment je peut modifier ce paramètre Hello ?<br />
<br />
Merci de votre aide.<br />
<br />
<br />
-<br />
<b>Ci dessous le mail de Amazon</b><br />
-<br />
<br />
[Starting September 15, 2025, emails about AWS Health events will be delivered via the AWS User Notifications service. You can opt-in to this enhanced experience today. See footer for details.]<br />
<br />
Hello,<br />
Our records indicate that your account is currently using V2 Client Hello, a legacy handshake protocol when initiating connections with Amazon Simple Email Service (SES) SMTP endpoints.<br />
<br />
What's Changing?<br />
Starting November 25, 2025, Amazon SES will stop supporting V2 Client Hello on SMTP endpoints. After this date, any traffic using V2 Client Hello to initiate connections with SES SMTP endpoints will be rejected, and your applications will not be able to send emails unless they use a modern TLS handshake method that aligns with current security standards.<br />
<br />
Why Is This Change Important?<br />
The V2 Client Hello handshake mechanism, despite supporting TLS 1.2, is outdated and no longer aligned with modern security best practices.<br />
<br />
What Do I Need to Do?<br />
To maintain uninterrupted email sending with SES SMTP endpoints, please take the following actions before November 25, 2025:<br />
<br />
1. Update Your Applications and Clients or Disable V2 Client Hello: Update your TLS settings to prevent the use of V2 Client Hello and ensure all applications and email-sending clients use a modern TLS handshake compatible with when connecting to SES SMTP endpoints.<br />
<br />
2. Test Your Connections: After making the necessary updates, thoroughly test your email-sending workflows to confirm they can successfully establish connections with SES SMTP endpoints using a modern TLS handshake.<br />
<br />
For more detailed information and guidance on updating your TLS configurations, please refer to the SES Documentation [1].<br />
<br />
If you require further assistance or have any questions, please contact AWS Support [2].<br />
<br />
----------------------------------------------------------</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f779/environnements-developpement/delphi/web-reseau/"><![CDATA[Web & réseau]]></category>
			<dc:creator>delphiland</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2178838/environnements-developpement/delphi/web-reseau/envoyer-mail-utiliser-hello-amazon-aws/</guid>
		</item>
		<item>
			<title>WebBrowser et Maps sous android</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2178472&amp;goto=newpost</link>
			<pubDate>Thu, 07 Aug 2025 11:11:13 GMT</pubDate>
			<description><![CDATA[bonjour jusqu'à présent...]]></description>
			<content:encoded><![CDATA[<div>bonjour jusqu'à présent j'utilisais ça<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0">URLString := Format<span class="br0">&#40;</span><span style="color: #FF0000;">'https://maps.google.com/maps?q=%2.6f,%2.6f'</span>,<span class="br0">&#91;</span> NewLocation.Latitude, NewLocation.Longitude<span class="br0">&#93;</span><span class="br0">&#41;</span>;
WebBrowser1.Navigate<span class="br0">&#40;</span>URLString<span class="br0">&#41;</span>;</pre></td></tr></table></code><hr />
</div> ça fonctionnait mais aujourd' hui ça marche plus ,j'ai une erreur page web non disponible <div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			Err::ERR_UNKNOWN_URL_SCHEME
			
		<hr />
	</div>
</div>.quelqu'un a une idée ?? google maps a-t-il modifié ses accés</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f779/environnements-developpement/delphi/web-reseau/"><![CDATA[Web & réseau]]></category>
			<dc:creator>papyvore</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2178472/environnements-developpement/delphi/web-reseau/webbrowser-maps-sous-android/</guid>
		</item>
		<item>
			<title><![CDATA[Récupérer le  contenu d'une page web générée par javascript]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2178331&amp;goto=newpost</link>
			<pubDate>Wed, 30 Jul 2025 09:03:23 GMT</pubDate>
			<description><![CDATA[Bonjour, 
J'échange des...]]></description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
J'échange des données avec un fournisseur dans un process semi-automatique. En cas d'anomalies, je reçois par mail une url vers une page qui détaille les problèmes rencontrés.<br />
Le processus est un peu fastidieux: il faut s'identifier, rechercher dans la liste la transaction en erreur et enfin cliquer dessus pour visualiser le détail et je voudrais automatiser la récupération des infos par script.<br />
En utilisant le composant TRestRequest, j'arrive à transmettre mes identifiants, récupérer les cookies de session puis accéder à la page qui liste les transactions. <br />
Le problème est que les données sont générées par du javascript et ne figurent pas dans le corps de la page (restrequest.response.content)<br />
<br />
Sur le site web, lorsque je fais afficher le code source de la page, j'ai juste le nom des scripts<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
&lt;html lang=<span style="color: #FF0000;">&quot;en&quot;</span>&gt;
&lt;head&gt;
  &lt;meta charset=<span style="color: #FF0000;">&quot;utf-8&quot;</span>&gt;
  &lt;title&gt;Ma page&lt;/title&gt;
  &lt;base href=<span style="color: #FF0000;">&quot;/pageliste/&quot;</span>&gt;
  &lt;meta name=<span style="color: #FF0000;">&quot;viewport&quot;</span> content=<span style="color: #FF0000;">&quot;width=device-width, initial-scale=1&quot;</span>&gt;
  &lt;link rel=<span style="color: #FF0000;">&quot;icon&quot;</span> <span style="color: #0000ff;">type</span>=<span style="color: #FF0000;">&quot;image/x-icon&quot;</span> href=<span style="color: #FF0000;">&quot;favicon.png&quot;</span>&gt;
&lt;link rel=<span style="color: #FF0000;">&quot;stylesheet&quot;</span> href=<span style="color: #FF0000;">&quot;styles.css&quot;</span>&gt;&lt;/head&gt;
&lt;body&gt;
  &lt;app-root&gt;&lt;/app-root&gt;
&lt;script src=<span style="color: #FF0000;">&quot;scriptt1.js&quot;</span> <span style="color: #0000ff;">type</span>=<span style="color: #FF0000;">&quot;module&quot;</span>&gt;&lt;/script&gt;&lt;script src=<span style="color: #FF0000;">&quot;script2.js&quot;</span> <span style="color: #0000ff;">type</span>=<span style="color: #FF0000;">&quot;module&quot;</span>&gt;&lt;/script&gt;&lt;script src=<span style="color: #FF0000;">&quot;script3.js&quot;</span> defer&gt;&lt;/script&gt;&lt;script src=<span style="color: #FF0000;">&quot;script4.js&quot;</span> <span style="color: #0000ff;">type</span>=<span style="color: #FF0000;">&quot;module&quot;</span>&gt;&lt;/script&gt;&lt;script src=<span style="color: #FF0000;">&quot;script5.js&quot;</span> <span style="color: #0000ff;">type</span>=<span style="color: #FF0000;">&quot;module&quot;</span>&gt;&lt;/script&gt;&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></code><hr />
</div>Je retrouve la même chose dans restrequest.response.content<br />
<br />
Pour avoir un résultat &quot;interprété&quot;, je pense qu'il faudrait utiliser un TWebBrowser mais je ne vois pas comment lui transmettre les données d'identifications et le cookie de session associé</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f779/environnements-developpement/delphi/web-reseau/"><![CDATA[Web & réseau]]></category>
			<dc:creator>Higgins</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2178331/environnements-developpement/delphi/web-reseau/recuperer-contenu-d-page-web-generee-javascript/</guid>
		</item>
	</channel>
</rss>
