Register
Submit a solution
The challenge is finished.

Challenge Overview

Introduction

We will develop an iOS app to manage payment journal data. While managing journal data internally, credit card payments and other payments are integrated with external apps, and journal data is also sent to Backend via web API.

 

The app will have the following major features:

  • Data management with Core DB

  • Application integration by URL Scheme

  • Web API calls

Background

The goal is to create an iOS app that works on its own as an iOS app to manage payment journal data, and will serve as the basis for a future app to manage all aspects of payments based on its ability to integrate with external apps and send data to Backend via web API.

 

Technology

  • iOS 13+

  • Swift

  • Xcode

  • REST

Requirements

The iOS app we are developing is an app with three screens with tabbed menus, you can find the detailed screen specifications in the forum after you register. In summary, these are the screens to be developed:

  • Home

    • This is the screen the user sees after opening the app

  • Payment

    • From the screen, the user can make payment in one of these 3 types: Cash, Credit Card, Account

  • Information

    • Shows a few menus that will each open a unique webview screen showing some informational texts

  • Payment Result

    • Shows the payment result when the user does a Cash payment in the app, or receives a callback from the Payment Application when the user does a Credit Card or Account payment

 

The data is sent to the backend via Web API while the journal data is kept in the app in the Core DB. We have prepared a mock API server in Docker Container for local development. Please note that the mock API server always returns 200 responses without format checks.

 

In addition, we have prepared a Caller application and a payment application for operation check, so please check the implementation and operation by URL scheme.

 

The following requirements must be covered:

  • Target is iOS 13 or higher.

  • The UI should support both the iPhone and iPad.

  • The display language must be localizable.strings to allow localization.

  • If you need to use an open-source library (ex: for the chart), please use one that allows commercial usage (MIT or Apache 2.0 for example).

  • For anything that we don’t have data from the API, please use local json files as data source. Do NOT hardcode any data into the code.

  • The URL scheme of the "Payment Application" to be called is: linkPayment

  • When the app is launched by the URL scheme from the “Caller Application”, this app will use the parameter values in the received URL scheme to construct a new URL and then call the “Payment Application” (linkPayment).

  • The URL scheme to be received by this app is as follows:

    • CreditCard: opener://open?Return_Type=4&Payment_Service=010&Transaction_Type=1&Amount=10000&Startup_Mode=1

    • Account: opener://open?Return_Type=4&Payment_Service=060&Transaction_Type=1&Receive_Agency_Code=12345000&Receive_Agency_Name=abc_bank&Consignor_Name=special_code&Consignor_Code=123&Startup_Mode=1

  • This app updates the above URL scheme as below to invoke the Payment Application:

    • Change opener to linkPayment

    • Add #opener:// at the end of the URL scheme

  • The app does not call the "Payment Application” when you make a "Cash" payment.

  • The URL scheme for the “Credit Card” payment is like this:

    • linkPayment://open?Return_Type=4&Payment_Service=010&Transaction_Type=1&Amount=10000&Startup_Mode=1#opener://

    • linkPayment://open? : Fixed value

    • Return_Type=4 : Fixed value

    • Payment_Service=010 : For credit card, "010" fixed value

    • Transaction_Type=1 : Fixed value

    • Amount=10000 : The total amount you entered in the app

    • Startup_Mode=1 : Fixed value

    • #opener:// : Fixed value

  • The URL scheme for the “Account” payment is like this:

    • linkPayment://open?Return_Type=4&Payment_Service=060&Transaction_Type=1&Receive_Agency_Code=12345000&Receive_Agency_Name=abc_bank&Consignor_Name=special_code&Consignor_Code=123&Startup_Mode=1#opener://

    • linkPayment://open? : Fixed value

    • Return_Type=4 : Fixed value

    • Payment_Service=010 : For account, "060" fixed value

    • Transaction_Type=1 : Fixed value

    • Receive_Agency_Code=12345000 : Receive_Agency_Code you entered in the app

    • Receive_Agency_Name=abc_bank : Receive_Agency_Name you entered in the app

    • Consignor_Name=special_code : Consignor_Name you entered in the app

    • Consignor_Code=123 : Consignor_Code you entered in the app

    • Startup_Mode=1 : Fixed value

    • #opener:// : Fixed value

  • Please set the URL scheme of the app to be developed as follows

  • Decode the data received by the URL scheme after payment processing and save it to the DB in the app, then call the Web API.

  • After processing the payment, the API is called in the following order

    1. POST to /payments/

    2. POST the Payment ID you receive in this response to /journals/ as a parameter

    3. However, b is not called for cash payments. Please post only /payments/ in this case.

  • API is called when you press the "Payment" button on the payment screen in the app.

In case of credit card or direct debit, API will be called when the URL scheme is called from the “Payment Application” and the result screen is displayed in the app.

  • Set the parameter value of the URL scheme to be received from the "Payment Application” in the Request Body.

  • See the API Specs section for more information on setting up the data for the API.

  • If there is no error from the server, the app does not need to do anything in particular.

  • If there is an error from the server, please display a pop-up message with an error message. Also, the next time the app is launched, call the API again to send the data.

  • If you were unable to call the API or send data due to a network error, etc., please retry three times and call the API again the next time the app is launched to send data.


API Specs

Download the full spec in the forum to see the details on this after you register.


Mockup API Server Docker Procedures

Download the full spec in the forum to see the details on this after you register.


Caller Application

Download the full spec in the forum to see the details on this after you register.


Payment Application

Download the full spec in the forum to see the details on this after you register.



Final Submission Guidelines

  • Xcode project
  • A detailed readme in markdown format describing how to configure, run and verify your submission

ELIGIBLE EVENTS:

2021 Topcoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30137719