# Dummy Payment Server Made for testing Saleor's Transaction API ## Installation ### Deno This project requires deno to be installed. [Follow official installation instructions](https://deno.land/manual@v1.36.0/getting_started/installation) if deno is not installed on your system ### Running app Start app: ``` deno task start ``` ### Tunnel > **Note** > Before you go ahead and start your app locally, give Deno Deploy a try! It takes a ~2 seconds to deploy the app after you push the changes to the repository 😉 Create a tunnel, to make your app accessible from Internet. You can use [Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/install-and-setup/tunnel-guide/local/): ``` cloudflared tunnel --url localhost:5544 ``` or by using ngrook: ``` ngrok http 5544 ``` > **Note** > Saleor CLI's tunnel doesn't work with Deno ### Install app After running a tunnel install the app in Saleor. - In Dashboard: go to Apps > Install external app - In CLI: `saleor app install` ** The manifest URL is: your tunnel URL + `/manifest`**. For example, if your tunnel URL is `https://happy-tunnel.com` then the manifest URL will be `https://happy-tunnel.com/manifest` After installation `auth_token` will be visible in the console. It is also stored inside `.token` file. ## Deployment Fork this project Use [Deno Deploy](https://dash.deno.com/projects) to deploy your forked repository. ## Example usage The app id is `witoszekdev.dummy-payment-app`. The app has excessive permissions for debug purposes. They can be modified inside `main.ts` file ### `paymentGatewayInitialize` ```graphql mutation GatewayInitialize($id: ID!) { paymentGatewayInitialize( id: $id paymentGateways: [{ id: "witoszekdev.dummy-payment-app" }] ) { gatewayConfigs { id data errors { field message code } } errors { field message code } } } ``` Variables: ```json { "id": "" } ``` ### `transactionInitialize` ```graphql mutation TransactionInitalize( $amount: PositiveDecimal $checkoutId: ID! $data: JSON ) { transactionInitialize( amount: $amount id: $checkoutId paymentGateway: { id: "witoszekdev.dummy-payment-app", data: $data } ) { transaction { id actions message pspReference } data errors { field message code } } } ``` Variables: ```json { "checkoutId": "", "amount": 100 // your checkout amount "data": { "final": true } } ``` When you provide `data.final = true`, then the app will return `CHARGE_SUCCESS` response, otherwise it will return `CHARGE_REQUESTED`. ### `transactionProcess` ```graphql mutation TransactionProcess($transactionId: ID!) { transactionProcess(data: {}, id: $transactionId) { transaction { id } transactionEvent { id createdAt pspReference message externalUrl amount { currency amount } type } data errors { field message code } } } ``` Variables: ```json { "transactionId": "" } ``` ## TODO - `transactionEventReport` endpoint - CLI for getting app auth data - Add nice splash screen that renders README - Simulation of async and sync flow - Sync: request refund -> return pspReference -> send transactionEventReport after x seconds - Async: request refund -> retrun success