merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit 8029214856fb5619802e0128c06257dc1dd2113a
parent 974b2b2c3077c929850c1598af1e1e124f530a7f
Author: Florian Dold <florian.dold@gmail.com>
Date:   Fri, 24 Jul 2020 14:17:47 +0530

use order_status string tag

Diffstat:
Msrc/backend/taler-merchant-httpd_get-orders-ID.c | 8++++----
Msrc/backend/taler-merchant-httpd_private-get-orders-ID.c | 16++++++++--------
Msrc/lib/merchant_api_merchant_get_order.c | 36++++++++++++++++++++++++++++++++----
Msrc/lib/merchant_api_wallet_get_order.c | 49++++++++++++++++++++++++++++++++++++++++++++++++-
4 files changed, 92 insertions(+), 17 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_get-orders-ID.c b/src/backend/taler-merchant-httpd_get-orders-ID.c @@ -377,9 +377,9 @@ send_pay_request (struct GetOrderData *god, god->hc->instance->settings.id); ret = TALER_MHD_reply_json_pack (god->sc.con, MHD_HTTP_OK, - "{s:s, s:b, s:s?}", + "{s:s, s:s, s:s?}", "taler_pay_uri", taler_pay_uri, - "paid", false, + "order_status", "unpaid", "already_paid_order_id", already_paid_order_id); GNUNET_free (taler_pay_uri); @@ -1061,8 +1061,8 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh, return TALER_MHD_reply_json_pack ( connection, MHD_HTTP_OK, - "{s:b, s:b, s:o, s:o, s:o}", - "paid", true, + "{s:s, s:b, s:o, s:o, s:o}", + "order_status", "paid", "refunded", god->refunded, "refund_amount", TALER_JSON_from_amount (&god->refund_amount), diff --git a/src/backend/taler-merchant-httpd_private-get-orders-ID.c b/src/backend/taler-merchant-httpd_private-get-orders-ID.c @@ -970,11 +970,11 @@ TMH_private_get_orders_ID (const struct TMH_RequestHandler *rh, hc->instance->settings.id); ret = TALER_MHD_reply_json_pack (connection, MHD_HTTP_OK, - "{s:s, s:b, s:s}", + "{s:s, s:s, s:s}", "taler_pay_uri", taler_pay_uri, - "paid", - false, + "order_status", + "unpaid", "already_paid_order_id", already_paid_order_id); GNUNET_free (taler_pay_uri); @@ -1037,13 +1037,13 @@ TMH_private_get_orders_ID (const struct TMH_RequestHandler *rh, hc->instance->settings.id); ret = TALER_MHD_reply_json_pack (connection, MHD_HTTP_OK, - "{s:s, s:O, s:b}", + "{s:s, s:O, s:s}", "taler_pay_uri", taler_pay_uri, "contract_terms", gorc->contract_terms, - "paid", - false); + "order_status", + "unpaid"); GNUNET_free (taler_pay_uri); return ret; } @@ -1163,7 +1163,7 @@ TMH_private_get_orders_ID (const struct TMH_RequestHandler *rh, ret = TALER_MHD_reply_json_pack (connection, MHD_HTTP_OK, "{s:o, s:I, s:I, s:o, s:O," - " s:b, s:b, s:b, s:o, s:o, s:o}", + " s:s, s:b, s:b, s:o, s:o, s:o}", "wire_reports", gorc->wire_reports, "exchange_ec", @@ -1175,8 +1175,8 @@ TMH_private_get_orders_ID (const struct TMH_RequestHandler *rh, &gorc->deposits_total), "contract_terms", gorc->contract_terms, + "order_status", "paid", - true, "refunded", gorc->refunded, "wired", diff --git a/src/lib/merchant_api_merchant_get_order.c b/src/lib/merchant_api_merchant_get_order.c @@ -323,6 +323,7 @@ handle_merchant_order_get_finished (void *cls, { struct TALER_MERCHANT_OrderMerchantGetHandle *omgh = cls; const json_t *json = response; + const char *order_status; struct TALER_MERCHANT_HttpResponse hr = { .http_status = (unsigned int) response_code, .reply = json @@ -357,13 +358,40 @@ handle_merchant_order_get_finished (void *cls, return; } - /* HTTP OK */ - if (! json_boolean_value (json_object_get (json, "paid"))) + order_status = json_string_value (json_object_get (json, "order_status")); + + if (NULL == order_status) + { + GNUNET_break_op (0); + hr.http_status = 0; + hr.ec = TALER_EC_MERCHANT_ORDER_GET_REPLY_MALFORMED; + omgh->cb (omgh->cb_cls, + &hr, + NULL); + TALER_MERCHANT_merchant_order_get_cancel (omgh); + return; + } + + if (0 == strcmp ("paid", order_status)) + { + handle_paid (omgh, + &hr); + } + else if (0 == strcmp ("unpaid", order_status)) + { handle_unpaid (omgh, &hr); + } else - handle_paid (omgh, - &hr); + { + GNUNET_break_op (0); + hr.http_status = 0; + hr.ec = TALER_EC_MERCHANT_ORDER_GET_REPLY_MALFORMED; + omgh->cb (omgh->cb_cls, + &hr, + NULL); + TALER_MERCHANT_merchant_order_get_cancel (omgh); + } } diff --git a/src/lib/merchant_api_wallet_get_order.c b/src/lib/merchant_api_wallet_get_order.c @@ -110,6 +110,7 @@ handle_wallet_get_order_finished (void *cls, { struct TALER_MERCHANT_OrderWalletGetHandle *owgh = cls; const json_t *json = response; + const char *order_status; owgh->job = NULL; if (MHD_HTTP_OK != response_code) @@ -138,7 +139,31 @@ handle_wallet_get_order_finished (void *cls, return; } - if (! json_boolean_value (json_object_get (json, "paid"))) + order_status = json_string_value (json_object_get (json, "order_status")); + + if (NULL == order_status) + { + struct TALER_MERCHANT_HttpResponse hr = { + .reply = json, + .http_status = 0, + .ec = TALER_EC_MERCHANT_ORDER_GET_REPLY_MALFORMED, + }; + GNUNET_break_op (0); + owgh->cb (owgh->cb_cls, + &hr, + GNUNET_SYSERR, + GNUNET_SYSERR, + NULL, + NULL, + NULL, + NULL, + 0, + NULL); + TALER_MERCHANT_wallet_order_get_cancel (owgh); + return; + } + + if (0 == strcmp (order_status, "unpaid")) { /* Status is: unpaid */ const char *taler_pay_uri = json_string_value (json_object_get (json, @@ -174,6 +199,28 @@ handle_wallet_get_order_finished (void *cls, return; } + if (0 != strcmp (order_status, "paid")) + { + struct TALER_MERCHANT_HttpResponse hr = { + .reply = json, + .http_status = 0, + .ec = TALER_EC_MERCHANT_ORDER_GET_REPLY_MALFORMED, + }; + GNUNET_break_op (0); + owgh->cb (owgh->cb_cls, + &hr, + GNUNET_SYSERR, + GNUNET_SYSERR, + NULL, + NULL, + NULL, + NULL, + 0, + NULL); + TALER_MERCHANT_wallet_order_get_cancel (owgh); + return; + } + { struct TALER_Amount refund_amount; json_t *refunds;