Как добавить статус платежной транзакции в заказ, размещенный с помощью Demandware OCAPI? - PullRequest
0 голосов
/ 20 ноября 2018

Я разрабатываю API для мобильного приложения на сайте электронной коммерции, которое находится на Demandware.Я использую OCAPI 18.8 для размещения заказа и отправки платежных реквизитов стороннему платежному процессору, который является Vantiv.Я получаю идентификатор транзакции и код ответа от Vantiv и хочу обновить свой заказ, чтобы сохранить эти детали платежной транзакции в моем заказе.Но я не смог найти ни одного ресурса в OCAPI, который позволил бы мне добавить идентификатор транзакции и код ответа, полученный от Vantiv.Ниже приведен порядок, который я разместил через OCAPI:

{
"_v": "18.8",
"_type": "order",
"_resource_state": "xyz",
"adjusted_merchandize_total_tax": 0,
"adjusted_shipping_total_tax": 0,
"billing_address": {
    "_type": "order_address",
    "city": "Boston",
    "country_code": "US",
    "first_name": "John",
    "full_name": "John Martin",
    "id": "xyz",
    "last_name": "Martin"
},
"channel_type": "storefront",
"confirmation_status": "not_confirmed",
"created_by": "Customer",
"creation_date": "2018-11-20T10:37:58.055Z",
"currency": "USD",
"customer_info": {
    "_type": "customer_info",
    "customer_id": "xyz",
    "customer_name": "Ammar Shahbaz",
    "customer_no": "xyz"
},
"customer_name": "Ammar Shahbaz",
"export_status": "not_exported",
"last_modified": "2018-11-20T10:37:58.376Z",
"merchandize_total_tax": 0,
"notes": {
    "_type": "simple_link",
    "link": "link"
},
"order_no": "123",
"order_token": "xyz",
"order_total": 299.8,
"payment_instruments": [
    {
        "_type": "order_payment_instrument",
        "amount": 299.8,
        "payment_card": {
            "_type": "payment_card",
            "card_type": "Visa",
            "credit_card_expired": false,
            "expiration_month": 1,
            "expiration_year": 2021,
            "holder": "John Doe",
            "masked_number": "************4240",
            "number_last_digits": "4240"
        },
        "payment_instrument_id": "xyz",
        "payment_method_id": "CREDIT_CARD"
    }
],
"payment_status": "not_paid",
"product_items": [
    {
        "_type": "product_item",
        "adjusted_tax": 0,
        "base_price": 149.9,
        "bonus_product_line_item": false,
        "gift": false,
        "item_id": "xyz",
        "item_text": "Long Sleeve Sequin Shift Dress",
        "price": 299.8,
        "price_after_item_discount": 299.8,
        "price_after_order_discount": 299.8,
        "product_id": "xyz",
        "product_name": "Dress",
        "quantity": 2,
        "shipment_id": "xyz",
        "tax": 0,
        "tax_basis": 299.8,
        "tax_class_id": "xyz",
        "tax_rate": 0,
        "c_cost": 25.17,
        "c_finalSale": false,
        "c_outlet": false,
        "c_taxClassID": "xyz"
    }
],
"product_sub_total": 299.8,
"product_total": 299.8,
"shipments": [
    {
        "_type": "shipment",
        "adjusted_merchandize_total_tax": 0,
        "adjusted_shipping_total_tax": 0,
        "gift": false,
        "merchandize_total_tax": 0,
        "product_sub_total": 299.8,
        "product_total": 299.8,
        "shipment_id": "xyz",
        "shipment_total": 299.8,
        "shipping_address": {
            "_type": "order_address",
            "city": "Boston",
            "country_code": "US",
            "first_name": "John",
            "full_name": "John Martin",
            "id": "xyz",
            "last_name": "Martin"
        },
        "shipping_method": {
            "_type": "shipping_method",
            "description": "Order received within 5-8 business days",
            "id": "xyz",
            "name": "Standard",
            "price": 0,
            "shipping_promotions": [
                {
                    "_type": "shipping_promotion",
                    "callout_msg": "Free shipping on U.S. orders of $125+",
                    "link": "link",
                    "promotion_id": "xyz",
                    "promotion_name": "Free Shipping With $125 Purchase"
                }
            ],
            "c_BxFlatrateFlag": false,
            "c_IsBorderlinxMethod": false
        },
        "shipping_status": "not_shipped",
        "shipping_total": 0,
        "shipping_total_tax": 0,
        "tax_total": 0
    }
],
"shipping_items": [
    {
        "_type": "shipping_item",
        "adjusted_tax": 0,
        "base_price": 0,
        "item_id": "xyz",
        "item_text": "Shipping",
        "price": 0,
        "price_after_item_discount": 0,
        "shipment_id": "xyz",
        "tax": 0,
        "tax_basis": 0,
        "tax_class_id": "xyz",
        "tax_rate": 0
    }
],
"shipping_status": "not_shipped",
"shipping_total": 0,
"shipping_total_tax": 0,
"site_id": "site name",
"status": "created",
"taxation": "net",
"tax_total": 0

}

Я пробовал этот ресурс

Patch /orders/{order_no}/payment_instruments/{payment_instrument_id} 
{
 "amount" : 299.8,
 "payment_card" : {
                 "number":"424459xxxxxx4240",
                 "security_code":"121",
                 "holder":"John Martin",
                 "card_type":"Visa",
                 "expiration_month":1,
                 "expiration_year":2021
                },
"payment_method_id" : "CREDIT_CARD",
"c_PaymentProcessor": "VANTIV_CREDIT",
"c_paymentTransaction": {
  "custom": { 
    "litleAFTresponse": "Approved",
    "litleAFTTxnId": "8283868xxx8288282"
  }
}

}

для обновлениямой заказ, но безуспешноПожалуйста, дайте мне знать, если у вас есть какие-либо предложения.Спасибо.

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

В самой платформе есть несколько внутренних рабочих процессов, которым вы должны следовать шаг за шагом, чтобы выполнить заказ через OCAPI Rest Api.Вы должны следовать пошаговому рабочему процессу или, если вы его не нашли, попросить вашего архитектора DW направить вас.

0 голосов
/ 11 апреля 2019

Если у вас по какой-либо причине есть авторизация платежа за пределами коммерческого облака, вы можете обрабатывать вещи в атрибутах документа пользовательского запроса.Обратите внимание, что в CC есть возможность пропустить «авторизацию» с помощью параметра skip_authorization.Например:

POST /shop/v19_3/orders/00000027/payment_instruments?skip_authorization=true HTTP/1.1
Host: example.com
Authorization:Bearer eyJfdiI6IjXXXXXX.eyJfdiI6IjEiLCJleHAXXXXXXX.-d5wQW4c4O4wt-Zkl7_fiEiALW1XXXX 
Content-Type: application/json
{
  "amount": 49.99,
  "payment_method_id": "MY_PAYMENT_METHOD",
  "c_payment_token": "tokenvaluehere==",
  "c_payment_status": "payment_status"
}

Затем в вашем dw.ocapi.shop.order.payment_instrument.afterPOST вы можете добавить атрибуты к заказу PaymentInstrument с помощью методов API B2C, которые доступны через параметр order обратного вызова.

ВыВы захотите включить хук beforePOST, чтобы убедиться, что параметр c_payment_status является приемлемым значением, а если нет, вернуть объект статуса типа Status.ERROR.Затем вы можете фактически сохранить свойства в хуке afterPOST, где необходимые объекты уже созданы.

Например:

exports.paymentInstrumentAfterPOST = function(order, paymentInstrumentRequest) {
  const PaymentTransaction = require('dw/order/PaymentTransaction');
  const Status = require('dw/system/Status');
  const Transaction = require('dw/system/Transaction');
  let methodId = paymentInstrumentRequest.payment_method_id;
  let instruments = order.getPaymentInstruments(methodId);
  let instrument = instruments[0]; // FIXME you should actually iterate over this instead; just for demo
  let paymentTransaction =  instrument.getPaymentTransaction();

  Transaction.begin();
  paymentTransaction.setTransactionID(paymentInstrumentRequest.c_payment_token);
  paymentTransaction.setType(PaymentTransaction.TYPE_AUTH);

  Transaction.commit();

  return new Status(Status.OK);
}

Для получения дополнительной информации о настройке потока платежейсм. Документация по ресурсам заказов

Отказ от ответственности Это весь код, написанный от руки в форме ответа StackOverflow.Я не утверждал, что это действительно будет работать, но я надеюсь, что это дает направление.

0 голосов
/ 28 февраля 2019

Внутренне в коммерческом облаке вызов метода ниже устанавливает идентификатор транзакции: paymentInstrument.paymentTransaction.setTransactionID (anTransactionId), поэтому ваше предположение верно.Однако это поле не отображается в API магазина.Из документации ясно, что авторизация платежа должна инициироваться коммерческим облаком.это ограничение безопасности.Можно настроить API, чтобы обойти это ограничение.

...