summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/taler-merchant-httpd_refund.c2
-rw-r--r--src/include/taler_merchant_service.h24
-rw-r--r--src/lib/merchant_api_proposal.c5
-rw-r--r--src/lib/merchant_api_refund.c71
4 files changed, 97 insertions, 5 deletions
diff --git a/src/backend/taler-merchant-httpd_refund.c b/src/backend/taler-merchant-httpd_refund.c
index cbbf328c..f690c5e4 100644
--- a/src/backend/taler-merchant-httpd_refund.c
+++ b/src/backend/taler-merchant-httpd_refund.c
@@ -121,7 +121,7 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh,
TALER_JSON_spec_amount ("refund", &refund),
GNUNET_JSON_spec_string ("order_id", &order_id),
GNUNET_JSON_spec_string ("reason", &reason),
- GNUNET_JSON_spec_string ("reason", &merchant),
+ GNUNET_JSON_spec_string ("instance", &merchant),
GNUNET_JSON_spec_end ()
};
diff --git a/src/include/taler_merchant_service.h b/src/include/taler_merchant_service.h
index e813851c..15287c55 100644
--- a/src/include/taler_merchant_service.h
+++ b/src/include/taler_merchant_service.h
@@ -621,4 +621,28 @@ TALER_MERCHANT_history (struct GNUNET_CURL_Context *ctx,
void
TALER_MERCHANT_history_cancel (struct TALER_MERCHANT_HistoryOperation *ho);
+/************************ /refund ****************************/
+
+/**
+ * Increase the refund associated to a order
+ *
+ * @param ctx the CURL context used to connect to the backend
+ * @param backend_uri 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 instance id of the merchant instance issuing the request
+ * @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_uri,
+ const char *order_id,
+ const struct TALER_Amount *refund,
+ const char *reason,
+ const char *instance,
+ TALER_MERCHANT_RefundIncreaseCallback cb,
+ void *cb_cls);
+
#endif /* _TALER_MERCHANT_SERVICE_H */
diff --git a/src/lib/merchant_api_proposal.c b/src/lib/merchant_api_proposal.c
index f8f1ab7e..d262fffc 100644
--- a/src/lib/merchant_api_proposal.c
+++ b/src/lib/merchant_api_proposal.c
@@ -103,11 +103,11 @@ struct TALER_MERCHANT_ProposalLookupOperation
/**
* Function called when we're done processing the
- * HTTP PUT /proposal request.
+ * HTTP POST /proposal request.
*
* @param cls the `struct TALER_MERCHANT_ProposalOperation`
* @param response_code HTTP response code, 0 on error
- * @param json response body, NULL if not in JSON
+ * @param json response body, NULL if not JSON
*/
static void
handle_proposal_finished (void *cls,
@@ -239,7 +239,6 @@ TALER_MERCHANT_order_put (struct GNUNET_CURL_Context *ctx,
curl_easy_setopt (eh,
CURLOPT_URL,
po->url));
- /* FIXME: as for the specs, POST becomes PUT */
GNUNET_assert (CURLE_OK ==
curl_easy_setopt (eh,
CURLOPT_POSTFIELDS,
diff --git a/src/lib/merchant_api_refund.c b/src/lib/merchant_api_refund.c
index ecb233c8..126dda6b 100644
--- a/src/lib/merchant_api_refund.c
+++ b/src/lib/merchant_api_refund.c
@@ -39,6 +39,11 @@ struct TALER_MERCHANT_RefundIncreaseOperation
char *url;
/**
+ * The request body
+ */
+ char *json_enc;
+
+ /**
* The CURL context to connect to the backend
*/
struct GNUNET_CURL_Context *ctx;
@@ -52,15 +57,41 @@ struct TALER_MERCHANT_RefundIncreaseOperation
* Clasure to pass to the callback
*/
void *cb_cls;
+
+ /**
+ * Handle for the request
+ */
+ struct GNUNET_CURL_Job *job;
+
};
/**
+ * Callback to process POST /refund response
+ *
+ * @param cls the `struct TALER_MERCHANT_RefundIncreaseOperation`
+ * @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 json_t *json)
+{
+
+}
+
+/**
* Increase the refund associated to a order
*
* @param ctx the CURL context used to connect to the backend
* @param backend_uri 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 instance id of the merchant instance issuing the request
+ * @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,
@@ -68,6 +99,7 @@ TALER_MERCHANT_refund_increase (struct GNUNET_CURL_Context *ctx,
const char *order_id,
const struct TALER_Amount *refund,
const char *reason,
+ const char *instance,
TALER_MERCHANT_RefundIncreaseCallback cb,
void *cb_cls)
{
@@ -80,12 +112,49 @@ TALER_MERCHANT_refund_increase (struct GNUNET_CURL_Context *ctx,
rio->cb = cb;
rio->cb_cls = cb_cls;
GNUNET_asprintf (&rio->url,
- "%s/%s",
+ "%s%s",
backend_uri,
"/refund");
/**
* FIXME: pack the data to POST.
*/
+ req = json_pack ("{s:o, s:s, s:s}",
+ "refund", TALER_JSON_from_amount (refund),
+ "order_id", order_id,
+ "reason", reason,
+ "instance", instance);
+
+ eh = curl_easy_init ();
+
+ rio->json_enc = json_dumps (req,
+ JSON_COMPACT);
+ json_decref (req);
+
+ if (NULL == rio->json_enc)
+ {
+ GNUNET_break (0);
+ GNUNET_free (rio);
+ return NULL;
+ }
+
+ GNUNET_assert (CURLE_OK ==
+ curl_easy_setopt (eh,
+ CURLOPT_URL,
+ rio->url));
+ GNUNET_assert (CURLE_OK ==
+ curl_easy_setopt (eh,
+ CURLOPT_POSTFIELDS,
+ rio->json_enc));
+ GNUNET_assert (CURLE_OK ==
+ curl_easy_setopt (eh,
+ CURLOPT_POSTFIELDSIZE,
+ strlen (rio->json_enc)));
+ rio->job = GNUNET_CURL_job_add (ctx,
+ eh,
+ GNUNET_YES,
+ &handle_refund_increase_finished,
+ rio);
+
return NULL;
}