SQL Server
SQL Server
Amazon Pay - Get Charge
See more Amazon Pay Examples
Get Charge details such as charge amount and authorization state. Use this operation to determine if authorization or capture was successful.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This example assumes the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @http int
EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
-- Implements the following CURL command:
-- curl "https://pay-api.amazon.com/:version/charges/:chargeId"
-- -H "authorization:Px2e5oHhQZ88vVhc0DO%2FsShHj8MDDg%3DEXAMPLESIGNATURE"
-- -H "x-amz-pay-date:20201012T235046Z"
-- -X GET
-- 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.
DECLARE @privKey int
EXEC @hr = sp_OACreate 'Chilkat.PrivateKey', @privKey OUT
EXEC sp_OAMethod @privKey, 'LoadPemFile', @success OUT, 'C:/someDir/myAmazonPayPrivateKey.pem'
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @privKey, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @privKey
RETURN
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
DECLARE @publicKeyId nvarchar(4000)
SELECT @publicKeyId = 'SANDBOX-AHEGSJCM3L2S637RBGABLAFW'
EXEC sp_OAMethod @http, 'SetAuthPrivateKey', @success OUT, @publicKeyId, @privKey
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @privKey
RETURN
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
-- Authorization
EXEC sp_OASetProperty @http, 'Accept', 'application/json'
DECLARE @respStatusCode int
SELECT @respStatusCode = 0
DECLARE @sbResponseBody int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbResponseBody OUT
EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'chargeId', 'P21-1111111-1111111'
-- To use the live system, replace "sandbox" with "live" in the URL passed to QuickGetSb.
-- Also, make sure to use the correct region: pay-api.amazon.com, pay-api.amazon.eu, or pay-api.amazon.jp
EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://pay-api.amazon.eu/sandbox/v2/charges/{$chargeId}', @sbResponseBody
IF @success = 0
BEGIN
-- If the LastStatus is not equal to 0, then we received a response, but it was an error response.
EXEC sp_OAGetProperty @http, 'LastStatus', @respStatusCode OUT
IF @respStatusCode <> 0
BEGIN
PRINT 'Response Status Code = ' + @respStatusCode
PRINT 'Response body:'
EXEC sp_OAGetProperty @http, 'LastResponseBody', @sTmp0 OUT
PRINT @sTmp0
END
ELSE
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
END
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @privKey
EXEC @hr = sp_OADestroy @sbResponseBody
RETURN
END
DECLARE @jResp int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jResp OUT
EXEC sp_OAMethod @jResp, 'LoadSb', @success OUT, @sbResponseBody
EXEC sp_OASetProperty @jResp, 'EmitCompact', 0
PRINT 'Response Body:'
EXEC sp_OAMethod @jResp, 'Emit', @sTmp0 OUT
PRINT @sTmp0
EXEC sp_OAGetProperty @http, 'LastStatus', @respStatusCode OUT
PRINT 'Response Status Code = ' + @respStatusCode
-- We expect a 200 status code for success.
-- Note: Some Amazon Pay API calls return 200 for success, others return 201.
IF @respStatusCode <> 200
BEGIN
PRINT 'Failed.'
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @privKey
EXEC @hr = sp_OADestroy @sbResponseBody
EXEC @hr = sp_OADestroy @jResp
RETURN
END
-- Sample JSON response:
-- (Sample code for parsing the JSON response is shown below)
-- {
-- "chargeId": "P21-1111111-1111111-C111111",
-- "chargePermissionId": "P21-1111111-1111111",
-- "chargeAmount": {
-- "amount": "14.00",
-- "currencyCode": "USD"
-- },
-- "captureAmount": {
-- "amount": "14.00",
-- "currencyCode": "USD"
-- },
-- "refundedAmount": {
-- "amount": "0.00",
-- "currencyCode": "USD"
-- },
-- "convertedAmount": "14.00",
-- "conversionRate": "1.00",
-- "softDescriptor": "Descriptor",
-- "merchantMetadata": null,
-- "providerMetadata": {
-- "providerReferenceId": null
-- },
-- "statusDetails":{
-- "state": "Captured",
-- "reasonCode": null,
-- "reasonDescription": null,
-- "lastUpdatedTimestamp": "20190714T155300Z"
-- },
-- "creationTimestamp": "20190714T155300Z",
-- "expirationTimestamp": "20190715T155300Z",
-- "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
DECLARE @chargeId nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @chargeId OUT, 'chargeId'
DECLARE @chargePermissionId nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @chargePermissionId OUT, 'chargePermissionId'
DECLARE @chargeAmountAmount nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @chargeAmountAmount OUT, 'chargeAmount.amount'
DECLARE @chargeAmountCurrencyCode nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @chargeAmountCurrencyCode OUT, 'chargeAmount.currencyCode'
DECLARE @captureAmountAmount nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @captureAmountAmount OUT, 'captureAmount.amount'
DECLARE @captureAmountCurrencyCode nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @captureAmountCurrencyCode OUT, 'captureAmount.currencyCode'
DECLARE @refundedAmountAmount nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @refundedAmountAmount OUT, 'refundedAmount.amount'
DECLARE @refundedAmountCurrencyCode nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @refundedAmountCurrencyCode OUT, 'refundedAmount.currencyCode'
DECLARE @convertedAmount nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @convertedAmount OUT, 'convertedAmount'
DECLARE @conversionRate nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @conversionRate OUT, 'conversionRate'
DECLARE @softDescriptor nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @softDescriptor OUT, 'softDescriptor'
DECLARE @merchantMetadata nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @merchantMetadata OUT, 'merchantMetadata'
DECLARE @providerMetadataProviderReferenceId nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @providerMetadataProviderReferenceId OUT, 'providerMetadata.providerReferenceId'
DECLARE @statusDetailsState nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @statusDetailsState OUT, 'statusDetails.state'
DECLARE @statusDetailsReasonCode nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @statusDetailsReasonCode OUT, 'statusDetails.reasonCode'
DECLARE @statusDetailsReasonDescription nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @statusDetailsReasonDescription OUT, 'statusDetails.reasonDescription'
DECLARE @statusDetailsLastUpdatedTimestamp nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @statusDetailsLastUpdatedTimestamp OUT, 'statusDetails.lastUpdatedTimestamp'
DECLARE @creationTimestamp nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @creationTimestamp OUT, 'creationTimestamp'
DECLARE @expirationTimestamp nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @expirationTimestamp OUT, 'expirationTimestamp'
DECLARE @releaseEnvironment nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @releaseEnvironment OUT, 'releaseEnvironment'
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @privKey
EXEC @hr = sp_OADestroy @sbResponseBody
EXEC @hr = sp_OADestroy @jResp
END
GO