Amazon Pay-Integration
Bitte beachten Sie, dass das Amazon Pay API SDK nur für API-Aufrufe an den Endpunkt pay-api.amazon.com|eu|jp verwendet werden kann.
Wenn Sie einen Amazon Pay API-Aufruf durchführen müssen, der den Endpunkt mws.amazonservices.com|jp oder mws-eu.amazonservices.com verwendet, müssen Sie das ursprüngliche Amazon Pay SDK (PHP) verwenden.
Verwenden Sie Composer, um die neueste Version des SDK und seiner Abhängigkeiten zu installieren:
composer require amzn/amazon-pay-api-sdk-php
Überprüfen Sie die Installation mit dem folgenden Testskript:
<?php
include ' vendor/autoload.php ' ;
echo " SDK_VERSION= " . Amazon Pay API Client :: SDK_VERSION . "n" ;
?>
MWS-Zugriffsschlüssel, geheime MWS-Schlüssel und MWS-Autorisierungstoken aus früheren MWS-Integrationen können mit diesem SDK nicht verwendet werden.
Sie müssen Ihr eigenes öffentliches/privates Schlüsselpaar generieren, um API-Aufrufe mit diesem SDK durchzuführen.
In Windows 10 kann dies mit ssh-keygen-Befehlen erfolgen:
ssh-keygen -t rsa -b 2048 -f private.pem
ssh-keygen -f private.pem -e -m PKCS8 > public.pub
Unter Linux oder macOS kann dies mit den OpenSSL-Befehlen erfolgen:
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout > public.pub
Der erste Befehl oben generiert einen privaten Schlüssel und die zweite Zeile verwendet den privaten Schlüssel, um einen öffentlichen Schlüssel zu generieren.
Um den Schlüssel mit Ihrem Konto zu verknüpfen, befolgen Sie die Anweisungen hier, um Ihre Public-Key-ID zu erhalten.
Der Namespace für dieses Paket ist AmazonPayAPI, sodass es keine Konflikte mit den ursprünglichen Amazon Pay MWS SDKs gibt, die den AmazonPay-Namespace verwenden.
$ amazonpay_config = array (
' public_key_id ' => ' ABC123DEF456XYZ ' , // RSA Public Key ID (this is not the Merchant or Seller ID)
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' sandbox ' => true , // true (Sandbox) or false (Production) boolean
' region ' => ' us ' , // Must be one of: 'us', 'eu', 'jp'
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' // Amazon Signing Algorithm , Optional : uses AMZN - PAY - RSASSA - PSS if not specified
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' // (optional) Solution Provider Platform Version in Semantic Versioning Format
);
Wenn Sie in Seller Central umgebungsspezifische Schlüssel (z. B. öffentliche Schlüssel beginnen mit LIVE oder SANDBOX) erstellt haben, verwenden Sie diese PublicKeyId und PrivateKey. In diesem Fall ist es nicht erforderlich, den Sandbox-Parameter an die ApiConfiguration zu übergeben.
$ amazonpay_config = array (
' public_key_id ' => ' MY_PUBLIC_KEY_ID ' , // LIVE-XXXXX or SANDBOX-XXXXX
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' region ' => ' us ' , // Must be one of: 'us', 'eu', 'jp'
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' // Amazon Signing Algorithm , Optional : uses AMZN - PAY - RSASSA - PSS if not specified
);
Wenn Sie die Proxy-Unterstützung aktivieren möchten, können Sie sie in der $amazonpay_config wie folgt festlegen:
$ amazonpay_config = array (
' public_key_id ' => ' ABC123DEF456XYZ ' , // RSA Public Key ID (this is not the Merchant or Seller ID)
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' sandbox ' => true , // true (Sandbox) or false (Production) boolean
' region ' => ' us ' , // Must be one of: 'us', 'eu', 'jp'
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' , //Amazon Signing Algorithm, Optional: uses AMZN-PAY-RSASSA-PSS if not specified
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' , // (optional) Solution Provider Platform Version in Semantic Versioning Format
' proxy ' => [
' host ' => ' proxy_host ' ,
' port ' => ' proxy_port ' ,
' username ' => ' proxy_username ' ,
' password ' => ' proxy_password ' ,
]
);
Der pay-api.amazon.com|eu|jp-Endpunkt verwendet Versionierung, um zukünftige Updates zu ermöglichen. Die Hauptversion dieses SDK bleibt an der API-Version des Endpunkts ausgerichtet.
Wenn Sie Version 1.xy dieses SDK heruntergeladen haben, wäre $version in den folgenden Beispielen „v1“. 2.xy wäre „v2“ usw.
Nutzen Sie die integrierten Komfortfunktionen, um API-Aufrufe einfach durchzuführen. Scrollen Sie weiter nach unten, um Beispielcodeausschnitte anzuzeigen.
Bei Verwendung der Komfortfunktionen wird die Anforderungsnutzlast mit dem bereitgestellten privaten Schlüssel signiert und eine HTTPS-Anfrage an den richtigen regionalen Endpunkt gesendet. Im Falle einer Anforderungsdrosselung wird der HTTPS-Aufruf mithilfe eines exponentiellen Backoff-Ansatzes bis zu dreimal versucht.
Verwenden Sie diese API, um Sendungsverfolgungsinformationen an Amazon Pay bereitzustellen, damit Amazon Pay Käufer auf Alexa benachrichtigen kann, wenn Sendungen zur Zustellung bereitstehen und wann sie zugestellt werden. Weitere Informationen finden Sie in der Dokumentation zur Delivery Trackers API.
Bitte beachten Sie, dass Ihr Lösungsanbieterkonto über eine bereits bestehende Beziehung (gültiges und aktives MWS-Autorisierungstoken) mit dem Händlerkonto verfügen muss, um diese Funktion nutzen zu können.
API-Integrationshandbuch
Das Feld „$headers“ ist für die nachstehenden Aufrufe von „create/POST“ nicht optional, da es mindestens den Header „x-amz-pay-idempotency-key“ erfordert:
$ headers = array ( ' x-amz-pay-idempotency-key ' => uniqid ());
Bitte wenden Sie sich an Ihren Amazon Pay Account Manager, bevor Sie die In-Store-API-Aufrufe in einer Produktionsumgebung verwenden, um eine Kopie des In-Store-Integrationsleitfadens zu erhalten.
Für einen API-Aufruf sind vier schnelle Schritte erforderlich:
Schritt 1: Erstellen Sie einen Client (unter Verwendung des zuvor definierten Konfigurationsarrays).
$ client = new Amazon Pay API Client ( $ amazonpay_config );
Schritt 2: Generieren Sie die Nutzlast.
$ payload = ' {"scanData":"UKhrmatMeKdlfY6b","scanReferenceId":"0b8fb271-2ae2-49a5-b35d7","merchantCOE":"US","ledgerCurrency":"USD","chargeTotal":{"currencyCode":"USD","amount":"2.00"},"metadata":{"merchantNote":"Merchant Name","communicationContext":{"merchantStoreName":"Store Name","merchantOrderId":"789123"}}} ' ;
Schritt 3: Führen Sie den Anruf aus.
$ result = $ client -> instoreMerchantScan ( $ payload );
Schritt 4. Überprüfen Sie das Ergebnis.
Das $result ist ein Array mit den folgenden Schlüsseln:
Die ersten beiden Punkte (Status, Antwort) sind kritisch. Die übrigen Elemente sind bei der Fehlerbehebung hilfreich.
Um die Antwort in PHP zu analysieren, können Sie die PHP-Funktion json_decode() verwenden:
$ response = json_decode ( $ result [ ' response ' ], true );
$ id = $ response [ ' chargePermissionId ' ];
Wenn Sie ein Lösungsanbieter sind und einen API-Aufruf im Namen eines anderen Händlerkontos durchführen müssen, müssen Sie einen zusätzlichen Authentifizierungstoken-Parameter an den API-Aufruf übergeben.
$ headers = array ( ' x-amz-pay-authtoken ' => ' other_merchant_super_secret_token ' );
$ result = $ client -> instoreMerchantScan ( $ payload , $ headers );
Eine alternative Möglichkeit für Schritt 2 wäre die Verwendung von PHP-Arrays und die programmgesteuerte Generierung der JSON-Nutzlast:
$ payload = array (
' scanData ' => ' UKhrmatMeKdlfY6b ' ,
' scanReferenceId ' => uniqid (),
' merchantCOE ' => ' US ' ,
' ledgerCurrency ' => ' USD ' ,
' chargeTotal ' => array (
' currencyCode ' => ' USD ' ,
' amount ' => ' 2.00 '
),
' metadata ' => array (
' merchantNote ' => ' Merchant Name ' ,
' communicationContext ' => array (
' merchantStoreName ' => ' Store Name ' ,
' merchantOrderId ' => ' 789123 '
)
)
);
$ payload = json_encode ( $ payload );
<?php
include ' vendor/autoload.php ' ;
$ amazonpay_config = array (
' public_key_id ' => ' MY_PUBLIC_KEY_ID ' ,
' private_key ' => ' keys/private.pem ' ,
' region ' => ' US ' ,
' sandbox ' => false ,
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' ,
);
$ payload = array (
' amazonOrderReferenceId ' => ' P01-0000000-0000000 ' ,
' deliveryDetails ' => array ( array (
' trackingNumber ' => ' 01234567890 ' ,
' carrierCode ' => ' FEDEX '
))
);
try {
$ client = new Amazon Pay API Client ( $ amazonpay_config );
$ result = $ client -> deliveryTrackers ( $ payload );
if ( $ result [ ' status ' ] === 200 ) {
// success
echo $ result [ ' response ' ] . "n" ;
} else {
// check the error
echo ' status= ' . $ result [ ' status ' ] . ' ; response= ' . $ result [ ' response ' ] . "n" ;
}
} catch ( Exception $ e ) {
// handle the exception
echo $ e . "n" ;
}
?>
<?php
session_start ();
include ' vendor/autoload.php ' ;
$ amazonpay_config = array (
' public_key_id ' => ' MY_PUBLIC_KEY_ID ' ,
' private_key ' => ' keys/private.pem ' ,
' region ' => ' US ' ,
' sandbox ' => true ,
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' ,
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' // (optional) Solution Provider Platform Version in Semantic Versioning Format
);
$ payload = array (
' webCheckoutDetails ' => array (
' checkoutReviewReturnUrl ' => ' https://localhost/store/checkout_review ' ,
' checkoutResultReturnUrl ' => ' https://localhost/store/checkout_result '
),
' storeId ' => ' amzn1.application-oa2-client.000000000000000000000000000000000 '
);
$ headers = array ( ' x-amz-pay-Idempotency-Key ' => uniqid ());
try {
$ client = new Amazon Pay API Client ( $ amazonpay_config );
$ result = $ client -> createCheckoutSession ( $ payload , $ headers );
header ( " Content-type:application/json; charset=utf-8 " );
echo $ result [ ' response ' ];
if ( $ result [ ' status ' ] !== 201 ) {
http_response_code ( 500 );
}
} catch ( Exception $ e ) {
// handle the exception
echo $ e . "n" ;
http_response_code ( 500 );
}
?>
<?php
include ' vendor/autoload.php ' ;
$ amazonpay_config = array (
' public_key_id ' => ' YOUR_PUBLIC_KEY_ID ' ,
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' region ' => ' YOUR_REGION_CODE ' ,
' sandbox ' => true ,
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' ,
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' // (optional) Solution Provider Platform Version in Semantic Versioning Format
);
$ payload = array (
' webCheckoutDetails ' => array (
' checkoutReviewReturnUrl ' => ' https://localhost/store/checkout_review ' ,
' checkoutResultReturnUrl ' => ' https://localhost/store/checkout_result '
),
' storeId ' => ' amzn1.application-oa2-client.000000000000000000000000000000000 '
);
$ headers = array ( ' x-amz-pay-Idempotency-Key ' => uniqid ());
try {
$ client = new Amazon Pay API Client ( $ amazonpay_config );
$ result = $ client -> createCheckoutSession ( $ payload , $ headers );
if ( $ result [ ' status ' ] === 201 ) {
// created
$ response = json_decode ( $ result [ ' response ' ], true );
$ checkoutSessionId = $ response [ ' checkoutSessionId ' ];
echo " checkoutSessionId= $ checkoutSessionId n" ;
} else {
// check the error
echo ' status= ' . $ result [ ' status ' ] . ' ; response= ' . $ result [ ' response ' ] . "n" ;
}
} catch ( Exception $ e ) {
// handle the exception
echo $ e . "n" ;
}
?>
<?php
include ' vendor/autoload.php ' ;
$ amazonpay_config = array (
' public_key_id ' => ' YOUR_PUBLIC_KEY_ID ' ,
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' region ' => ' YOUR_REGION_CODE ' ,
' sandbox ' => true ,
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' ,
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' // (optional) Solution Provider Platform Version in Semantic Versioning Format
);
try {
$ checkoutSessionId = ' 00000000-0000-0000-0000-000000000000 ' ;
$ client = new Amazon Pay API Client ( $ amazonpay_config );
$ result = $ client -> getCheckoutSession ( $ checkoutSessionId );
if ( $ result [ ' status ' ] === 200 ) {
$ response = json_decode ( $ result [ ' response ' ], true );
$ checkoutSessionState = $ response [ ' statusDetails ' ][ ' state ' ];
$ chargeId = $ response [ ' chargeId ' ];
$ chargePermissionId = $ response [ ' chargePermissionId ' ];
// NOTE: Once Checkout Session moves to a "Completed" state, buyer and shipping
// details must be obtained from the getCharges() function call instead
$ buyerName = $ response [ ' buyer ' ][ ' name ' ];
$ buyerEmail = $ response [ ' buyer ' ][ ' email ' ];
$ shipName = $ response [ ' shippingAddress ' ][ ' name ' ];
$ shipAddrLine1 = $ response [ ' shippingAddress ' ][ ' addressLine1 ' ];
$ shipCity = $ response [ ' shippingAddress ' ][ ' city ' ];
$ shipState = $ response [ ' shippingAddress ' ][ ' stateOrRegion ' ];
$ shipZip = $ response [ ' shippingAddress ' ][ ' postalCode ' ];
$ shipCounty = $ response [ ' shippingAddress ' ][ ' countryCode ' ];
echo " checkoutSessionState= $ checkoutSessionState n" ;
echo " chargeId= $ chargeId ; chargePermissionId= $ chargePermissionId n" ;
echo " buyer= $ buyerName ( $ buyerEmail ) n" ;
echo " shipName= $ shipName n" ;
echo " address= $ shipAddrLine1 ; $ shipCity $ shipState $ shipZip ( $ shipCounty ) n" ;
} else {
// check the error
echo ' status= ' . $ result [ ' status ' ] . ' ; response= ' . $ result [ ' response ' ] . "n" ;
}
} catch ( Exception $ e ) {
// handle the exception
echo $ e . "n" ;
}
?>
<?php
include ' vendor/autoload.php ' ;
$ amazonpay_config = array (
' public_key_id ' => ' YOUR_PUBLIC_KEY_ID ' ,
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' region ' => ' YOUR_REGION_CODE ' ,
' sandbox ' => true ,
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' ,
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' // (optional) Solution Provider Platform Version in Semantic Versioning Format
);
$ payload = array (
' paymentDetails ' =>