From 7891e62bf98bd884c8c993ae698f9a985dbacfbd Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 16 Dec 2023 17:54:16 +0800 Subject: partial implementation of protocol v6: GET with additional filters, POST not done --- src/lib/merchant_api_get_config.c | 6 ++--- src/lib/merchant_api_get_orders.c | 49 ++++++++++++++++++++++++++++++++++++++ src/lib/merchant_api_post_orders.c | 36 ++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 3 deletions(-) (limited to 'src/lib') diff --git a/src/lib/merchant_api_get_config.c b/src/lib/merchant_api_get_config.c index 93b7c863..1b289a9a 100644 --- a/src/lib/merchant_api_get_config.c +++ b/src/lib/merchant_api_get_config.c @@ -34,12 +34,12 @@ * Which version of the Taler protocol is implemented * by this library? Used to determine compatibility. */ -#define MERCHANT_PROTOCOL_CURRENT 5 +#define MERCHANT_PROTOCOL_CURRENT 6 /** - * How many configs are we backwards compatible with? + * How many configs are we backwards-compatible with? */ -#define MERCHANT_PROTOCOL_AGE 0 +#define MERCHANT_PROTOCOL_AGE 1 /** diff --git a/src/lib/merchant_api_get_orders.c b/src/lib/merchant_api_get_orders.c index 966ecb15..f79821db 100644 --- a/src/lib/merchant_api_get_orders.c +++ b/src/lib/merchant_api_get_orders.c @@ -235,6 +235,39 @@ TALER_MERCHANT_orders_get2 ( struct GNUNET_TIME_Relative timeout, TALER_MERCHANT_OrdersGetCallback cb, void *cb_cls) +{ + return TALER_MERCHANT_orders_get3 ( + ctx, + backend_url, + paid, + refunded, + wired, + NULL, + NULL, + date, + start_row, + delta, + timeout, + cb, + cb_cls); +} + + +struct TALER_MERCHANT_OrdersGetHandle * +TALER_MERCHANT_orders_get3 ( + struct GNUNET_CURL_Context *ctx, + const char *backend_url, + enum TALER_EXCHANGE_YesNoAll paid, + enum TALER_EXCHANGE_YesNoAll refunded, + enum TALER_EXCHANGE_YesNoAll wired, + const char *session_id, + const char *fulfillment_url, + struct GNUNET_TIME_Timestamp date, + uint64_t start_row, + int64_t delta, + struct GNUNET_TIME_Relative timeout, + TALER_MERCHANT_OrdersGetCallback cb, + void *cb_cls) { struct TALER_MERCHANT_OrdersGetHandle *ogh; CURL *eh; @@ -255,6 +288,8 @@ TALER_MERCHANT_orders_get2 ( /* build ogh->url with the various optional arguments */ { char *dstr; + char *fec = NULL; + char *sid = NULL; bool have_date; bool have_srow; char cbuf[30]; @@ -273,6 +308,14 @@ TALER_MERCHANT_orders_get2 ( sizeof (cbuf), "%llu", (unsigned long long) start_row); + if (NULL != session_id) + (void) GNUNET_STRINGS_urlencode (session_id, + strlen (session_id), + &sid); + if (NULL != fulfillment_url) + (void) GNUNET_STRINGS_urlencode (fulfillment_url, + strlen (fulfillment_url), + &fec); dstr = GNUNET_strdup (GNUNET_TIME_timestamp2s (date)); if (delta > 0) { @@ -314,8 +357,14 @@ TALER_MERCHANT_orders_get2 ( (0 != timeout_ms) ? tbuf : NULL, + "session_id", + sid, + "fulfillment_url", + fec, NULL); GNUNET_free (dstr); + GNUNET_free (sid); + GNUNET_free (fec); } if (NULL == ogh->url) { diff --git a/src/lib/merchant_api_post_orders.c b/src/lib/merchant_api_post_orders.c index fc37a439..56881133 100644 --- a/src/lib/merchant_api_post_orders.c +++ b/src/lib/merchant_api_post_orders.c @@ -138,6 +138,39 @@ TALER_MERCHANT_orders_post2 ( bool create_token, TALER_MERCHANT_PostOrdersCallback cb, void *cb_cls) +{ + return TALER_MERCHANT_orders_post3 ( + ctx, + backend_url, + order, + NULL, /* session ID */ + refund_delay, + payment_target, + inventory_products_length, + inventory_products, + uuids_length, + uuids, + create_token, + cb, + cb_cls); +} + + +struct TALER_MERCHANT_PostOrdersHandle * +TALER_MERCHANT_orders_post3 ( + struct GNUNET_CURL_Context *ctx, + const char *backend_url, + const json_t *order, + const char *session_id, + struct GNUNET_TIME_Relative refund_delay, + const char *payment_target, + unsigned int inventory_products_length, + const struct TALER_MERCHANT_InventoryProduct inventory_products[], + unsigned int uuids_length, + const char *uuids[static uuids_length], + bool create_token, + TALER_MERCHANT_PostOrdersCallback cb, + void *cb_cls) { struct TALER_MERCHANT_PostOrdersHandle *po; json_t *req; @@ -153,6 +186,9 @@ TALER_MERCHANT_orders_post2 ( req = GNUNET_JSON_PACK ( GNUNET_JSON_pack_object_incref ("order", (json_t *) order), + GNUNET_JSON_pack_allow_null ( + GNUNET_JSON_pack_string ("session_id", + session_id)), GNUNET_JSON_pack_allow_null ( GNUNET_JSON_pack_string ("payment_target", payment_target))); -- cgit v1.2.3