การรวม Amazon Pay
โปรดทราบว่า 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 สามารถทำได้โดยใช้คำสั่ง openssl:
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) ใน Sell 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 ของตำแหน่งข้อมูล
หากคุณดาวน์โหลด SDK นี้เวอร์ชัน 1.xy แล้ว $version ในตัวอย่างด้านล่างจะเป็น "v1" 2.xy จะเป็น "v2" เป็นต้น
ใช้ฟังก์ชันอำนวยความสะดวกในตัวเพื่อทำการเรียก API ได้อย่างง่ายดาย เลื่อนลงไปอีกเพื่อดูตัวอย่างโค้ด
เมื่อใช้ฟังก์ชันอำนวยความสะดวก เพย์โหลดคำขอจะถูกลงนามโดยใช้คีย์ส่วนตัวที่ให้มา และคำขอ HTTPS จะถูกส่งไปยังตำแหน่งข้อมูลภูมิภาคที่ถูกต้อง ในกรณีที่มีการควบคุมปริมาณคำขอ การเรียก HTTPS จะพยายามสูงสุดสามครั้งโดยใช้วิธีแบ็คออฟแบบเอ็กซ์โปเนนเชียล
ใช้ API นี้เพื่อให้ข้อมูลการติดตามการจัดส่งแก่ Amazon Pay เพื่อให้ Amazon Pay สามารถแจ้งให้ผู้ซื้อใน Alexa ทราบเมื่อมีการจัดส่งและเวลาที่จัดส่ง โปรดดูเอกสารประกอบ Delivery Trackers API สำหรับข้อมูลเพิ่มเติม
โปรดทราบว่าบัญชีผู้ให้บริการโซลูชันของคุณต้องมีความสัมพันธ์ที่มีอยู่แล้ว (โทเค็นการอนุญาต MWS ที่ถูกต้องและใช้งานอยู่) กับบัญชีผู้ค้าจึงจะสามารถใช้ฟังก์ชันนี้ได้
คู่มือการรวม API
ฟิลด์ $headers ไม่ใช่ทางเลือกสำหรับการเรียก create/POST ด้านล่าง เนื่องจากอย่างน้อยที่สุดจะต้องมีส่วนหัว x-amz-pay-idempotency-key:
$ headers = array ( ' x-amz-pay-idempotency-key ' => uniqid ());
โปรดติดต่อผู้จัดการบัญชี Amazon Pay ของคุณก่อนที่จะใช้การเรียก API ในร้านค้าในสภาพแวดล้อมการผลิตเพื่อขอรับสำเนาคู่มือการบูรณาการในร้านค้า
จำเป็นต้องมีสี่ขั้นตอนด่วนเพื่อทำการเรียก API:
ขั้นตอนที่ 1 สร้างไคลเอนต์ (โดยใช้ Config Array ที่กำหนดไว้ก่อนหน้านี้)
$ 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 ตรวจสอบผลลัพธ์
$result จะเป็นอาร์เรย์ที่มีคีย์ต่อไปนี้:
สองรายการแรก (สถานะ การตอบกลับ) มีความสำคัญ รายการที่เหลือมีประโยชน์ในสถานการณ์การแก้ไขปัญหา
หากต้องการแยกวิเคราะห์การตอบสนองใน 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 ' =>