gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-merchant] 80/277: implement /refund handling


From: gnunet
Subject: [taler-merchant] 80/277: implement /refund handling
Date: Sun, 05 Jul 2020 20:49:53 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository merchant.

commit 3493795065b8fde49a5a4c06e5302b2afd03685a
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat May 2 19:25:05 2020 +0200

    implement /refund handling
---
 src/backend/taler-merchant-httpd.c                 |  27 ++++
 ...-merchant-httpd_private-post-orders-ID-refund.c |   6 +-
 ...-merchant-httpd_private-post-orders-ID-refund.h |   6 +-
 src/include/taler_merchant_service.h               |  98 +++++++-------
 src/lib/Makefile.am                                |   2 +-
 ...increase.c => merchant_api_post_order_refund.c} | 148 +++++++++++----------
 6 files changed, 164 insertions(+), 123 deletions(-)

diff --git a/src/backend/taler-merchant-httpd.c 
b/src/backend/taler-merchant-httpd.c
index 0149b8b..27541b5 100644
--- a/src/backend/taler-merchant-httpd.c
+++ b/src/backend/taler-merchant-httpd.c
@@ -42,7 +42,10 @@
 #include "taler-merchant-httpd_private-post-products.h"
 #include "taler-merchant-httpd_private-post-products-ID-lock.h"
 #include "taler-merchant-httpd_private-post-orders.h"
+#include "taler-merchant-httpd_private-post-orders-ID-refund.h"
+#include "taler-merchant-httpd_post-orders-ID-abort.h"
 #include "taler-merchant-httpd_post-orders-ID-claim.h"
+#include "taler-merchant-httpd_post-orders-ID-pay.h"
 
 
 /**
@@ -816,6 +819,14 @@ url_handler (void *cls,
       .method = MHD_HTTP_METHOD_POST,
       .handler = &TMH_private_post_orders
     },
+    /* POST /orders/$ID/refund: */
+    {
+      .url_prefix = "/orders/",
+      .url_suffix = "refund",
+      .method = MHD_HTTP_METHOD_POST,
+      .have_id_segment = true,
+      .handler = &TMH_private_post_orders_ID_refund
+    },
     {
       NULL
     }
@@ -844,6 +855,14 @@ url_handler (void *cls,
       .skip_instance = true,
       .handler = &MH_handler_config
     },
+    /* POST /orders/$ID/abort: */
+    {
+      .url_prefix = "/orders/",
+      .have_id_segment = true,
+      .url_suffix = "abort",
+      .method = MHD_HTTP_METHOD_POST,
+      .handler = &TMH_post_orders_ID_abort
+    },
     /* POST /orders/$ID/claim: */
     {
       .url_prefix = "/orders/",
@@ -852,6 +871,14 @@ url_handler (void *cls,
       .method = MHD_HTTP_METHOD_POST,
       .handler = &TMH_post_orders_ID_claim
     },
+    /* POST /orders/$ID/pay: */
+    {
+      .url_prefix = "/orders/",
+      .have_id_segment = true,
+      .url_suffix = "pay",
+      .method = MHD_HTTP_METHOD_POST,
+      .handler = &TMH_post_orders_ID_pay
+    },
     {
       NULL
     }
diff --git a/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.c 
b/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.c
index 44db612..70bce7f 100644
--- a/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.c
+++ b/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.c
@@ -103,9 +103,9 @@ make_taler_refund_uri (struct MHD_Connection *connection,
  * @return MHD result code
  */
 MHD_RESULT
-MH_handler_refund_increase (const struct TMH_RequestHandler *rh,
-                            struct MHD_Connection *connection,
-                            struct TMH_HandlerContext *hc)
+TMH_private_post_orders_ID_refund (const struct TMH_RequestHandler *rh,
+                                   struct MHD_Connection *connection,
+                                   struct TMH_HandlerContext *hc)
 {
   struct TALER_Amount refund;
   const char *reason;
diff --git a/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.h 
b/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.h
index 8912011..970fe4c 100644
--- a/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.h
+++ b/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.h
@@ -35,9 +35,9 @@
  * @return MHD result code
  */
 MHD_RESULT
-MH_handler_refund_increase (const struct TMH_RequestHandler *rh,
-                            struct MHD_Connection *connection,
-                            struct TMH_HandlerContext *hc);
+TMH_private_post_orders_ID_refund (const struct TMH_RequestHandler *rh,
+                                   struct MHD_Connection *connection,
+                                   struct TMH_HandlerContext *hc);
 
 
 #endif
diff --git a/src/include/taler_merchant_service.h 
b/src/include/taler_merchant_service.h
index 5aa5522..5037201 100644
--- a/src/include/taler_merchant_service.h
+++ b/src/include/taler_merchant_service.h
@@ -1735,6 +1735,55 @@ void
 TALER_MERCHANT_order_abort_cancel (struct TALER_MERCHANT_OrderAbortHandle 
*oah);
 
 
+/**
+ * Handle for a POST /orders/ID/refund operation.
+ */
+struct TALER_MERCHANT_OrderRefundHandle;
+
+
+/**
+ * Callback to process a POST /orders/ID/refund request
+ *
+ * @param cls closure
+ * @param http_status HTTP status code for this request
+ * @param ec taler-specific error code
+ */
+typedef void
+(*TALER_MERCHANT_RefundCallback) (
+  void *cls,
+  const struct TALER_MERCHANT_HttpResponse *hr);
+
+
+/**
+ * Increase the refund granted for an order
+ *
+ * @param ctx the CURL context used to connect to the backend
+ * @param backend_url backend's base URL, including final "/"
+ * @param order_id id of the order whose refund is to be increased
+ * @param refund amount to which increase the refund
+ * @param reason human-readable reason justifying the refund
+ * @param cb callback processing the response from /refund
+ * @param cb_cls closure for cb
+ */
+struct TALER_MERCHANT_OrderRefundHandle
+TALER_MERCHANT_post_order_refund (struct GNUNET_CURL_Context *ctx,
+                                  const char *backend_url,
+                                  const char *order_id,
+                                  const struct TALER_Amount *refund,
+                                  const char *reason,
+                                  TALER_MERCHANT_RefundCallback cb,
+                                  void *cb_cls);
+
+/**
+ * Cancel a POST /refund request.
+ *
+ * @param rio the refund increasing operation to cancel
+ */
+void
+TALER_MERCHANT_post_order_refund_cancel (
+  struct TALER_MERCHANT_OrderRefundHandle *orh);
+
+
 /* *********************   OLD ************************** */
 
 
@@ -1840,55 +1889,6 @@ TALER_MERCHANT_refund_lookup_cancel (
   struct TALER_MERCHANT_RefundLookupOperation *rlo);
 
 
-/**
- * Handle for a POST /refund operation.
- */
-struct TALER_MERCHANT_RefundIncreaseOperation;
-
-
-/**
- * Callback to process a POST /refund request
- *
- * @param cls closure
- * @param http_status HTTP status code for this request
- * @param ec taler-specific error code
- */
-typedef void
-(*TALER_MERCHANT_RefundIncreaseCallback) (
-  void *cls,
-  const struct TALER_MERCHANT_HttpResponse *hr);
-
-
-/**
- * Increase the refund associated to a order
- *
- * @param ctx the CURL context used to connect to the backend
- * @param backend_url backend's base URL, including final "/"
- * @param order_id id of the order whose refund is to be increased
- * @param refund amount to which increase the refund
- * @param reason human-readable reason justifying the refund
- * @param cb callback processing the response from /refund
- * @param cb_cls closure for cb
- */
-struct TALER_MERCHANT_RefundIncreaseOperation *
-TALER_MERCHANT_refund_increase (struct GNUNET_CURL_Context *ctx,
-                                const char *backend_url,
-                                const char *order_id,
-                                const struct TALER_Amount *refund,
-                                const char *reason,
-                                TALER_MERCHANT_RefundIncreaseCallback cb,
-                                void *cb_cls);
-
-/**
- * Cancel a POST /refund request.
- *
- * @param rio the refund increasing operation to cancel
- */
-void
-TALER_MERCHANT_refund_increase_cancel (
-  struct TALER_MERCHANT_RefundIncreaseOperation *rio);
-
-
 /* *********************  /proposal *********************** */
 
 
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 02e8b22..ddf42af 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -31,12 +31,12 @@ libtalermerchant_la_SOURCES = \
   merchant_api_post_orders.c \
   merchant_api_post_order_claim.c \
   merchant_api_post_order_pay.c \
+  merchant_api_post_order_refund.c \
  \
   merchant_api_check_payment.c \
   merchant_api_history.c \
   merchant_api_poll_payment.c \
   merchant_api_refund.c \
-  merchant_api_refund_increase.c \
   merchant_api_tip_authorize.c \
   merchant_api_tip_pickup.c \
   merchant_api_tip_pickup2.c \
diff --git a/src/lib/merchant_api_refund_increase.c 
b/src/lib/merchant_api_post_order_refund.c
similarity index 53%
rename from src/lib/merchant_api_refund_increase.c
rename to src/lib/merchant_api_post_order_refund.c
index 619d2b8..7143e5b 100644
--- a/src/lib/merchant_api_refund_increase.c
+++ b/src/lib/merchant_api_post_order_refund.c
@@ -15,8 +15,8 @@
   <http://www.gnu.org/licenses/>
 */
 /**
- * @file lib/merchant_api_refund_increase.c
- * @brief Implementation of the /refund POST and GET
+ * @file lib/merchant_api_post_order_refund.c
+ * @brief Implementation of the POST /orders/ID/refund request
  * @author Christian Grothoff
  * @author Marcello Stanisci
  */
@@ -32,7 +32,10 @@
 #include <taler/taler_curl_lib.h>
 
 
-struct TALER_MERCHANT_RefundIncreaseOperation
+/**
+ * Handle for a POST /orders/ID/refund operation.
+ */
+struct TALER_MERCHANT_OrderRefundHandle
 {
   /**
    * Complete URL where the backend offers /refund
@@ -52,7 +55,7 @@ struct TALER_MERCHANT_RefundIncreaseOperation
   /**
    * The callback to pass the backend response to
    */
-  TALER_MERCHANT_RefundIncreaseCallback cb;
+  TALER_MERCHANT_RefundCallback cb;
 
   /**
    * Clasure to pass to the callback
@@ -67,41 +70,41 @@ struct TALER_MERCHANT_RefundIncreaseOperation
 
 
 /**
- * Callback to process POST /refund response
+ * Callback to process POST /orders/ID/refund response
  *
- * @param cls the `struct TALER_MERCHANT_RefundIncreaseOperation`
+ * @param cls the `struct TALER_MERCHANT_OrderRefundHandle`
  * @param response_code HTTP response code, 0 on error
  * @param json response body, NULL if not JSON
  */
 static void
-handle_refund_increase_finished (void *cls,
-                                 long response_code,
-                                 const void *response)
+handle_refund_finished (void *cls,
+                        long response_code,
+                        const void *response)
 {
-  struct TALER_MERCHANT_RefundIncreaseOperation *rio = cls;
+  struct TALER_MERCHANT_OrderRefundHandle *orh = cls;
   const json_t *json = response;
   struct TALER_MERCHANT_HttpResponse hr = {
     .http_status = (unsigned int) response_code,
     .reply = json
   };
 
-  rio->job = NULL;
+  orh->job = NULL;
   switch (response_code)
   {
   case 0:
     hr.ec = TALER_EC_INVALID_RESPONSE;
-    rio->cb (rio->cb_cls,
+    orh->cb (orh->cb_cls,
              &hr);
     break;
   case MHD_HTTP_OK:
-    rio->cb (rio->cb_cls,
+    orh->cb (orh->cb_cls,
              &hr);
     break;
   case MHD_HTTP_CONFLICT:
   case MHD_HTTP_NOT_FOUND:
     hr.ec = TALER_JSON_get_error_code (json);
     hr.hint = TALER_JSON_get_error_hint (json);
-    rio->cb (rio->cb_cls,
+    orh->cb (orh->cb_cls,
              &hr);
     break;
   default:
@@ -109,36 +112,36 @@ handle_refund_increase_finished (void *cls,
     TALER_MERCHANT_parse_error_details_ (json,
                                          response_code,
                                          &hr);
-    rio->cb (rio->cb_cls,
+    orh->cb (orh->cb_cls,
              &hr);
     break;
   }
-  TALER_MERCHANT_refund_increase_cancel (rio);
+  TALER_MERCHANT_post_order_refund_cancel (orh);
 }
 
 
 /**
- * Cancel a POST /refund request.
+ * Cancel a POST /orders/ID/refund request.
  *
- * @param rio the refund increasing operation to cancel
+ * @param orh the refund increasing operation to cancel
  */
 void
-TALER_MERCHANT_refund_increase_cancel (
-  struct TALER_MERCHANT_RefundIncreaseOperation *rio)
+TALER_MERCHANT_post_order_refund_cancel (
+  struct TALER_MERCHANT_OrderRefundHandle *orh)
 {
-  if (NULL != rio->job)
+  if (NULL != orh->job)
   {
-    GNUNET_CURL_job_cancel (rio->job);
-    rio->job = NULL;
+    GNUNET_CURL_job_cancel (orh->job);
+    orh->job = NULL;
   }
-  TALER_curl_easy_post_finished (&rio->post_ctx);
-  GNUNET_free (rio->url);
-  GNUNET_free (rio);
+  TALER_curl_easy_post_finished (&orh->post_ctx);
+  GNUNET_free (orh->url);
+  GNUNET_free (orh);
 }
 
 
 /**
- * Increase the refund associated to a order
+ * Increase the refund granted for an order
  *
  * @param ctx the CURL context used to connect to the backend
  * @param backend_url backend's base URL, including final "/"
@@ -148,65 +151,76 @@ TALER_MERCHANT_refund_increase_cancel (
  * @param cb callback processing the response from /refund
  * @param cb_cls closure for cb
  */
-struct TALER_MERCHANT_RefundIncreaseOperation *
-TALER_MERCHANT_refund_increase (struct GNUNET_CURL_Context *ctx,
-                                const char *backend_url,
-                                const char *order_id,
-                                const struct TALER_Amount *refund,
-                                const char *reason,
-                                TALER_MERCHANT_RefundIncreaseCallback cb,
-                                void *cb_cls)
+struct TALER_MERCHANT_OrderRefundHandle *
+TALER_MERCHANT_order_refund (struct GNUNET_CURL_Context *ctx,
+                             const char *backend_url,
+                             const char *order_id,
+                             const struct TALER_Amount *refund,
+                             const char *reason,
+                             TALER_MERCHANT_RefundCallback cb,
+                             void *cb_cls)
 {
-  struct TALER_MERCHANT_RefundIncreaseOperation *rio;
+  struct TALER_MERCHANT_OrderRefundHandle *orh;
   json_t *req;
   CURL *eh;
 
-  rio = GNUNET_new (struct TALER_MERCHANT_RefundIncreaseOperation);
-  rio->ctx = ctx;
-  rio->cb = cb;
-  rio->cb_cls = cb_cls;
-  rio->url = TALER_url_join (backend_url,
-                             "refund",
-                             NULL);
-  if (NULL == rio->url)
+  orh = GNUNET_new (struct TALER_MERCHANT_OrderRefundHandle);
+  orh->ctx = ctx;
+  orh->cb = cb;
+  orh->cb_cls = cb_cls;
+  {
+    char *path;
+
+    GNUNET_asprintf (&path,
+                     "private/orders/%s/refund",
+                     order_id);
+    orh->url = TALER_url_join (backend_url,
+                               path,
+                               NULL);
+    GNUNET_free (path);
+  }
+  if (NULL == orh->url)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "Could not construct request URL.\n");
-    GNUNET_free (rio);
+    GNUNET_free (orh);
     return NULL;
   }
-
-  req = json_pack ("{s:o, s:s, s:s}",
+  req = json_pack ("{s:o, s:s}",
                    "refund", TALER_JSON_from_amount (refund),
-                   "order_id", order_id,
                    "reason", reason);
+  GNUNET_assert (NULL != req);
   eh = curl_easy_init ();
-
-  if (GNUNET_OK != TALER_curl_easy_post (&rio->post_ctx,
-                                         eh,
-                                         req))
+  GNUNET_assert (NULL != eh);
+  if (GNUNET_OK !=
+      TALER_curl_easy_post (&orh->post_ctx,
+                            eh,
+                            req))
   {
     GNUNET_break (0);
     json_decref (req);
-    GNUNET_free (rio->url);
-    GNUNET_free (rio);
+    GNUNET_free (orh->url);
+    GNUNET_free (orh);
     return NULL;
   }
   json_decref (req);
-  GNUNET_assert (CURLE_OK == curl_easy_setopt (eh,
-                                               CURLOPT_URL,
-                                               rio->url));
-  rio->job = GNUNET_CURL_job_add2
-               (ctx,
-               eh,
-               rio->post_ctx.headers,
-               &handle_refund_increase_finished,
-               rio);
-  if (NULL == rio->job)
+  GNUNET_assert (CURLE_OK ==
+                 curl_easy_setopt (eh,
+                                   CURLOPT_URL,
+                                   orh->url));
+  orh->job = GNUNET_CURL_job_add2 (ctx,
+                                   eh,
+                                   orh->post_ctx.headers,
+                                   &handle_refund_finished,
+                                   orh);
+  if (NULL == orh->job)
   {
-    GNUNET_free (rio->url);
-    GNUNET_free (rio);
+    GNUNET_free (orh->url);
+    GNUNET_free (orh);
     return NULL;
   }
-  return rio;
+  return orh;
 }
+
+
+/* end of merchant_api_post_order_refund.c */

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]