integrar example developer apicontext php rest cordova paypal magento2

php - example - paypal integration



No se puede realizar el pedido con PayPal en magento 2 descanso (2)

Estoy desarrollando una aplicación mobiloe de comercio electrónico usando magento 2 repos apis solamente. Este es el flujo para realizar las llamadas a la API REST para la colocación de pedidos.

1.Create a cart

api -> {{url}}/index.php/rest/V1/carts/mine

Esta API devolverá una ID de carrito única

2.Add products to cart

api -> {{url}}/index.php/rest/V1/carts/mine/items

cuerpo ->

{ "cart_item": { "quote_id": cartId, "sku": skuName, "qty": 1 } }

3. Estimate Shipping Methods

url -> {{url}}/index.php/rest/V1/carts/mine/estimate-shipping-methods

cuerpo ->

{ "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 } }

Esto devolverá todos los métodos de envío posibles en función de la dirección de envío. En mi caso, el resultado es

[ { "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

datos del cuerpo ->

{ "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" } }

Esto devolverá todos los métodos de pago posibles. Aquí estoy usando paypal_express para el pago.

5. Payment using paypal plugin

Aquí pagaré la cantidad usando el complemento de paypal cordova. También configuré el IPN [{{url}} / paypal / ipn /] en la cuenta de paypal

Esta API devolverá los siguientes datos,

{ "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

datos ->

{ "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" } }

Pero esta API volverá

{ "message": "PayPal gateway has rejected request. Invalid token (#10410: Invalid token)." }

¿Hay alguna API falta en el flujo anterior para capturar pagos? Por favor, ayúdenme.


El método de pago Paypal Express no es compatible con la captura en línea. No hay forma de obtener un flujo completo de creación de pedidos como en Checkout a través de la interfaz API de Magento. Es imposible cambiar el estado de la orden y procesar los pagos. Como solución, intente lo siguiente:

  1. Crea un método de pago personalizado
  2. Activar solo para REST API (No en la página de pago del sitio web)
  3. Al realizar el pago con la API de reposo, utilice este método (después del pago exitoso con su SDK de android / ios)
  4. Después de realizar el pedido, realice la devolución de la identificación de la transacción (PAY-xxxxx) mediante el pago de PayPal sdk para guardar la transacción (indique a su servidor que debe implementar esta llamada).

Estoy escribiendo un artículo completo con respecto a este paso por paso. Te avisaré cuando haya terminado.


En caso de que alguien aún esté buscando la solución.

En el momento en que responda esto, deberá crear un módulo de Magento 2 para procesar la identificación de pago.

Después de recibir la respuesta de, por ejemplo, Paypal android SDK.

A continuación se muestra el formato JSON que puede enviar al punto final de Magento:

  • para el usuario registrado: PUT / V1 / carts / mine / order
  • para invitados: PUT / V1 / guest-carts /: cartId / order

Referencia: http://devdocs.magento.com/swagger

El "paypal_express_payment_payload" es solo un atributo personalizado para mantener la respuesta de pago de PayPal previamente desde el SDK de 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/"}" } } }

Para procesar los datos de "paypal_express_payment_payload", puede implementar un Interceptor en su módulo 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

Puede encontrar los códigos completos de PHP en mi siguiente esencia: https://gist.github.com/feelinc/de817030e00adc7ff7001de1807c1835