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

Amazon Pay - Create Refund

See more Amazon Pay Examples

Initiate a full or partial refund for a charge.

Chilkat Delphi DLL Downloads

Delphi DLL
var
success: Boolean;
http: HCkHttp;
json: HCkJsonObject;
privKey: HCkPrivateKey;
publicKeyId: PWideChar;
resp: HCkHttpResponse;
sbResponseBody: HCkStringBuilder;
jResp: HCkJsonObject;
respStatusCode: Integer;
refundId: PWideChar;
chargeId: PWideChar;
refundAmountAmount: PWideChar;
refundAmountCurrencyCode: PWideChar;
softDescriptor: PWideChar;
creationTimestamp: PWideChar;
statusDetailsState: PWideChar;
statusDetailsReasonCode: PWideChar;
statusDetailsReasonDescription: PWideChar;
statusDetailsLastUpdatedTimestamp: PWideChar;
releaseEnvironment: PWideChar;

begin
success := False;

//  This example assumes the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

http := CkHttp_Create();

//  Implements the following CURL command:

//  curl "https://pay-api.amazon.com/:version/refunds/" \
//  -X POST
//  -H "authorization:Px2e5oHhQZ88vVhc0DO%2FsShHj8MDDg%3DEXAMPLESIGNATURE"
//  -H "x-amz-pay-date:20201012T235046Z"
//  -H "x-amz-pay-idempotency-key:AVLo5tI10BHgEk2jEXAMPLEKEY"
//  -d '{
//      "chargeId": "CHARGE_ID",
//      "refundAmount": {
//          "amount": "14.00",
//          "currencyCode": "USD"
//      },
//      "softDescriptor": "Descriptor"
//  }'

//  Use the following online tool to generate HTTP code from a CURL command
//  Convert a cURL Command to HTTP Source Code

//  Use this online tool to generate code from sample JSON:
//  Generate Code to Create JSON

//  The following JSON is sent in the request body.

//  {
//      "chargeId": "CHARGE_ID",
//      "refundAmount": {
//          "amount": "14.00",
//          "currencyCode": "USD"
//      },
//      "softDescriptor": "Descriptor"
//  }

json := CkJsonObject_Create();
CkJsonObject_UpdateString(json,'chargeId','CHARGE_ID');
CkJsonObject_UpdateString(json,'refundAmount.amount','14.00');
CkJsonObject_UpdateString(json,'refundAmount.currencyCode','USD');
CkJsonObject_UpdateString(json,'softDescriptor','Descriptor');

//  Load your Amazon Pay private key.  
//  There are many other ways to load private keys into the Chilkat private key object, such as from different formats,
//  or from in-memory strings or bytes.
privKey := CkPrivateKey_Create();
success := CkPrivateKey_LoadPemFile(privKey,'C:/someDir/myAmazonPayPrivateKey.pem');
if (success = False) then
  begin
    Memo1.Lines.Add(CkPrivateKey__lastErrorText(privKey));
    Exit;
  end;

//  Provide your Amazon Pay private key and Public Key ID 
//  Use your public key ID here.  It must be the one associated with the private key.
//  Note: The SetAuthPrivateKey method was added in Chilkat v9.5.0.89
publicKeyId := 'SANDBOX-AHEGSJCM3L2S637RBGABLAFW';
success := CkHttp_SetAuthPrivateKey(http,publicKeyId,privKey);
if (success = False) then
  begin
    Memo1.Lines.Add(CkHttp__lastErrorText(http));
    Exit;
  end;

//  Note: When the private key is provided as shown above, Chilkat will automatically add the required x-amz-pay-* headers to the HTTP request,
//  and will also sign the request.  Nothing more is needed.
//  Chilkat automatically generates and adds the following headers:
//  
//  x-amz-pay-date
//  x-amz-pay-host
//  x-amz-pay-region
//  x-amz-pay-idempotency-key
//  Authorization

CkHttp_putAccept(http,'application/json');

//  To use the live system, replace "sandbox" with "live" in the URL passed to HttpJson.
//  Also, make sure to use the correct region: pay-api.amazon.com, pay-api.amazon.eu, or pay-api.amazon.jp
resp := CkHttpResponse_Create();
success := CkHttp_HttpJson(http,'POST','https://pay-api.amazon.eu/sandbox/v2/refunds/',json,'application/json',resp);
if (success = False) then
  begin
    Memo1.Lines.Add(CkHttp__lastErrorText(http));
    Exit;
  end;

sbResponseBody := CkStringBuilder_Create();
CkHttpResponse_GetBodySb(resp,sbResponseBody);
jResp := CkJsonObject_Create();
CkJsonObject_LoadSb(jResp,sbResponseBody);
CkJsonObject_putEmitCompact(jResp,False);

//  If the status code is not equal to 201, this will display error information.
Memo1.Lines.Add('Response Body:');
Memo1.Lines.Add(CkJsonObject__emit(jResp));

respStatusCode := CkHttpResponse_getStatusCode(resp);
Memo1.Lines.Add('Response Status Code = ' + IntToStr(respStatusCode));
if (respStatusCode <> 201) then
  begin
    Memo1.Lines.Add('Failed.');
    Exit;
  end;

//  Sample JSON response:
//  (Sample code for parsing the JSON response is shown below)

//  {
//       "refundId": "S01-5105180-3221187-R022311",
//       "chargeId": "S01-5105180-3221187-C056351",
//       "refundAmount": {
//           "amount": "14.00",
//           "currencyCode": "USD"
//       },
//       "softDescriptor": "Descriptor",
//       "creationTimestamp": "20190714T155300Z",
//       "statusDetails": {
//           "state": "RefundInitiated",
//           "reasonCode": null,
//           "reasonDescription": null,
//           "lastUpdatedTimestamp": "20190714T155300Z"
//       },
//       "releaseEnvironment": "Sandbox"
//  }

//  Sample code for parsing the JSON response...
//  Use the following online tool to generate parsing code from sample JSON:
//  Generate Parsing Code from JSON

refundId := CkJsonObject__stringOf(jResp,'refundId');
chargeId := CkJsonObject__stringOf(jResp,'chargeId');
refundAmountAmount := CkJsonObject__stringOf(jResp,'refundAmount.amount');
refundAmountCurrencyCode := CkJsonObject__stringOf(jResp,'refundAmount.currencyCode');
softDescriptor := CkJsonObject__stringOf(jResp,'softDescriptor');
creationTimestamp := CkJsonObject__stringOf(jResp,'creationTimestamp');
statusDetailsState := CkJsonObject__stringOf(jResp,'statusDetails.state');
statusDetailsReasonCode := CkJsonObject__stringOf(jResp,'statusDetails.reasonCode');
statusDetailsReasonDescription := CkJsonObject__stringOf(jResp,'statusDetails.reasonDescription');
statusDetailsLastUpdatedTimestamp := CkJsonObject__stringOf(jResp,'statusDetails.lastUpdatedTimestamp');
releaseEnvironment := CkJsonObject__stringOf(jResp,'releaseEnvironment');

CkHttp_Dispose(http);
CkJsonObject_Dispose(json);
CkPrivateKey_Dispose(privKey);
CkHttpResponse_Dispose(resp);
CkStringBuilder_Dispose(sbResponseBody);
CkJsonObject_Dispose(jResp);