dummy-payment-server/README.md

187 lines
3.5 KiB
Markdown
Raw Permalink Normal View History

2023-01-11 09:54:02 +00:00
# Dummy Payment Server
2023-01-11 09:52:15 +00:00
2023-08-07 15:24:53 +00:00
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
2023-08-07 15:32:56 +00:00
> **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 😉
2023-08-07 15:24:53 +00:00
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
```
2023-08-07 15:32:56 +00:00
> **Note**
2023-08-07 15:24:53 +00:00
> 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.
2023-08-07 15:27:11 +00:00
## Deployment
Fork this project
Use [Deno Deploy](https://dash.deno.com/projects) to deploy your forked repository.
2023-08-07 15:24:53 +00:00
## 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": "<checkout_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": "<checkout_id>",
"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": "<transaction id from transactionInitialzie>"
}
```
2023-08-18 14:15:58 +00:00
## TODO
- `transactionEventReport` endpoint
- CLI for getting app auth data
- Add nice splash screen that renders README
2023-08-21 07:35:20 +00:00
- Simulation of async and sync flow
- Sync: request refund -> return pspReference -> send transactionEventReport after x seconds
- Async: request refund -> retrun success