Sample code for 30+ languages & platforms
Delphi ActiveX Requires Chilkat v11.0.0+

PayPal: Save a payable invoice QR code as a PNG

See more PayPal Examples

Generate a 300-pixel payment QR code for a sent, payable invoice. Decode the base64 image into a PNG for a printed invoice; the code opens the payment page, and is not proof of payment.

PayPal documentation

Chilkat Delphi ActiveX Downloads

Delphi ActiveX
var
success: Integer;
http: TChilkatHttp;
resp: TChilkatHttpResponse;
body: TChilkatJsonObject;
errorInfo: TChilkatJsonObject;
result: TChilkatJsonObject;
parsed: Integer;
png: TChilkatBinData;
decoded: Integer;
savedImage: 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);

//  Use a sent, payable invoice. Width and height are JSON numbers, in pixels.

http.SetUrlVar('id','INVOICE_ID');
body := TChilkatJsonObject.Create(Self);
body.UpdateInt('width',300);
body.UpdateInt('height',300);
body.UpdateString('action','pay');

success := http.HttpJson('POST','https://api-m.sandbox.paypal.com/v2/invoicing/invoices/{$id}/generate-qr-code',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);
parsed := result.Load(resp.BodyStr);
if (parsed <> 1) then
  begin
    Memo1.Lines.Add('Expected a JSON response; HTTP ' + IntToStr(resp.StatusCode));
    Exit;
  end;
png := TChilkatBinData.Create(Self);
if (result.HasMember('image') <> 1) then
  begin
    Memo1.Lines.Add('QR response did not contain an image.');
    Exit;
  end;
decoded := png.AppendEncoded(result.StringOf('image'),'base64');
if (decoded <> 1) then
  begin
    Memo1.Lines.Add('Invalid base64 image.');
    Exit;
  end;
savedImage := png.WriteFile('paypal-invoice-qr.png');
if (savedImage <> 1) then
  begin
    Memo1.Lines.Add('Could not write the invoice QR image.');
    Exit;
  end;
Memo1.Lines.Add('Saved paypal-invoice-qr.png.');