Giter VIP home page Giter VIP logo

madbrains / tinkoff-acquiring-sdk-flutter Goto Github PK

View Code? Open in Web Editor NEW
48.0 5.0 14.0 1.11 MB

Flutter Tinkoff Acquiring SDK is a simple way to integrate payments into your mobile application.

Home Page: https://pub.dev/packages/tinkoff_acquiring

License: MIT License

Kotlin 0.03% Ruby 0.38% Swift 0.11% Objective-C 0.01% Dart 98.35% Shell 0.77% Makefile 0.35%
apple-pay applepay dart flutter google-pay googlepay payment tinkoff tinkoff-payment

tinkoff-acquiring-sdk-flutter's Introduction

Tinkoff Acquiring SDK

Acquiring SDK allows you to integrate Tinkoff Internet Acquiring into mobile applications for iOS and Android platforms.

We solve problems of brand presence on mobile devices, specializing in development of mobile applications and services in the b2c segment.

Subscribe for the latest updates:


Available API Documentation.

EACQ protocol version with PCI DSS: 1.50 (09.12.2022)

SDK Features

  • Making payments (including recurring payments);
  • Saving customers bank cards;
  • Getting information about customers and saved bank cards;
  • Management of saved bank cards;
  • Integration with online checkouts;
  • Payment through the Faster Payments System (SPB) by QR;

Packages

tinkoff_acquiring pub package
tinkoff_acquiring_flutter pub package

Example

The Example is in the corresponding folder

tinkoff-acquiring-sdk-flutter's People

Contributors

alex-dorokhov avatar antol avatar fedorkorotkov avatar kolasikometov avatar korotkoff-studio avatar mit-73 avatar mysty0 avatar vfisher-92 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

tinkoff-acquiring-sdk-flutter's Issues

Не проходят платежи по картам МИР (например ВТБ и виртуальным картам (Сбер, Альфа))

Здравствуйте! не во всех Android показывает экран ввода кода из СМС. В ИОС и некоторых Androidd экран показвается, но платеж не проходит. В консоли ошибка (см.вложение лога [платежа)]
![Simulator Screen Shot - iPad (10th generation) - 2023-01-19 at 08 27 07](https://user-images.githubusercontent.com/57085995/213371940-074225e1-21af-4843-911c-f6c53
Снимок экрана 2023-01-19 в 08 52 25
1392363.png)
logTinkoffAndroid.txt

logTinkoff.txt

Какова последовательность вызова методов для привязки карты с использованием 3ds?

  1. Вызывается метод addCard - возвращается AddCardResponse.
  2. Вызывается метод attachCard - возвращается AttachCardResponse.
  3. Далее необходимо открыть ваше webview. Но есть несостыковки. Виджет WebView3DS, принимает
    в качестве обязательного параметра is3DsVersion2. Мы можем его предоставить проверив версию 3DS с помощью
    метода check3DSVersion. Но этот метод принимает в качестве обязательного параметра paymentId, но его
    негде взять. AddCardResponse и AttachCardResponse не содержат такого поля.
    Кроме того, Виджет Webview3DS принимает в качестве необязательных параметров serverTransId, acsTransId, но
    в AddCardResponse и AttachCardResponse таких полей нет. Кроме того, в комментарии к serverTransId написано,
    что он является обязательным для 3ds версии 2.

Отсюда возникает вопрос. Как привязывать карты с типом привязки threeDS и threeDSHold?

Ошибка при сериализации json['AccountTokens'] в запросе счетов для оплаты по СБП

Здравствуйте!
Получаю ошибочку:
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: type 'int' is not a subtype of type 'String?' in type cast
#0 _$AccountQrTokenFromJson (package:tinkoff_acquiring/src/core/models/common/account_qr_token.g.dart:11:38)
#1 new AccountQrToken.fromJson (package:tinkoff_acquiring/src/core/models/common/account_qr_token.dart:22:7)
#2 _$GetAccountQrListResponseFromJson. (package:tinkoff_acquiring/src/core/models/get_account_qr_list/get_account_qr_list_response.g.dart:19:39)
#3 MappedListIterable.elementAt (dart:_internal/iterable.dart:415:31)
#4 ListIterator.moveNext (dart:_internal/iterable.dart:344:26)
#5 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189:27)
#6 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
#7 new List.of (dart:core-patch/array_patch.dart:47:28)
#8 ListIterable.toList (dart:_internal/iterable.dart:214:7)
#9 _$GetAccountQrListResponseFromJson (package:tinkof<…>

при выполнении:
///получаем список аккаунт токенов
var sbpAccountList = await acquiring.getAccountQrList(GetAccountQrListRequest(signToken: signToken));

при чем, когда ни одного счета не было возвращался нормально пустой массив
после привязки счета, ответ от сервера идет адекватный:
[Tinkoff | RawResponse] 200 | {"Success":true,"ErrorCode":"0","Message":"OK","TerminalKey":"**********","AccountTokens":[{"RequestKey":136971,"Status":"PROCESSING"}]}

а расшифровать его сериализатор не может: get_account_qr_list_response.g.dart строка 18

Что из себя представляет аргумент для параметра encryptedPaymentData

Добрый день. Мне предстоит подключить google pay и apple pay. И я в этом вопросе немного новичок, поскольку с этим дел не имел и понятной, четкой информации по A/G pay крайне мало, в том числе официальной. Наткнувшись на ваш пост на хабре, был очень рад что нашел ваш вас: https://habr.com/ru/company/tinkoff/blog/544080/
Так вот, у меня есть небольшой вопрос.
Можете пожалуйста подсказать, что представляет из себя аргумент для параметра encryptedPaymentData, где его взять и как он выглядит.
Я немного дезориентирован этим, из-за этого уже стою на месте пару дней.
Буду очень благодарен вашему ответу!

Screenshot_70

Fix readme

Incorrect field parameters

proxyDomain: terminalKey,
proxyPath: password,

Check3DSVersionResponse(Success: false, Status: null, ErrorCode: 508, Message: Неверные параметры., Details: Неверный номер карты

Номер карты верный. Пытался вводить и тестовые и номера реальных карт выдает одну и ту же ошибку.
[Tinkoff | RawResponse] 200 | {"Success":false,"ErrorCode":"508","Message":"Неверные параметры.","Details":"Неверный номер карты."}
[Tinkoff | Response] Check3DSVersionResponse(Success: false, Status: null, ErrorCode: 508, Message: Неверные параметры., Details: Неверный номер карты., Version: null, TdsServerTransID: null, ThreeDSMethodURL: null, PaymentSystem: null)

Не работает отмена в веб-форме 3ds v2

Спасибо за библиотеку, весьма полезна, особенно функция проксирования запросов.

Тестирую последнюю версию с помощью встроенного примера и stable версии flutter (2.0.5).

  1. Включаю 3ds v2.
  2. Ожидаю появления веб-формы для ввода кода.
  3. Нажимаю "Отмена", но ожидаемой реакции на нажатие не происходит (закрытие веб-формы).

В консоли выводится следующее сообщение:

W/cr_WebViewCallback( 3575): Unable to create JsDialog without an Activity
E/InputMethodManager( 3575): b/117267690: Failed to get fallback IMM with expected displayId=28 actual IMM#displayId=0 view=io.flutter.plugins.webviewflutter.InputAwareWebView{db26a0b VFEDHVC.. .F...... 0,0-1080,2154}

Предполагаю, что связано с тем что страница пытается использовать браузеровский window.alert для отображения окна подтверждения. Вероятно связано с этим багом: flutter/flutter#30358 .

В целом так же хотелось бы иметь и какой-то колбэк / результат от CollectData, указывающий, что пользователь отменил процесс оплаты (и соответственно платежная сессия должна быть закрыта в использующем приложении).

device-2021-04-19-215625

Invalid argument(s): `LOOP_CHECKING` is not one of the supported values

Доброго времени суток господа,
Invalid argument(s): LOOP_CHECKING is not one of the supported values: NEW, FORM_SHOWED, DEADLINE_EXPIRED, CANCELED, PREAUTHORIZING, AUTHORIZING, AUTHORIZED, AUTH_FAIL, REJECTED, 3DS_CHECKING, 3DS_CHECKED, REVERSING, PARTIAL_REVERSED, REVERSED, CONFIRMING, CONFIRMED, REFUNDING, PARTIAL_REFUNDED, REFUNDED

Вот такую ошибку получил, когда добавил карту - удалил - снова хотел добавить ту же карту, add card resonse and attach card response пришли с success, но status:LOOP_CHECKING был

Однако, посе добавления вызывал getCardList, и добавленная карта имела статус CardStatus.deleted

PCI DSS

Здравствуйт! Правильно понимаю, что SDK можно использовать без сертификата PCI DSS?
Поясните пожалуйста.

Белый экран после подтверждения платежа

Здравствуйте, уважаемые разработчики! Помогите пожалуйста с проблемой. Подскажите что не так?

Реализую оплату как в примере но при возврате с вебвью получаю белый экран с объектом Submit3DSAuthorizationResponse как будто но не происходит редиректа обратно в приложени. Параметры указанные тут #46 (comment) я передаю но они почему то возвращаются мне как null при проверке check3DSVersion
Check3DSVersionResponse(Success: true, Status: null, ErrorCode: 0, Message: OK, Details: null, Version: 1.0.0, TdsServerTransID: null, ThreeDSMethodURL: null, PaymentSystem: null)

image

PS: если отменяешь проверку 3DS то на такой же белый экран редиректит

Статус 403 Forbidden в режиме Debug

Использовал пример из вашего репозитория с ветки 3.0.6.
На любое действие получаю ответ 403 Forbidden:

✓ Built build/app/outputs/flutter-apk/app-debug.apk.
Installing build/app/outputs/flutter-apk/app.apk...
Debug service listening on ws://127.0.0.1:38749/TdGsnNJGVJU=/ws
Syncing files to device M2102J20SG...
D/DecorView: onWindowFocusChanged hasWindowFocus true
W/MirrorManager( 6953): this model don't Support
[Tinkoff | Request URL] https://rest-api-test.tinkoff.ru/v2/Init
[Tinkoff | Request headers] {content-type: application/json}
[Tinkoff | RawRequest] {"Amount":1400,"OrderId":"26013","Language":"ru","CustomerKey":"user-key","PayType":"O","TerminalKey":"TestSDK","Token":"086c026c0d4e2f76cf9e62b415973bc6b7587382ea642ab4487fe41275ca4718"}
E/flutter ( 6953): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: Forbidden
E/flutter ( 6953): #0 NetworkClient.call (package:tinkoff_acquiring/src/utils/network_client.dart:85:7)
E/flutter ( 6953): <asynchronous suspension>
E/flutter ( 6953): #1 _MyHomePageState._pay (package:example/main.dart:217:31)
E/flutter ( 6953): <asynchronous suspension>
E/flutter ( 6953): #2 _MyHomePageState.build.<anonymous closure> (package:example/main.dart 100:17)
E/flutter ( 6953): <asynchronous suspension>
E/flutter ( 6953):
[Tinkoff | RawResponse] 403 | <html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>

acquiring.getCardList(request) return PAN = null

при получении списка сохранённый карт
acquiring.getCardList(request)
поле PAN всегда равно null

хотя сырой ответ в логе выглядит так как нужно
[RawResponse] [{"CardId":"100000000884","Pan":"220138******0047"…"D","RebillId":"","CardType":0,"ExpDate":"1224"}]

сам Response уже потерял значение
[Response] [CardInfo(PAN: null, CardId: 100000000884, RebillId: , CardType: CardType.writeOffs, ExpDate: 1224, Status: CardStatus.deleted)]

вот json полученный с сервера
[{CardId: "100000000884", Pan: "220138******0047", Status: "D", RebillId: "", CardType: 0,…}]

оказалось что в файле card_info.g.dart в функции CardInfo _$CardInfoFromJson(Map<String, dynamic> json)
имя написано в неверном регистре
pan: json['PAN'] as String?,
а с сервера пришло 'Pan'

Не получается проверить пример

Здравствуйте! Прошу помочь.
Скачал ваш пример, в нём поменял только значение terminalKey и password
Их взял из личного кабинета. Данные для тестового терминала.

В логах вижу, что вызывается метод https://rest-api-test.tinkoff.ru/v2/Init
В ответе ошибка 403

И не могу понять, откуда берется publicKey?

Зависимости

При попытке добавить
dependencies:
tinkoff_acquiring: 1.0.2

Because Project depends on tinkoff_acquiring 1.0.2 which depends on webview_flutter ^1.0.5, webview_flutter ^1.0.5 is required.
So, because Project depends on webview_flutter 2.0.1, version solving failed.

Не работает возврат в приложение из 3DS с картами МИР

Здравствуйте!!
Когда пытаюсь отменить ввод кода подтверждения с карты МИР ничего не происходит.
Если отменяю код с MasterCard то все ок

Подскажите пожалуйста почему такое может быть? Может это на стороне Тинькофф проблема

Логи

`Another exception was thrown: Invalid argument(s): No host specified in URI

Another exception was thrown: SocketException: Connection refused (OS Error: Connection refused, errno = 61), address =
localhost, port = 54137

Another exception was thrown: Invalid argument(s): No host specified in URI

Another exception was thrown: Invalid argument(s): No host specified in URI

Another exception was thrown: Invalid argument(s): No host specified in URI

Another exception was thrown: Invalid argument(s): No host specified in URI

Another exception was thrown: Invalid argument(s): No host specified in URI

Another exception was thrown: Invalid argument(s): No host specified in URI

Another exception was thrown: SocketException: Connection refused (OS Error: Connection refused, errno = 61), address =
localhost, port = 54139`

Обновление зависимостей, WebVeiw_flutter

Здравствуйте, возникла ошибка с телефонами на Android 12, webveiw не отображает клавиатуру, нашел решение обновление зависимостей webveiw до 3.0.0 или выше

При прохождении 3ds не появляется клавиатура, со следующей ошибкой

I/IMM_LC (29520): ssi() - flag : 0 view : com.example.aplication reason = SHOW_SOFT_INPUT
[ ] I/IMM_LC (29520): ssi() view is not EditText
[ ] V/InputMethodManager(29520): b/117267690: Display ID mismatch found. ViewRootImpl displayId=42 InputMethodManager displayId=0. Use the right InputMethodManager instance to avoid performance overhead.
[ ] V/InputMethodManager(29520): java.lang.Throwable
[ ] V/InputMethodManager(29520): at android.view.inputmethod.InputMethodManager.getFallbackInputMethodManagerIfNecessary(InputMethodManager.java:610)
[ ] V/InputMethodManager(29520): at android.view.inputmethod.InputMethodManager.showSoftInput(InputMethodManager.java:1721)
[ ] V/InputMethodManager(29520): at android.view.inputmethod.InputMethodManager.showSoftInput(InputMethodManager.java:1703)
[ ] V/InputMethodManager(29520): at org.chromium.content.browser.input.ImeAdapterImpl.u(chromium-TrichromeWebViewGoogle6432.aab-stable-489612734:149)
[ ] V/InputMethodManager(29520): at org.chromium.content.browser.input.ImeAdapterImpl.updateState(chromium-TrichromeWebViewGoogle6432.aab-stable-489612734:532)
[ ] V/InputMethodManager(29520): at android.os.MessageQueue.nativePollOnce(Native Method)
[ ] V/InputMethodManager(29520): at android.os.MessageQueue.next(MessageQueue.java:335)
[ ] V/InputMethodManager(29520): at android.os.Looper.loopOnce(Looper.java:186)
[ ] V/InputMethodManager(29520): at android.os.Looper.loop(Looper.java:313)
[ ] V/InputMethodManager(29520): at android.app.ActivityThread.main(ActivityThread.java:8663)
[ ] V/InputMethodManager(29520): at java.lang.reflect.Method.invoke(Native Method)
[ ] V/InputMethodManager(29520): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
[ ] V/InputMethodManager(29520): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)

Future not completed

Если происходит какая-то проблема во время выполнения FinishAuthorize и возникает ошибка
TimeoutException after 0:00:40.000000: Future not completed
все данные полученные с сервера до приложения не доходят

[Token] {Amount: 10000, OrderId: 57475, Language: ru, CustomerKey: kultpohod_10, PayType: O, TerminalKey: TestSDK, Token: 3289b69e44b667c44659ae64fd644b5cc9cf2266d0cd0f881801dd9e8548417f}
[RawRequest] {"Amount":10000,"OrderId":"57475","Language":"ru","CustomerKey":"kultpohod_10","PayType":"O","TerminalKey":"TestSDK","Token":"3289b69e44b667c44659ae64fd644b5cc9cf2266d0cd0f881801dd9e8548417f"}
[RawResponse] {"Success":true,"ErrorCode":"0","TerminalKey":"TestSDK","Status":"NEW","PaymentId":"800000084910","OrderId":"57475","Amount":10000}
[Response] InitResponse(Success: true, Status: Status.newest, ErrorCode: 0, Message: null, Details: null, TerminalKey: TestSDK, Amount: 10000, OrderId: 57475, PaymentId: 800000084910, PaymentURL: null)
[Token] {PaymentId: 800000084910, CardData: tPJwNsDEwdC7pJGM5tGxFZbM01EQifwYVEiffKwrSdV+c7deKPfue14YjN+Gh4XgXJI26mZHx/xoqiUQX4q28yhjgiML+xL2A5AmvW0cDDBWsuTgiwdJMB3zJofLkVXaCovnPuxGc4tpaOo3T4e/yNum1NHLYt9wWGzxwXW00D/3Uy0yI+v09yd9QYYKh6Ykl1ua/4oqp0Z18btY7Gu1vmox6XaTZ7akmvpfXHq1r/hFydu7kCzq77jvhwDvAOmmYCyIHzufy67GDa1K5S2x1pLcx1ISE9s6eqMjKdIMg5uY9MQUeyGbFizD8MwhdjK6AxY4ctvXQ3Js1YnNVNDWBg==, TerminalKey: TestSDK, Token: d6cb6b058a98649f0108310f59a5c844292bf93125f37a42d7965741cdfc4be3}
[RawRequest] {"PaymentId":800000084910,"CardData":"tPJwNsDEwdC7pJGM5tGxFZbM01EQifwYVEiffKwrSdV+c7deKPfue14YjN+Gh4XgXJI26mZHx/xoqiUQX4q28yhjgiML+xL2A5AmvW0cDDBWsuTgiwdJMB3zJofLkVXaCovnPuxGc4tpaOo3T4e/yNum1NHLYt9wWGzxwXW00D/3Uy0yI+v09yd9QYYKh6Ykl1ua/4oqp0Z18btY7Gu1vmox6XaTZ7akmvpfXHq1r/hFydu7kCzq77jvhwDvAOmmYCyIHzufy67GDa1K5S2x1pLcx1ISE9s6eqMjKdIMg5uY9MQUeyGbFizD8MwhdjK6AxY4ctvXQ3Js1YnNVNDWBg==","TerminalKey":"TestSDK","Token":"d6cb6b058a98649f0108310f59a5c844292bf93125f37a42d7965741cdfc4be3"}
[RawResponse] {"Success":true,"ErrorCode":"0","Message":"OK","Version":"1.0.0"}
[Response] Check3DSVersionResponse(Success: true, Status: null, ErrorCode: 0, Message: OK, Details: null, Version: 1.0.0, TdsServerTransID: null, ThreeDSMethodURL: null)
[Token] {CardData: tPJwNsDEwdC7pJGM5tGxFZbM01EQifwYVEiffKwrSdV+c7deKPfue14YjN+Gh4XgXJI26mZHx/xoqiUQX4q28yhjgiML+xL2A5AmvW0cDDBWsuTgiwdJMB3zJofLkVXaCovnPuxGc4tpaOo3T4e/yNum1NHLYt9wWGzxwXW00D/3Uy0yI+v09yd9QYYKh6Ykl1ua/4oqp0Z18btY7Gu1vmox6XaTZ7akmvpfXHq1r/hFydu7kCzq77jvhwDvAOmmYCyIHzufy67GDa1K5S2x1pLcx1ISE9s6eqMjKdIMg5uY9MQUeyGbFizD8MwhdjK6AxY4ctvXQ3Js1YnNVNDWBg==, DATA: {}, PaymentId: 800000084910, TerminalKey: TestSDK, Token: d6cb6b058a98649f0108310f59a5c844292bf93125f37a42d7965741cdfc4be3}
[RawRequest] {"CardData":"tPJwNsDEwdC7pJGM5tGxFZbM01EQifwYVEiffKwrSdV+c7deKPfue14YjN+Gh4XgXJI26mZHx/xoqiUQX4q28yhjgiML+xL2A5AmvW0cDDBWsuTgiwdJMB3zJofLkVXaCovnPuxGc4tpaOo3T4e/yNum1NHLYt9wWGzxwXW00D/3Uy0yI+v09yd9QYYKh6Ykl1ua/4oqp0Z18btY7Gu1vmox6XaTZ7akmvpfXHq1r/hFydu7kCzq77jvhwDvAOmmYCyIHzufy67GDa1K5S2x1pLcx1ISE9s6eqMjKdIMg5uY9MQUeyGbFizD8MwhdjK6AxY4ctvXQ3Js1YnNVNDWBg==","DATA":{},"PaymentId":800000084910,"TerminalKey":"TestSDK","Token":"d6cb6b058a98649f0108310f59a5c844292bf93125f37a42d7965741cdfc4be3"}

[VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: TimeoutException after 0:00:40.000000: Future not completed
[HTTP Error] TimeoutException after 0:00:40.000000: Future not completed

[RawResponse] {"Success":false,"ErrorCode":"703","Message":"Не получилось пополнить карту. Попробуйте позже","TerminalKey":"TestSDK","Status":"REJECTED","PaymentId":"800000084910","OrderId":"57475","Amount":10000}
[Response] FinishAuthorizeResponse(Success: false, Status: Status.rejected, ErrorCode: 703, Message: Не получилось пополнить карту. Попробуйте позже, Details: null, TerminalKey: TestSDK, Amount: 10000, OrderId: 57475, PaymentId: 800000084910, CardId: null, ACSUrl: null, AcsTransId: null, MD: null, PaReq: null, RebillId: null, FallbackOnTdsV1: null, TdsServerTransId: null)

Не появляется экран 3DSecure в web версии

Использую библиотеку в мобильном приложении. В версии под Андроид при платеже виртуальной картой Ю.Money появляется форма подтверждения 3DSecure. При компиляции приложения под web при попытке платежа той же картой появляется пустой серый экран и больше ничего не происходит. В консоли браузера никаких ошибок не вижу. Пожалуйста, подскажите в чем может быть проблема?

Расширение для маркетплейсов

Здравствуйте, планируется ли расширение библиотеки для работы с маркетплейсами? Или может данная возможность уже присутствует?

Напишите в README, что требуется PCI DSS

Для запросов, которые содеражт данные карт, Тинькофф требует PCI DSS. Как я понимаю, этот SDK можно использовать только с PCI DSS. Напишите об этом на видном месте, пожалуйста, чтобы люди без такой возможности не теряли время.

Оплаты по СБП

Здравствуйте, а есть ли пример организации оплаты по СБП, методы есть а вот реализовать не выходит? Заранее спасибо.

Чёрный экран после подтверждения оплаты

Здравствуйте уважаемые разработчики!

Мы столкнулись с такой проблемой, после оплаты в приложении деньги списываются, далее мы видим чёрный экран. Но если повторить процедуру второй раз, то всё проходит нормально. Не ясно из-за чёрного экрана, прошла оплата или нет.
В чём может быть ошибка?

Получения типа карты

Доброго времени суток, по работе SDK никаких проблем нет, все работает как нужно. Хотел узнать, можно ли получить инфу про тип карты? MasterCard, Visa, UnionPay and etc.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.