[Step 7 of 10] After the buyer has successfully completed checkout, the Complete Checkout Session response will include a ChargePermissionId for a recurring Charge Permission object that you can use to charge the subscriber and manage cancellations.
At the end of this step, you will be able to charge the buyer at a recurring cadence and manage cancellations.
Note: If your publicKeyId does not have an environment prefix (does not begin with 'SANDBOX' or 'LIVE') follow these instructions instead.
Note: If your publicKeyId has an environment prefix (for example: SANDBOX-AFVX7ULWSGBZ5535PCUQOY7B) follow these instructions instead.
Call Create Charge each time you need to charge the subscriber. Set CaptureNow to true to capture payment immediately, set it to false to capture later. Note that Amazon Pay limits how much you can charge the buyer for each calendar month, see monthly recurring charge limits for more info.
If Create Charge returns a 201 response, authorization was either successfully completed or successfully initiated depending on whether canHandlePendingAuthorization was set to true. If Create Charge returns a different HTTP status code, check the request response reasonCode to determine if you should retry Create Charge or ask your buyer to use a different payment method:
If reasonCode is SoftDeclined or ProcessingFailure:
Call Get Charge Permission to confirm that the Charge Permission is in a Chargeable state
If reasonCode is HardDeclined, ask the buyer to update their payment instrument using the following link: https://payments.amazon.com/jr/your-account/ba/{ChargePermissionId}. Replace {ChargePermissionId} with the buyer's Charge Permission Id. Set up IPNs to receive a notification once the payment instrument has been updated and then:
Call Get Charge Permission to confirm that the Charge Permission is in a Chargeable state
Boolean that indicates whether or not Charge should be captured immediately after a successful authorization
Default: false
softDescriptor
Type: string
Body
Description shown on the buyer payment instrument statement. You can only use this parameter if CaptureNow is set to true
Do not store sensitive data about the buyer or the transaction in this field. Sensitive data includes, but is not limited to: government-issued identification, bank account numbers, or credit card numbers
The soft descriptor sent to the payment processor is: "AMZ* <soft descriptor specified here>"
Default: "AMZ*<SELLER_NAME> pay.amazon.com" Max length: 16 characters
canHandlePendingAuthorization
Type: boolean
Body
Boolean that indicates whether or not merchant can handle pending response
If set to false, you will receive a response within a maximum of 15 seconds in US, EU, and UK regions or 30 seconds in JP region. If set to true, Amazon Pay will process the authorization asynchronously and you will receive a response within 24 hours. See asynchronous processing for more info
using Amazon.Pay.API;
using Amazon.Pay.API.Types;
using Amazon.Pay.API.WebStore;
using Amazon.Pay.API.WebStore.Types;
using Amazon.Pay.API.WebStore.Charge;
public class Sample
{
public WebStoreClient InitiateClient()
{
// set up config
var payConfiguration = new ApiConfiguration
(
region: Region.YOUR_REGION_CODE,
publicKeyId: "YOUR_PUBLIC_KEY_ID",
privateKey: "PATH_OR_CONTENT_OF_YOUR_PRIVATE_KEY",
algorithm: AmazonSignatureAlgorithm.V2
);
// init API client
var client = new WebStoreClient(payConfiguration);
return client;
}
public void CreateCharge(string chargePermissionId)
{
// prepare the request
var request = new CreateChargeRequest(chargePermissionId, 14.00M, Currency.USD)
{
CaptureNow = true,
SoftDescriptor = "Descriptor", // This is the information shown on buyer payment instrument statement
CanHandlePendingAuthorization = false
};
// init Headers
var myHeaderKey = "x-amz-pay-idempotency-key";
var myHeaderValue = Guid.NewGuid().ToString();
var headers = new Dictionary<string, string> { { myHeaderKey, myHeaderValue } };
// send the request
ChargeResponse result = client.CreateCharge(request, headers);
// check if API call was successful
if (!result.Success)
{
// handle the API error (use Status field to get the numeric error code)
} else {
// do something with the result, for instance:
string chargeId = result.ChargeId;
DateTime chargeCreationTimestamp = result.CreationTimestamp;
DateTime chargeExpiryTimestamp = result.ExpirationTimestamp;
}
}
}
using Amazon.Pay.API;
using Amazon.Pay.API.Types;
using Amazon.Pay.API.WebStore;
using Amazon.Pay.API.WebStore.Types;
using Amazon.Pay.API.WebStore.Charge;
public class Sample
{
public WebStoreClient InitiateClient()
{
// set up config
var payConfiguration = new ApiConfiguration
(
region: Region.YOUR_REGION_CODE,
environment: Environment.Sandbox,
publicKeyId: "YOUR_PUBLIC_KEY_ID",
privateKey: "PATH_OR_CONTENT_OF_YOUR_PRIVATE_KEY",
algorithm: AmazonSignatureAlgorithm.V2
);
// init API client
var client = new WebStoreClient(payConfiguration);
return client;
}
public void CreateCharge(string chargePermissionId)
{
// prepare the request
var request = new CreateChargeRequest(chargePermissionId, 14.00M, Currency.USD)
{
CaptureNow = true,
SoftDescriptor = "Descriptor", // This is the information shown on buyer payment instrument statement
CanHandlePendingAuthorization = false
};
// init Headers
var myHeaderKey = "x-amz-pay-idempotency-key";
var myHeaderValue = Guid.NewGuid().ToString();
var headers = new Dictionary<string, string> { { myHeaderKey, myHeaderValue } };
// send the request
ChargeResponse result = client.CreateCharge(request, headers);
// check if API call was successful
if (!result.Success)
{
// handle the API error (use Status field to get the numeric error code)
} else {
// do something with the result, for instance:
string chargeId = result.ChargeId;
DateTime chargeCreationTimestamp = result.CreationTimestamp;
DateTime chargeExpiryTimestamp = result.ExpirationTimestamp;
}
}
}
Use Close Charge Permission to inform Amazon Pay if a subscriber cancels their subscription. You will no longer be able to charge a subscriber unless they complete Amazon Pay checkout again once you close the Charge Permission.
Subscribers can also close Charge Permissions by signing in to https://pay.amazon.com. Set up IPNs to receive notifications whenever a Charge Permission is closed. To minimize churn, we recommend that you proactively reach out to the subscriber for a new payment method before the next billing cycle.