Delphi ActiveX Requires Chilkat v11.0.0+
Delphi ActiveX
PayPal: Create a reusable payment link for a service
See more PayPal Examples
Offer an annual inspection for USD 90 through PayPal-hosted checkout. Store the returned resource ID with the catalog item and share the payment_link URL with customers.
Chilkat Delphi ActiveX Downloads
var
success: Integer;
http: TChilkatHttp;
resp: TChilkatHttpResponse;
crypt: TChilkatCrypt2;
requestId: WideString;
body: TChilkatJsonObject;
errorInfo: TChilkatJsonObject;
result: TChilkatJsonObject;
parsedResult: Integer;
linkIndex: Integer;
begin
success := 0;
// See Unlock Chilkat before making requests.
// For the merchant's internal backoffice application. Load the sandbox token
// from the merchant's credential store. Keep it out of publicly distributed apps.
// See Get a PayPal access token.
http := TChilkatHttp.Create(Self);
http.AuthToken := 'SANDBOX_ACCESS_TOKEN';
resp := TChilkatHttpResponse.Create(Self);
// Replace the thank-you URL with your business website. The same link can be shared
// with several customers.
// Create and persist this key once per business operation. On a timeout,
// retry the same request with its saved key, not a newly generated one.
crypt := TChilkatCrypt2.Create(Self);
requestId := crypt.GenerateUuid();
http.SetRequestHeader('PayPal-Request-Id',requestId);
body := TChilkatJsonObject.Create(Self);
body.UpdateString('integration_mode','LINK');
body.UpdateString('type','BUY_NOW');
body.UpdateString('reusable','MULTIPLE');
body.UpdateString('return_url','https://merchant.example/thank-you');
body.UpdateString('line_items[0].name','Annual inspection');
body.UpdateString('line_items[0].unit_amount.currency_code','USD');
body.UpdateString('line_items[0].unit_amount.value','90.00');
success := http.HttpJson('POST','https://api-m.sandbox.paypal.com/v1/checkout/payment-resources',body.ControlInterface,'application/json',resp.ControlInterface);
if (success <> 1) then
begin
Memo1.Lines.Add('No HTTP response: ' + http.LastErrorText);
Exit;
end;
if ((resp.StatusCode < 200) or (resp.StatusCode >= 300)) then
begin
errorInfo := TChilkatJsonObject.Create(Self);
errorInfo.Load(resp.BodyStr);
Memo1.Lines.Add('HTTP ' + IntToStr(resp.StatusCode) + ' ' + errorInfo.StringOf('name') + ' ' + errorInfo.StringOf('details[0].issue'));
Memo1.Lines.Add('PayPal debug ID: ' + errorInfo.StringOf('debug_id'));
Exit;
end;
result := TChilkatJsonObject.Create(Self);
parsedResult := result.Load(resp.BodyStr);
if (parsedResult <> 1) then
begin
Memo1.Lines.Add('Expected a JSON response; HTTP ' + IntToStr(resp.StatusCode));
Exit;
end;
Memo1.Lines.Add('Catalog payment resource ID: ' + result.StringOf('id'));
// Link order is not fixed. Find the customer-facing link to copy into an email.
linkIndex := 0;
while (linkIndex < result.SizeOfArray('links')) do
begin
result.I := linkIndex;
if (result.StringOfEquals('links[i].rel','payment_link',1)) then
begin
Memo1.Lines.Add('Share this payment link: ' + result.StringOf('links[i].href'));
end;
linkIndex := linkIndex + 1;
end;