diff --git a/_data/toc/graphql.yml b/_data/toc/graphql.yml index e7fddacabbc..3c2129f4b74 100644 --- a/_data/toc/graphql.yml +++ b/_data/toc/graphql.yml @@ -191,6 +191,9 @@ pages: - label: PayPal Payflow Pro url: /graphql/payment-methods/payflow-pro.html + - label: PayPal Payments Advanced + url: /graphql/payment-methods/payments-advanced.html + - label: Tutorial class: tutorial url: /graphql/tutorials/checkout/index.html diff --git a/_includes/graphql/payment-methods/payflow-link-attributes.md b/_includes/graphql/payment-methods/payflow-link-attributes.md new file mode 100644 index 00000000000..6f30117fb60 --- /dev/null +++ b/_includes/graphql/payment-methods/payflow-link-attributes.md @@ -0,0 +1,5 @@ +Attribute | Data Type | Description +--- | --- | --- +`cancel_url` | String! | The URL that PayPal redirects to upon payment cancellation +`error_url` | String! | The URL that PayPal redirects to upon payment error +`return_url` | String! | The URL that PayPal redirects to upon payment success diff --git a/_includes/graphql/payment-methods/payflow-link-workflow.md b/_includes/graphql/payment-methods/payflow-link-workflow.md new file mode 100644 index 00000000000..6b7d4124df0 --- /dev/null +++ b/_includes/graphql/payment-methods/payflow-link-workflow.md @@ -0,0 +1,21 @@ +1. The PWA client uses the [`setPaymentMethodOnCart`]({{page.baseurl}}/graphql/reference/quote-payment-method.html) mutation to set the payment method. + +1. The mutation returns a `Cart` object. + +1. The client runs the [`placeOrder`]({{page.baseurl}}/graphql/reference/quote-place-order.html) mutation, which creates an order in Magento and begins the authorization process. + +1. Magento requests a secure token from the Paypal gateway. + +1. The gateway response includes a secure token, a secure token ID, and the URL to use for requesting the form in step 9. This token secures the data for a one-time transaction and is valid for 30 minutes. + +1. The `placeOrder` mutation returns an order ID. Magento does not return secure token information. The order has the status `payment pending`. + +1. The client runs the [`getPayflowLinkToken`]({{page.baseurl}}/graphql/reference/paypal-get-payflow-link-token.html) mutation to retrieve the secure token information. + +1. Magento returns the token information. + +1. The client displays a payment form in an iframe rendered from the URL specified by the `paypal_url` from the `getPayflowLinkToken` mutation response. When the customer completes the form, the client sends the payment information directly to the PayPal gateway, bypassing the Magento server. + +1. After PayPal processes the payment, the gateway runs a silent post request against the Magento server. As a result, Magento sets the order status to pending, and the order is ready to be invoiced. + +1. The PayPal gateway returns control of the customer's browser to the client. diff --git a/common/images/graphql/paypal-payflow-link.svg b/common/images/graphql/paypal-payflow-link.svg new file mode 100644 index 00000000000..2ad24d71e87 --- /dev/null +++ b/common/images/graphql/paypal-payflow-link.svg @@ -0,0 +1,2 @@ + +
11
[Not supported by viewer]

PayPal returns control to the browser.

[Not supported by viewer]

PayPal updates the order as paid.

[Not supported by viewer]
10
[Not supported by viewer]
8
[Not supported by viewer]

Magento returns the information needed to request an iframe from PayPal.

[Not supported by viewer]
7
[Not supported by viewer]

Request the token information.

[Not supported by viewer]
5
[Not supported by viewer]

PayPal returns token information.

[Not supported by viewer]
4
[Not supported by viewer]

Magento requests a secure token.

[Not supported by viewer]

Magento returns the order ID.

[Not supported by viewer]
6
[Not supported by viewer]

Place the order.

[Not supported by viewer]
3
[Not supported by viewer]
2
[Not supported by viewer]

Magento returns the Cart object.

[Not supported by viewer]

Client
(PWA)

[Not supported by viewer]

Magento

[Not supported by viewer]
1
[Not supported by viewer]

Set the payment method.

<p style="font-size: 13px">Set the payment method.</p>
9
[Not supported by viewer]

Display a payment form in an iframe. Customer clicks the PayPal button.

[Not supported by viewer]

PayPal

[Not supported by viewer]
\ No newline at end of file diff --git a/guides/v2.3/graphql/images/paypal-payflow-link.svg b/guides/v2.3/graphql/images/paypal-payflow-link.svg deleted file mode 100644 index 22eb4be611d..00000000000 --- a/guides/v2.3/graphql/images/paypal-payflow-link.svg +++ /dev/null @@ -1,2 +0,0 @@ - -
11
[Not supported by viewer]

PayPal returns control to the browser.

[Not supported by viewer]

PayPal updates the order as paid.

[Not supported by viewer]
10
[Not supported by viewer]
8
[Not supported by viewer]

Magento returns the information needed to request an iframe from PayPal.

[Not supported by viewer]
7
[Not supported by viewer]

Request the token information.

[Not supported by viewer]
5
[Not supported by viewer]

PayPal returns token information.

[Not supported by viewer]
4
[Not supported by viewer]

Magento requests a secure token.

[Not supported by viewer]

Magento returns the order ID.

[Not supported by viewer]
6
[Not supported by viewer]

Place the order.

[Not supported by viewer]
3
[Not supported by viewer]
2
[Not supported by viewer]

Magento returns the Cart object.

[Not supported by viewer]

Client
(PWA)

[Not supported by viewer]

Magento

[Not supported by viewer]
1
[Not supported by viewer]

Set the payment method to payflow_link.

[Not supported by viewer]
9
[Not supported by viewer]

Display a payment form in an iframe. Customer clicks the PayPal button.

[Not supported by viewer]

PayPal

[Not supported by viewer]
\ No newline at end of file diff --git a/guides/v2.3/graphql/payment-methods/payflow-link.md b/guides/v2.3/graphql/payment-methods/payflow-link.md index 6a3f9c0521c..2fe6cc38c6d 100644 --- a/guides/v2.3/graphql/payment-methods/payflow-link.md +++ b/guides/v2.3/graphql/payment-methods/payflow-link.md @@ -5,45 +5,21 @@ title: PayPal Payflow Link payment method PayPal [PayFlow Link](https://developer.paypal.com/docs/classic/payflow/integration-guide/) is available for merchants in the United States and Canada only. Customers are not required to have a personal PayPal account. Instead, customers enter their credit card information in a form that is hosted by PayPal. -The Payflow gateway uses a secure token to send non-credit card transaction data to the Payflow server for storage in a way that cannot be intercepted and manipulated maliciously. This token secures the data for a one-time transaction and is valid for 30 minutes. When the AWS client runs the `placeOrder` mutation, Magento requests a secure token. The Payflow server returns the token as a string of up to 32 alphanumeric characters. +The Payflow gateway uses a secure token to send non-credit card transaction data to the Payflow server for storage in a way that cannot be intercepted and manipulated maliciously. This token secures the data for a one-time transaction and is valid for 30 minutes. When the PWA client runs the `placeOrder` mutation, Magento requests a secure token. The Payflow server returns the token as a string of up to 32 alphanumeric characters. ## Payflow Link workflow The following diagram shows the workflow for placing an order when Payflow Link is the selected payment method. -![PayPal Payflow Link sequence diagram]({{page.baseurl}}/graphql/images/paypal-payflow-link.svg) +![PayPal Payflow Link sequence diagram]({{site.baseurl}}/common/images/graphql/paypal-payflow-link.svg) -1. The PWA client uses the [`setPaymentMethodOnCart`]({{page.baseurl}}/graphql/reference/quote-payment-method.html) mutation to set the payment method to `payflow_link`. - -2. The mutation returns a `Cart` object. - -3. The client runs the [`placeOrder`]({{page.baseurl}}/graphql/reference/quote-place-order.html) mutation, which creates an order in Magento and begins the authorization process. - -4. Magento requests a secure token from the Payflow Link gateway. - -5. The gateway response includes a secure token, a secure token ID, and the URL to use for requesting the Payflow form in step 9. - -6. The `placeOrder` mutation returns an order ID. Magento does not return secure token information. The order has the status `payment pending`. - -7. The client runs the [`getPayflowLinkToken`]({{page.baseurl}}/graphql/reference/paypal-get-payflow-link-token.html) mutation to retrieve the secure token information. - -8. Magento returns the token information. - -9. The client displays a payment form in an iframe rendered from the URL specified by the `paypal_url` from `getPayflowLinkToken` mutation response. When the customer completes the form, the client sends the payment information directly to the Payflow gateway, bypassing the Magento server. - -10. After PayPal processes the payment, the gateway runs a silent post request against the Magento server. As a result, Magento sets the order status to pending, and the order is ready to be invoiced. - -11. The Payflow gateway returns control of the customer's browser to the client. +{% include graphql/payment-methods/payflow-link-workflow.md %} ## Additional Payment information When you set the payment method to Payflow Link in the [`setPaymentMethodOnCart`]({{page.baseurl}}/graphql/reference/quote-payment-method.html) mutation, the `additional_data` object must contain a `payflow_link` object, which defines the following objects: -Attribute | Data Type | Description ---- | --- | --- -`cancel_url` | String! | The URL PayPal will redirect back to upon payment cancellation -`error_url` | String! | The URL PayPal will redirect back to upon payment error -`return_url` | String! | The URL PayPal will redirect back to upon payment success +{% include graphql/payment-methods/payflow-link-attributes.md %} ## Example setPaymentMethodOnCart mutation diff --git a/guides/v2.3/graphql/payment-methods/payments-advanced.md b/guides/v2.3/graphql/payment-methods/payments-advanced.md new file mode 100644 index 00000000000..1d9d25fe4f3 --- /dev/null +++ b/guides/v2.3/graphql/payment-methods/payments-advanced.md @@ -0,0 +1,70 @@ +--- +group: graphql +title: PayPal Payments Advanced payment method +--- + +The PayPal Payments Advanced payment solution allows merchants to enable their online stores to collect payments directly via credit card, PayPal Express Checkout, or PayPal's PayPal Credit service. From a GraphQL integration standpoint, PayPal Payments Advanced payment method is identical to the PayPal [Payflow Link]({{page.baseurl}}/graphql/payment-methods/payflow-link.html) payment method, with the exception of the payment method `code`. The PayPal [Payments Advanced documentation](https://developer.paypal.com/docs/classic/products/paypal-payments-advanced/) describes other ways in which the payment methods differ. + +PayPal Payments Advanced is available in the US and Canada only. + +## PayPal Payments Advanced workflow + +The following diagram shows the workflow for placing an order when Payments Advanced is the selected payment method. + +![PayPal Payments Advanced sequence diagram]({{site.baseurl}}/common/images/graphql/paypal-payflow-link.svg) + +{% include graphql/payment-methods/payflow-link-workflow.md %} + +## Additional Payment information + +When you set the payment method code to `payflow_advanced` in the [`setPaymentMethodOnCart`]({{page.baseurl}}/graphql/reference/quote-payment-method.html) mutation, the `additional_data` object must contain a `payflow_link` object, which defines the following attributes: + +{% include graphql/payment-methods/payflow-link-attributes.md %} + +## Example setPaymentMethodOnCart mutation + +The following example shows the `setPaymentMethodOnCart` mutation constructed for the Payments Advanced payment method. + +**Request** + +```text +mutation { + setPaymentMethodOnCart(input: { + payment_method: { + code: "payflow_advanced" + additional_data: { + payflow_link: { + return_url: "https://www.example.com/payflow/test/return" + error_url: "https://www.example.com/payflow/test/error" + cancel_url: "https://www.example.com/payflow/test/cancel" + } + } + } + cart_id: "IeTUiU0oCXjm0uRqGCOuhQ2AuQatogjG" + }) { + cart { + selected_payment_method { + code + title + } + } + } +} +``` + +**Response** + +```json +{ + "data": { + "setPaymentMethodOnCart": { + "cart": { + "selected_payment_method": { + "code": "payflow_advanced", + "title": "Credit Card" + } + } + } + } +} +```