Integrasi Amazon Pay
Harap dicatat bahwa Amazon Pay API SDK hanya dapat digunakan untuk panggilan API ke titik akhir pay-api.amazon.com|eu|jp.
Jika Anda perlu melakukan panggilan API Amazon Pay yang menggunakan titik akhir mws.amazonservices.com|jp atau mws-eu.amazonservices.com, maka Anda perlu menggunakan Amazon Pay SDK (PHP) asli.
Gunakan composer untuk menginstal rilis terbaru SDK dan dependensinya:
composer require amzn/amazon-pay-api-sdk-php
Verifikasi instalasi dengan skrip pengujian berikut:
<?php
include ' vendor/autoload.php ' ;
echo " SDK_VERSION= " . Amazon Pay API Client :: SDK_VERSION . "n" ;
?>
Kunci akses MWS, kunci rahasia MWS, dan token otorisasi MWS dari integrasi MWS sebelumnya tidak dapat digunakan dengan SDK ini.
Anda perlu membuat pasangan kunci publik/pribadi Anda sendiri untuk melakukan panggilan API dengan SDK ini.
Di Windows 10 ini dapat dilakukan dengan perintah ssh-keygen:
ssh-keygen -t rsa -b 2048 -f private.pem
ssh-keygen -f private.pem -e -m PKCS8 > public.pub
Di Linux atau MacOS, hal ini dapat dilakukan dengan menggunakan perintah openssl:
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout > public.pub
Perintah pertama di atas menghasilkan kunci privat dan baris kedua menggunakan kunci privat untuk menghasilkan kunci publik.
Untuk mengaitkan kunci dengan akun Anda, ikuti petunjuk di sini untuk Mendapatkan ID Kunci Publik Anda.
Namespace untuk paket ini adalah AmazonPayAPI sehingga tidak ada konflik dengan SDK MWS Amazon Pay asli yang menggunakan namespace AmazonPay.
$ 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
);
Jika Anda telah membuat kunci khusus lingkungan (yaitu Kunci Publik Dimulai dengan LIVE atau SANDBOX) di Seller Central, gunakan PublicKeyId & PrivateKey tersebut. Dalam hal ini, tidak perlu meneruskan parameter Sandbox ke ApiConfiguration.
$ 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
);
Jika Anda ingin mengaktifkan dukungan proxy, Anda dapat mengaturnya di $amazonpay_config dengan cara berikut:
$ 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 ' ,
]
);
Titik akhir pay-api.amazon.com|eu|jp menggunakan pembuatan versi untuk memungkinkan pembaruan di masa mendatang. Versi utama SDK ini akan tetap selaras dengan versi API titik akhir.
Jika Anda telah mengunduh SDK ini versi 1.xy, $version pada contoh di bawah adalah "v1". 2.xy akan menjadi "v2", dll.
Manfaatkan fungsi kenyamanan bawaan untuk melakukan panggilan API dengan mudah. Gulir ke bawah lebih jauh untuk melihat cuplikan kode contoh.
Saat menggunakan fungsi praktis, payload permintaan akan ditandatangani menggunakan kunci pribadi yang disediakan, dan permintaan HTTPS dibuat ke titik akhir regional yang benar. Jika terjadi pembatasan permintaan, panggilan HTTPS akan dicoba hingga tiga kali menggunakan pendekatan backoff eksponensial.
Gunakan API ini untuk memberikan informasi pelacakan pengiriman ke Amazon Pay sehingga Amazon Pay dapat memberi tahu pembeli di Alexa kapan pengiriman akan dikirim dan kapan sudah terkirim. Silakan lihat dokumentasi Delivery Trackers API untuk informasi tambahan.
Harap dicatat bahwa akun penyedia solusi Anda harus memiliki hubungan yang sudah ada sebelumnya (token otorisasi MWS yang valid dan aktif) dengan akun pedagang untuk menggunakan fungsi ini.
Panduan Integrasi API
Bidang $headers bukan opsional untuk panggilan buat/POST di bawah ini karena memerlukan, minimal, header x-amz-pay-idempotency-key:
$ headers = array ( ' x-amz-pay-idempotency-key ' => uniqid ());
Silakan hubungi Manajer Akun Amazon Pay Anda sebelum menggunakan panggilan API In-Store di lingkungan Produksi untuk mendapatkan salinan Panduan Integrasi In-Store.
Empat langkah cepat diperlukan untuk melakukan panggilan API:
Langkah 1. Bangun Klien (menggunakan Config Array yang telah ditentukan sebelumnya).
$ client = new Amazon Pay API Client ( $ amazonpay_config );
Langkah 2. Hasilkan payload.
$ 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"}}} ' ;
Langkah 3. Jalankan panggilan.
$ result = $ client -> instoreMerchantScan ( $ payload );
Langkah 4. Periksa hasilnya.
$result akan berupa array dengan kunci berikut:
Dua item pertama (status, respons) sangat penting. Item lainnya berguna dalam situasi pemecahan masalah.
Untuk mengurai respon di PHP, Anda dapat menggunakan fungsi PHP json_decode():
$ response = json_decode ( $ result [ ' response ' ], true );
$ id = $ response [ ' chargePermissionId ' ];
Jika Anda adalah Penyedia Solusi dan perlu melakukan panggilan API atas nama akun pedagang lain, Anda harus meneruskan parameter token autentikasi tambahan ke dalam panggilan API.
$ headers = array ( ' x-amz-pay-authtoken ' => ' other_merchant_super_secret_token ' );
$ result = $ client -> instoreMerchantScan ( $ payload , $ headers );
Cara alternatif untuk melakukan Langkah 2 adalah dengan menggunakan array PHP dan menghasilkan payload JSON secara terprogram:
$ 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 ' =>