Я разрабатываю мобильное приложение электронной коммерции, используя только magento 2 rest apis. Это поток для вызова API REST для размещения заказов.
1.Create a cart
api -> {{url}}/index.php/rest/V1/carts/mine
Этот api вернет уникальный идентификатор корзины
2.Add products to cart
api -> {{url}}/index.php/rest/V1/carts/mine/items
тело ->
{ "cart_item": { "quote_id": cartId, "sku": skuName, "qty": 1 } }
3. Estimate Shipping Methods
url -> {{url}}/index.php/rest/V1/carts/mine/estimate-shipping-methods
тело ->
{ "address": { "region": "Trivandrum", "region_id": 12, "region_code": "CA", "country_id": "IN", "street": [ "Amstor house", "Eramam" ], "telephone": "5656565454", "postcode": "670390", "city": "Kazhakuttam", "firstname": "Peter", "lastname": "K", "same_as_billing": 0, "save_in_address_book": 0 } }
Это вернет все возможные методы доставки, основанные на адресе доставки. В моем случае результат
[ { "carrier_code": "freeshipping", "method_code": "freeshipping", "carrier_title": "Free Shipping", "method_title": "Free", "amount": 0, "base_amount": 0, "available": true, "error_message": "", "price_excl_tax": 0, "price_incl_tax": 0 } ]
4)Save shipping information
url -> {{url}}/index.php/rest/V1/carts/mine/shipping-information
данные тела ->
{ "addressInformation": { "shipping_address": { "region": "Trivandrum", "region_id": 12, "region_code": "CA", "country_id": "IN", "street": [ "Amstor house", "Eramam" ], "telephone": "5656565454", "postcode": "670390", "city": "Kazhakuttam", "firstname": "Peter", "lastname": "K", }, "billing_address": { "region": "Trivandrum", "region_id": 12, "region_code": "CA", "country_id": "IN", "street": [ "Amstor house", "Eramam" ], "telephone": "5656565454", "postcode": "670390", "city": "Kazhakuttam", "firstname": "Peter", "lastname": "K", }, "shipping_method_code": "freeshipping", "shipping_carrier_code": "freeshipping" } }
Это вернет все возможные способы оплаты. Здесь я использую paypal_express
для оплаты.
5. Payment using paypal plugin
Здесь я буду платить сумму, используя плагин paypal cordova. Также настроил IPN [{{url}} / paypal / ipn /] в учетной записи PayPal
Этот api вернет следующие данные,
{ "client": { "environment": "sandbox", "paypal_sdk_version": "2.14.4", "platform": "Android", "product_name": "PayPal-Android-SDK" }, "response": { "create_time": "2016-11-19T05:25:46Z", "id": "PAY-5VS11410F5341972MLAX6ETA", "intent": "sale", "state": "approved" }, "response_type": "payment" }
5.Save payment and place order
url -> {{url}}/index.php/rest/V1/carts/mine/payment-information
данные ->
{ "cartId": 3, "billingAddress": { "region": "Trivandrum", "region_id": 12, "region_code": "CA", "country_id": "IN", "street": [ "Amstor house", "Eramam" ], "telephone": "5656565454", "postcode": "670390", "city": "Kazhakuttam", "firstname": "Peter", "lastname": "K" }, "paymentMethod": { "method": "paypal_express" } }
Но этот api вернется
{ "message": "PayPal gateway has rejected request. Invalid token (#10410: Invalid token)." }
Есть ли какой-либо api, отсутствующий в вышеуказанном потоке для сбора платежей. Пожалуйста, помогите мне.
Метод оплаты Paypal Express не поддерживает онлайн-захват. Невозможно получить поток создания полного заказа, например, в Checkout через интерфейс API Magento. Невозможно изменить состояние заказа и оплатить процесс. В качестве обходного решения попробуйте следующее:
Я пишу полную статью об этом шаг за шагом. Я сообщу вам, когда это будет сделано.
В случае, если кто-то все еще ищет решение.
В то время, когда я отвечаю на это, вам нужно будет создать модуль Magento 2 для обработки идентификатора платежа.
После того, как вы получите ответ из примера SDK Paypal android.
Ниже представлен формат JSON, который вы можете отправить конечной точке Magento:
Ссылка: http://devdocs.magento.com/swagger
«Paypal_express_payment_payload» – это просто настраиваемый атрибут для хранения ответа на платеж PayPal ранее от SDK android.
{ "paymentMethod": { "method": "paypal_express", "additional_data": { "paypal_express_payment_payload": "{\"create_time\":\"2017-06-15T23:13:52Z\",\"id\":\"PAY-2LB41725NU654612TLFBRIUQ\",\"intent\":\"sale\",\"state\":\"approved\"}" } } }
Для обработки данных «paypal_express_payment_payload» вы можете реализовать Interceptor в своем модуле Magento 2:
di.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\Paypal\Model\Express"> <plugin name="mymodule_magento_paypal_model_express_plugin" type="Mycompanyorpersonal\Mymodule\Plugin\Paypal\Model\Express" sortOrder="99999" disabled="false" /> </type> </config>
Mycompanyorpersonal \ MyModule \ Plugin \ Paypal \ Model \ Express.php
Вы можете найти полные коды PHP в моем следующем виде: https://gist.github.com/feelinc/de817030e00adc7ff7001de1807c1835