ฉันใช้การติดตั้งใหม่สำหรับสิ่งต่อไปนี้โดยใช้ Magento2 CE 2.2.0-dev และปล่อยชุดรูปแบบ "Luma" เริ่มต้นไว้ด้วย
เกี่ยวกับวิธีการชำระเงินภายนอก (เกตเวย์) เช่นMiGS , Braintree , PayPalและอื่น ๆ Magento สนับสนุนเกตเวย์เหล่านี้ออกมาจากกล่อง แต่มี NO API สำหรับพวกเขาที่คุณสามารถใช้พร้อมกับ API "Checkout" อื่น ๆ
ดังนั้นหากคุณวางแผนที่จะสร้างแอป / เพจชำระเงินโดยใช้ API ของ Magento คุณจะต้องรวมเข้ากับบริการเหล่านี้ด้วยตนเองโดยใช้ SDK / API ของพวกเขาโชคดีคุณสามารถเรียนรู้ได้มากมายโดยการตรวจสอบว่า Magento ทำงานร่วมกับบริการเหล่านี้อย่างไร ในการบูรณาการ
เพื่อทำความเข้าใจสิ่งนี้ฉันต้องกำหนดค่าเบรนทรีเนื่องจากเป็นวิธีที่ง่ายที่สุด:
- สร้างบัญชี sandbox ที่https://www.braintreepayments.com/sandbox
- เข้าถึง Magento Admin Area
- ร้านค้า> การกำหนดค่า> การขาย> วิธีการชำระเงิน> เบรนทรี> กำหนดค่า
- ตรวจสอบให้แน่ใจว่า "สภาพแวดล้อม" เป็น "แซนด์บ็อกซ์" และป้อน "รหัสผู้ขาย", "รหัสสาธารณะ" และ "รหัสส่วนตัว"
- บันทึกการกำหนดค่า
- คุณอาจต้องทำดัชนีใหม่และ / หรือรีเฟรชแคช
เมื่อเพิ่มสินค้าลงในตะกร้าและดำเนินการชำระเงินในขั้นตอนสุดท้ายเลือกวิธีชำระเงิน Braintree จากนั้นหลังจากคลิกปุ่ม "สั่งซื้อ" คุณจะสังเกตเห็นคำขอ AJAX ต่อไปนี้:
- 2 ขอให้ Braintree API ตรวจสอบความถูกต้องของบัตรทำธุรกรรมและตอบกลับด้วยสถานะการทำธุรกรรม
- คำขอ API ของ Magento
guest-carts/cartId/payment-information
โดยมีเนื้อหาตามที่อธิบายไว้ในเอกสาร API ของ Magento
หลังจากนั้นกระบวนการจะดำเนินต่อไปตามที่คาดไว้โดยเปลี่ยนเส้นทางไปยังหน้าความสำเร็จเมื่อคำขอล่าสุดตอบสนองใน JSON ที่มีคำสั่งซื้อ entity_id
สิ่งนี้เป็นการยืนยันว่าการโทรไปยังบริการภายนอก -Braintree ในตัวอย่างของเรานั้นดำเนินการโดยหน้าเช็คเอาต์ไม่ใช่โดย Magento ภายในดังนั้นเราจะต้องทำเช่นเดียวกันหากเราต้องพัฒนาหน้าเช็คเอาท์ / แอปของเราเอง
สำหรับการควบคุมสถานะการสั่งซื้อฉันขุดลึกลงไปและพบว่าการใช้วิธีการชำระเงินเช่น MiGS, Braintree หรือ PayPal ทำให้เกิดการสั่งซื้อที่มีสถานะprocessing
มากกว่าปกติpending
ฉันสงสัยว่านี่เป็นการกำหนดค่าวิธีการชำระเงินหรือผู้สังเกตการณ์ แต่ดูเหมือนว่าจะเป็นการกำหนดค่าที่นี่มีรายละเอียดเพิ่มเติม
คลาส: วีโอไอพี \ การขาย \ แบบจำลอง \ การสั่งซื้อ \ การชำระเงิน
วิธีการ: สถานที่ ()
มีเงื่อนไขที่ตรวจสอบว่าเป็นInitialization
เป็นสิ่งจำเป็นสำหรับวิธีการที่if ($methodInstance->isInitializeNeeded())
ถ้าเป็นกรณีที่วิธีการที่initialize()
จะดำเนินการที่คุณกำหนดและช่วยให้คุณระบุทั้งสองและstate
status