Регистрация заказа и оплата через платежную систему
В этой оркестровке используются два веб-сервиса: веб-сервис интернет-магазина, чье описание можно найти в лабораторной работе №3, и веб-сервис платежной системы, который для простоты представлен всего одной операцией:
/// <summary>
/// Переводит деньги со счета на счет
/// </summary>
/// <param name="fromCard">
/// Карта с которой переводить.
/// Формат: 1234567812345678
/// </param>
/// <param name="toCard">
/// Карта куда переводить.
/// Формат: 1234567812345678
/// </param>
/// <param name="sum">
/// Сумма перевода в формате: 11.11 XXX,
/// где XXX - код валюты по ISO
/// </param>
/// <param name="password">
/// Пароль
/// </param>
/// <returns>
/// True в случае успешной транзакции,
/// False в любом другом случае
/// </returns>
[WebMethod(Description = "Переводит деньги со счета на счет")]
public bool TransferMoney(string fromCard, string toCard,
string sum, string password)
{
}
Оркестровка заказа в интернет-магазине также можно разбить на две логических части: регистрацию заказа (Рис. 8.5) и его оплату через платежную систему (Рис. 8.7), которая производится только в том случае, если регистрация прошла успешно.
В качестве входного параметра эта оркестровка получает заказ в формате ERP системы, который надо преобразовать в формат интернет магазина. Для этого в конструкторе сообщения «Construct Order» используется преобразование XML-сообщений при помощи Activity «Transform», которое исполняет карту преобразований BizTalk. Карты преобразований задаются отдельными файлами и позволяют настраивать преобразование XML-данных из формата одной схемы в другую, выполняя попутно множество необходимых функции, например, вычисление математических выражений, произведение операций над строками и другие.
На Рис. 8.6 представлена карта, преобразующая заказ в формат интернет-магазина. Как наглядно видно из рисунка, она копирует идентификатор заказа, для каждого товара копируются количество и его идентификатор в каталоге интернет-магазина. Для значения даты заказа используется функция, возвращающая текущую дату. Информация о доставке заказа также по большей части просто копируется в соответствующие элементы. Однако веб-сервис интернет-магазина принимает адрес одной строкой, в то время как в ERP системе он задается четырьмя элементами. Поэтому для его вычисления применяется функция конкатенации строк, суммирующая значения элементов через пробел.
Рис. 8.5. Регистрация заказа в интернет-магазине.
После создания сообщения содержащего готовый к отправке заказ в интернет-магазине можно наблюдать Activity «Debug Order», которое используется для вывода полученного сообщения в журнал событий системы с целью отладки системы. Для этого в оркестровки заведена переменная tempXmlDoc типа XmlDocument. В нее при помощи скрипта копируется сообщение с преобразованным заказом, а затем оно, преобразованное к строке, сохраняется в системном журнале:
tempXmlDoc = RegisterOrderReq.order;
System.Diagnostics.EventLog.WriteEntry("BizTalk Server 2006",
System.Convert.ToString(tempXmlDoc.InnerXml));
После регистрации заказа в интернет-магазине в ответе веб-сервиса возвращается сумма сделанного заказа и его статус в виде строки. Статус может принимать следующие значения:
public enum OrderStatus
{
Registered,
InWork,
Sended,
NotEnoughGoods,
WrongGoodId,
OrderNotFound
}
С точки зрения заданного бизнес-процесса интерес представляет только первое значение, которое должно возвращаться в случае успешной регистрации заказа. Во всех остальных случаях заказ считается неудачным.
Рис. 8.6. Преобразование заказа и одного формата в другой.
Рис. 8.7. Оплата заказа.
Поэтому после совершения заказа выполняется условный оператор с условием: «RegisterOrderRes.statusName == "Registered"». В случае если условие не выполняется, то переменной ordered присваивается значение False и процесс завершается. Если же заказ был успешно зарегистрирован, то выполняется запрос на получение номера счета магазина, куда следует переводить деньги. Затем переменной Sum присваивается значение RegisterOrderRes.RegisterOrderResult и значение переменной передается в оркестровку конвертации валюты.
Так как оркестровка конвертации валюты всегда переводит деньги из долларов в рубли, то значение суммы после ее вызова становится рублевым. Таким образом, код, создающий сообщение о переводе денег со счета на счет, выглядит следующим образом:
TransferMoneyReq.toCard = GetCardNumberRes.GetCardNumberResult;
TransferMoneyReq.fromCard =
System.Convert.ToString(PaymentInfo.GetPaymentInfoResult);
TransferMoneyReq.password = PaymentInfo.password;
TransferMoneyReq.sum = Sum.ToString() + " RUR";
По результатам проведения банковской транзакции возвращается сообщение, которое содержит код успешности операции, который затем присваивается переменной ordered, используемой для возврата результата проведения заказа в интернет-магазине. Полная структура данных оркестровки представлена на Рис. 8.8:
Рис. 8.8. Структура данных оркестровки заказа в интернет-магазине.
Дата добавления: 2015-02-28; просмотров: 800;