التكامل مع أمازون باي
يرجى ملاحظة أنه لا يمكن استخدام Amazon Pay API SDK إلا لاستدعاءات واجهة برمجة التطبيقات (API) إلى نقطة نهاية pay-api.amazon.com|eu|jp.
إذا كنت بحاجة إلى إجراء استدعاء Amazon Pay API الذي يستخدم نقطة النهاية mws.amazonservices.com|jp أو mws-eu.amazonservices.com، فستحتاج إلى استخدام Amazon Pay SDK (PHP) الأصلي.
استخدم الملحن لتثبيت أحدث إصدار من SDK وتبعياته:
composer require amzn/amazon-pay-api-sdk-php
تحقق من التثبيت باستخدام البرنامج النصي للاختبار التالي:
<?php
include ' vendor/autoload.php ' ;
echo " SDK_VERSION= " . Amazon Pay API Client :: SDK_VERSION . "n" ;
?>
لا يمكن استخدام مفاتيح وصول MWS، ومفاتيح MWS السرية، ورموز تفويض MWS المميزة من عمليات تكامل MWS السابقة مع SDK هذا.
ستحتاج إلى إنشاء زوج المفاتيح العام/الخاص الخاص بك لإجراء مكالمات API باستخدام SDK هذا.
في نظام التشغيل Windows 10، يمكن القيام بذلك باستخدام أوامر ssh-keygen:
ssh-keygen -t rsa -b 2048 -f private.pem
ssh-keygen -f private.pem -e -m PKCS8 > public.pub
في Linux أو macOS يمكن القيام بذلك باستخدام أوامر opensl:
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout > public.pub
ينشئ الأمر الأول أعلاه مفتاحًا خاصًا ويستخدم السطر الثاني المفتاح الخاص لإنشاء مفتاح عام.
لربط المفتاح بحسابك، اتبع الإرشادات الواردة هنا للحصول على معرف المفتاح العام الخاص بك.
مساحة الاسم لهذه الحزمة هي AmazonPayAPI، لذا لا يوجد أي تعارض مع Amazon Pay MWS SDK الأصلية التي تستخدم مساحة الاسم 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
);
إذا قمت بإنشاء مفاتيح خاصة بالبيئة (على سبيل المثال، المفتاح العام يبدأ بـ LIVE أو SANDBOX) في Seller Central، فاستخدم PublicKeyId وPrivateKey. في هذه الحالة، ليست هناك حاجة لتمرير معلمة Sandbox إلى 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
);
إذا كنت تريد تمكين دعم الوكيل، فيمكنك تعيينه في $amazonpay_config بالطريقة التالية:
$ 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 ' ,
]
);
تستخدم نقطة النهاية pay-api.amazon.com|eu|jp تعيين الإصدار للسماح بالتحديثات المستقبلية. سيظل الإصدار الرئيسي من SDK هذا متوافقًا مع إصدار واجهة برمجة التطبيقات (API) لنقطة النهاية.
إذا قمت بتنزيل الإصدار 1.xy من SDK هذا، فسيكون الإصدار $ في الأمثلة أدناه هو "v1". 2.xy سيكون "v2"، وما إلى ذلك.
استفد من وظائف الراحة المضمنة لإجراء مكالمات API بسهولة. قم بالتمرير لأسفل لرؤية أمثلة على مقتطفات التعليمات البرمجية.
عند استخدام وظائف الراحة، سيتم توقيع حمولة الطلب باستخدام المفتاح الخاص المقدم، ويتم تقديم طلب HTTPS إلى نقطة النهاية الإقليمية الصحيحة. في حالة تقييد الطلب، ستتم محاولة استدعاء HTTPS حتى ثلاث مرات باستخدام أسلوب التراجع الأسي.
استخدم واجهة برمجة التطبيقات هذه لتوفير معلومات تتبع الشحنة إلى Amazon Pay حتى تتمكن Amazon Pay من إخطار المشترين على Alexa عند خروج الشحنات للتسليم ومتى يتم تسليمها. يرجى الرجوع إلى وثائق Delivery Trackers API للحصول على معلومات إضافية.
يرجى ملاحظة أن حساب موفر الحلول الخاص بك يجب أن يكون له علاقة موجودة مسبقًا (رمز ترخيص MWS صالح ونشط) مع حساب التاجر حتى تتمكن من استخدام هذه الوظيفة.
دليل تكامل API
الحقل $headers ليس اختياريًا لاستدعاءات الإنشاء/النشر أدناه لأنه يتطلب، على الأقل، رأس مفتاح x-amz-pay-idempotency:
$ headers = array ( ' x-amz-pay-idempotency-key ' => uniqid ());
يرجى الاتصال بمدير حساب Amazon Pay الخاص بك قبل استخدام مكالمات In-Store API في بيئة الإنتاج للحصول على نسخة من دليل التكامل داخل المتجر.
هناك حاجة إلى أربع خطوات سريعة لإجراء استدعاء API:
الخطوة 1. إنشاء عميل (باستخدام مصفوفة التكوين المحددة مسبقًا).
$ client = new Amazon Pay API Client ( $ amazonpay_config );
الخطوة 2. إنشاء الحمولة.
$ 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"}}} ' ;
الخطوة 3. قم بتنفيذ المكالمة.
$ result = $ client -> instoreMerchantScan ( $ payload );
الخطوة 4. تحقق من النتيجة.
ستكون النتيجة $ عبارة عن مصفوفة تحتوي على المفاتيح التالية:
العنصران الأولان (الحالة، الاستجابة) لهما أهمية بالغة. العناصر المتبقية مفيدة في حالات استكشاف الأخطاء وإصلاحها.
لتحليل الاستجابة في PHP، يمكنك استخدام وظيفة PHP json_decode():
$ response = json_decode ( $ result [ ' response ' ], true );
$ id = $ response [ ' chargePermissionId ' ];
إذا كنت موفر حلول وتحتاج إلى إجراء استدعاء API نيابة عن حساب تاجر مختلف، فستحتاج إلى تمرير معلمة رمز مصادقة إضافية إلى استدعاء API.
$ headers = array ( ' x-amz-pay-authtoken ' => ' other_merchant_super_secret_token ' );
$ result = $ client -> instoreMerchantScan ( $ payload , $ headers );
هناك طريقة بديلة للقيام بالخطوة 2 وهي استخدام مصفوفات PHP وإنشاء حمولة JSON برمجيًا:
$ 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 ' =>