diff --git a/lib/services/buy/simplex/simplex_api.dart b/lib/services/buy/simplex/simplex_api.dart index 5ac75f6a6..e04ca5c8d 100644 --- a/lib/services/buy/simplex/simplex_api.dart +++ b/lib/services/buy/simplex/simplex_api.dart @@ -110,20 +110,27 @@ class SimplexAPI { Future> getQuote(SimplexQuote quote) async { try { Map headers = { - 'Content-Type': 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded', + }; + Map data = { + 'ROUTE': 'quote', + 'CRYPTO_TICKER': quote.crypto.ticker.toUpperCase(), + 'FIAT_TICKER': quote.fiat.ticker.toUpperCase(), + 'REQUESTED_TICKER': quote.buyWithFiat + ? quote.fiat.ticker.toUpperCase() + : quote.crypto.ticker.toUpperCase(), + 'REQUESTED_AMOUNT': quote.buyWithFiat + ? "${quote.youPayFiatPrice}" + : "${quote.youReceiveCryptoAmount}", }; - String data = - '{"CRYPTO_TICKER": "${quote.crypto.ticker.toUpperCase()}", "FIAT_TICKER": "${quote.fiat.ticker.toUpperCase()}", "REQUESTED_TICKER": "${quote.buyWithFiat ? quote.fiat.ticker.toUpperCase() : quote.crypto.ticker.toUpperCase()}", "REQUESTED_AMOUNT": ${quote.buyWithFiat ? quote.youPayFiatPrice : quote.youReceiveCryptoAmount}}'; // TODO add USER_ID - Uri url = Uri.parse('http://localhost/api.php/quote'); - // TODO update to stackwallet.com hosted API - - var res = await http.post(url, headers: headers, body: data); + Uri url = Uri.http('localhost', 'api.php/quote', data); + // TODO update to stackwallet.com hosted API and use HTTPS + var res = await http.post(url, headers: headers, body: json.encode(data)); if (res.statusCode != 200) { throw Exception('getQuote exception: statusCode= ${res.statusCode}'); } - final jsonArray = jsonDecode(res.body); jsonArray['quote'] = quote; // Add and pass this on @@ -168,65 +175,36 @@ class SimplexAPI { } } - void newOrder(SimplexQuote quote) async { + /*Future>*/ void newOrder( + SimplexQuote quote) async { + // Calling Simplex's API manually: + // curl --request POST \ + // --url https://sandbox.test-simplexcc.com/wallet/merchant/v2/payments/partner/data \ + // --header 'Authorization: ApiKey $apiKey' \ + // --header 'accept: application/json' \ + // --header 'content-type: application/json' \ + // -d '{"account_details": {"app_provider_id": "$publicKey", "app_version_id": "123", "app_end_user_id": "01e7a0b9-8dfc-4988-a28d-84a34e5f0a63", "signup_login": {"timestamp": "1994-11-05T08:15:30-05:00", "ip": "207.66.86.226"}}, "transaction_details": {"payment_details": {"quote_id": "3b58f4b4-ed6f-447c-b96a-ffe97d7b6803", "payment_id": "baaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "order_id": "789", "original_http_ref_url": "https://stackwallet.com/simplex", "destination_wallet": {"currency": "BTC", "address": "bc1qjvj9ca8gdsv3g58yrzrk6jycvgnjh9uj35rja2"}}}}' try { - /* - String version = "123"; // TODO pull from app version variable - String app_end_user_id = - "01e7a0b9-8dfc-4988-a28d-84a34e5f0a63"; // TODO generate per-user ID (pull from wallet?) - String signup_timestamp = - "1994-11-05T08:15:30-05:00"; // TODO supply real signup timestamp (pull from wallet?) - String referral_ip = "207.66.86.226"; // TODO update to API server IP - String payment_id = - "faaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"; // TODO make unique and save - String order_id = "789"; // TODO generate unique ID per order - String referrer = "https://stackwallet.com/simplex"; // TODO update - String apiKey = - "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXJ0bmVyIjoic3RhY2t3YWxsZXQiLCJpcCI6WyIxLjIuMy40Il0sInNhbmRib3giOnRydWV9.VRaNZKPlc8wtkHGn0XscbsHnBMweZrMEyl2P94GfH94"; - String publicKey = "pk_test_7cce3f58-680d-420c-9888-f53d44763fe6"; - - // Using simplex_api/order; doesn't work: - Map headers = {'Content-Type': 'application/json'}; - String data = - '{"account_details": {"app_end_user_id": "${app_end_user_id}"}, "transaction_details": {"payment_details": {"fiat_total_amount": {"currency": "${quote.fiat.ticker.toUpperCase()}", "amount": "${quote.youPayFiatPrice}"}, "requested_digital_amount": {"currency": "${quote.crypto.ticker.toUpperCase()}", "amount": "${quote.youReceiveCryptoAmount}"}, "destination_wallet": {"currency": "${quote.crypto.ticker.toUpperCase()}", "address": "${quote.receivingAddress}", "validation": "bypass"}}'; - Uri url = Uri.parse('http://sandbox-api.stackwallet.com/order'); - var res = await http.post(url, headers: headers, body: data); - - if (res.statusCode != 200) { - throw Exception('newOrder exception: statusCode= ${res.statusCode}'); - } - final jsonArray = jsonDecode(res.body); - print(jsonArray); - /* - - // Calling Simplex's API manually: - // curl --request POST \ - // --url https://sandbox.test-simplexcc.com/wallet/merchant/v2/payments/partner/data \ - // --header 'Authorization: ApiKey $apiKey' \ - // --header 'accept: application/json' \ - // --header 'content-type: application/json' \ - // -d '{"account_details": {"app_provider_id": "$publicKey", "app_version_id": "123", "app_end_user_id": "01e7a0b9-8dfc-4988-a28d-84a34e5f0a63", "signup_login": {"timestamp": "1994-11-05T08:15:30-05:00", "ip": "207.66.86.226"}}, "transaction_details": {"payment_details": {"quote_id": "3b58f4b4-ed6f-447c-b96a-ffe97d7b6803", "payment_id": "baaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "order_id": "789", "original_http_ref_url": "https://stackwallet.com/simplex", "destination_wallet": {"currency": "BTC", "address": "bc1qjvj9ca8gdsv3g58yrzrk6jycvgnjh9uj35rja2"}}}}' - Map headers = { - 'Content-Type': 'application/json', - 'Accept': 'application/json', - 'Authorization': 'ApiKey ${apiKey}', + 'Content-Type': 'application/x-www-form-urlencoded', }; - String data = - '{"account_details": {"app_provider_id": "$publicKey", "app_version_id": "$version", "app_end_user_id": "$app_end_user_id", "signup_login": {"timestamp": "$signup_timestamp", "ip": "$referral_ip"}}, "transaction_details": {"payment_details": {"quote_id": "${quote.purchaseId}", "payment_id": "$payment_id", "order_id": "$order_id", "original_http_ref_url": "$referrer", "destination_wallet": {"currency": "${quote.crypto.ticker.toUpperCase()}", "address": "${quote.receivingAddress}"}}}}'; - Uri url = Uri.parse( - 'https://sandbox.test-simplexcc.com/wallet/merchant/v2/payments/partner/data'); - var res = await http.post(url, headers: headers, body: data); + Map data = { + 'ROUTE': 'order', + 'QUOTE_ID': "${quote.id}", + 'ADDRESS': "${quote.receivingAddress}", + 'CRYPTO_TICKER': "${quote.crypto.ticker.toUpperCase()}", + }; + // TODO add USER_ID + Uri url = Uri.http('localhost', 'api.php/order', data); + // TODO update to stackwallet.com hosted API and use HTTPS + var res = await http.post(url, headers: headers, body: json.encode(data)); if (res.statusCode != 200) { throw Exception('newOrder exception: statusCode= ${res.statusCode}'); } - final jsonArray = jsonDecode(res.body); + final jsonArray = jsonDecode(res.body); // TODO check if json + // TODO create and return SimplexOrder here print(jsonArray); - // TODO check if {is_key_required: true} (indicates success) - */*/ - - print('test'); return; } catch (e, s) { Logging.instance.log("newOrder exception: $e\n$s", level: LogLevel.Error);