diff options
Diffstat (limited to 'src/lib/merchant_api_merchant_get_order.c')
-rw-r--r-- | src/lib/merchant_api_merchant_get_order.c | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/src/lib/merchant_api_merchant_get_order.c b/src/lib/merchant_api_merchant_get_order.c index 466f2cd1..025460c2 100644 --- a/src/lib/merchant_api_merchant_get_order.c +++ b/src/lib/merchant_api_merchant_get_order.c @@ -77,13 +77,28 @@ static void handle_unpaid (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh, struct TALER_MERCHANT_HttpResponse *hr) { - const char *taler_pay_uri - = json_string_value (json_object_get (hr->reply, - "taler_pay_uri")); - const char *already_paid_order_id - = json_string_value (json_object_get (hr->reply, - "already_paid_order_id")); - if (NULL == taler_pay_uri) + struct TALER_MERCHANT_OrderStatusResponse osr = { + .status = TALER_MERCHANT_OSC_UNPAID + }; + struct GNUNET_JSON_Specification spec[] = { + TALER_JSON_spec_amount ("total_amount", + &osr.details.unpaid.contract_amount), + GNUNET_JSON_spec_mark_optional ( + GNUNET_JSON_spec_string ("already_paid_order_id", + &osr.details.unpaid.already_paid_order_id)), + GNUNET_JSON_spec_string ("taler_pay_uri", + &osr.details.unpaid.taler_pay_uri), + GNUNET_JSON_spec_string ("summary", + &osr.details.unpaid.summary), + TALER_JSON_spec_absolute_time ("creation_time", + &osr.details.unpaid.creation_time), + GNUNET_JSON_spec_end () + }; + + if (GNUNET_OK != + GNUNET_JSON_parse (hr->reply, + spec, + NULL, NULL)) { GNUNET_break_op (0); hr->http_status = 0; @@ -93,17 +108,9 @@ handle_unpaid (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh, NULL); return; } - { - struct TALER_MERCHANT_OrderStatusResponse osr = { - .status = TALER_MERCHANT_OSC_UNPAID, - .details.unpaid.taler_pay_uri = taler_pay_uri, - .details.unpaid.already_paid_order_id = already_paid_order_id - }; - - omgh->cb (omgh->cb_cls, - hr, - &osr); - } + omgh->cb (omgh->cb_cls, + hr, + &osr); } |