diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 5ff0062df..6a7a5c661 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -1349,6 +1349,11 @@ inputCredentialsGooglePay data:string = InputCredentials; //@description Stripe payment provider @publishable_key Stripe API publishable key @need_country True, if the user country must be provided @need_postal_code True, if the user ZIP/postal code must be provided @need_cardholder_name True, if the cardholder name must be provided paymentsProviderStripe publishable_key:string need_country:Bool need_postal_code:Bool need_cardholder_name:Bool = PaymentsProviderStripe; +//@description Theme colors for a payment form @background_color A color of the payment form background in the RGB24 format @text_color A color of text in the RGB24 format +//@hint_color A color of hints in the RGB24 format @link_color A color of links in the RGB24 format @button_color A color of thebuttons in the RGB24 format +//@button_text_color A color of text on the buttons in the RGB24 format +paymentFormTheme background_color:int32 text_color:int32 hint_color:int32 link_color:int32 button_color:int32 button_text_color:int32 = PaymentFormTheme; + //@description Contains information about an invoice payment form //@id The payment form identifier //@invoice Full information of the invoice @@ -4929,8 +4934,8 @@ closeSecretChat secret_chat_id:int32 = Ok; getChatEventLog chat_id:int53 query:string from_event_id:int64 limit:int32 filters:chatEventLogFilters user_ids:vector = ChatEvents; -//@description Returns an invoice payment form. This method should be called when the user presses inlineKeyboardButtonBuy @chat_id Chat identifier of the Invoice message @message_id Message identifier -getPaymentForm chat_id:int53 message_id:int53 = PaymentForm; +//@description Returns an invoice payment form. This method should be called when the user presses inlineKeyboardButtonBuy @chat_id Chat identifier of the Invoice message @message_id Message identifier @theme Preferred payment form theme +getPaymentForm chat_id:int53 message_id:int53 theme:paymentFormTheme = PaymentForm; //@description Validates the order information provided by a user and returns the available shipping options for a flexible invoice @chat_id Chat identifier of the Invoice message @message_id Message identifier @order_info The order information, provided by the user @allow_save True, if the order information can be saved validateOrderInfo chat_id:int53 message_id:int53 order_info:orderInfo allow_save:Bool = ValidatedOrderInfo; diff --git a/td/telegram/Payments.cpp b/td/telegram/Payments.cpp index f8382807b..10eedd2d2 100644 --- a/td/telegram/Payments.cpp +++ b/td/telegram/Payments.cpp @@ -266,7 +266,8 @@ class GetPaymentFormQuery : public Td::ResultHandler { explicit GetPaymentFormQuery(Promise> &&promise) : promise_(std::move(promise)) { } - void send(DialogId dialog_id, ServerMessageId server_message_id) { + void send(DialogId dialog_id, ServerMessageId server_message_id, + tl_object_ptr &&theme_parameters) { dialog_id_ = dialog_id; auto input_peer = td->messages_manager_->get_input_peer(dialog_id, AccessRights::Read); if (input_peer == nullptr) { @@ -274,8 +275,11 @@ class GetPaymentFormQuery : public Td::ResultHandler { } int32 flags = 0; - send_query(G()->net_query_creator().create( - telegram_api::payments_getPaymentForm(flags, std::move(input_peer), server_message_id.get(), nullptr))); + if (theme_parameters != nullptr) { + flags |= telegram_api::payments_getPaymentForm::THEME_PARAMS_MASK; + } + send_query(G()->net_query_creator().create(telegram_api::payments_getPaymentForm( + flags, std::move(input_peer), server_message_id.get(), std::move(theme_parameters)))); } void on_result(uint64 id, BufferSlice packet) override { @@ -1134,9 +1138,24 @@ void answer_pre_checkout_query(Td *td, int64 pre_checkout_query_id, const string td->create_handler(std::move(promise))->send(pre_checkout_query_id, error_message); } -void get_payment_form(Td *td, FullMessageId full_message_id, Promise> &&promise) { +void get_payment_form(Td *td, FullMessageId full_message_id, const td_api::object_ptr &theme, + Promise> &&promise) { TRY_RESULT_PROMISE(promise, server_message_id, td->messages_manager_->get_invoice_message_id(full_message_id)); - td->create_handler(std::move(promise))->send(full_message_id.get_dialog_id(), server_message_id); + + tl_object_ptr theme_parameters; + if (theme != nullptr) { + theme_parameters = make_tl_object(string()); + theme_parameters->data_ = json_encode(json_object([&theme](auto &o) { + o("bg_color", theme->background_color_); + o("text_color", theme->text_color_); + o("hint_color", theme->hint_color_); + o("link_color", theme->link_color_); + o("button_color", theme->button_color_); + o("button_text_color", theme->button_text_color_); + })); + } + td->create_handler(std::move(promise)) + ->send(full_message_id.get_dialog_id(), server_message_id, std::move(theme_parameters)); } void validate_order_info(Td *td, FullMessageId full_message_id, tl_object_ptr order_info, diff --git a/td/telegram/Payments.h b/td/telegram/Payments.h index 1947c0fc3..ecfdce141 100644 --- a/td/telegram/Payments.h +++ b/td/telegram/Payments.h @@ -179,7 +179,8 @@ void answer_shipping_query(Td *td, int64 shipping_query_id, void answer_pre_checkout_query(Td *td, int64 pre_checkout_query_id, const string &error_message, Promise &&promise); -void get_payment_form(Td *td, FullMessageId full_message_id, Promise> &&promise); +void get_payment_form(Td *td, FullMessageId full_message_id, const td_api::object_ptr &theme, + Promise> &&promise); void validate_order_info(Td *td, FullMessageId full_message_id, tl_object_ptr order_info, bool allow_save, Promise> &&promise); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 5161a918a..52de29fa7 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -7736,7 +7736,8 @@ void Td::on_request(uint64 id, td_api::getBankCardInfo &request) { void Td::on_request(uint64 id, const td_api::getPaymentForm &request) { CHECK_IS_USER(); CREATE_REQUEST_PROMISE(); - get_payment_form(this, {DialogId(request.chat_id_), MessageId(request.message_id_)}, std::move(promise)); + get_payment_form(this, {DialogId(request.chat_id_), MessageId(request.message_id_)}, request.theme_, + std::move(promise)); } void Td::on_request(uint64 id, td_api::validateOrderInfo &request) { diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index 1cd1c7221..91996b455 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -1828,7 +1828,9 @@ class CliClient final : public Actor { string chat_id; string message_id; get_args(args, chat_id, message_id); - send_request(td_api::make_object(as_chat_id(chat_id), as_message_id(message_id))); + send_request(td_api::make_object( + as_chat_id(chat_id), as_message_id(message_id), + td_api::make_object(0, -1, 256, 65536, 123456789, 65535))); } else if (op == "voi") { string chat_id; string message_id;