Include CloudCoin in an ATM system
There are four issues to consider. The generation of the QR code, the customer calling your web hook, verifying the CloudCoin payment and customize the receipt.
Providing a QR code for Cell Phones
Your ATM will need to generate a QR code so the customer can send you CloudCoins. The QR code will be a URL that any phone can use without installing any special software.
Sample URL that becomes a QR Code
The QR code and be done in two ways:
- Based on the current QR code
- Storing a record based on the transaction code on the server (recommended)
The QR code contains:
GET Code | Current Data Elements in QR | Example | Recommendation to be Stored on Server or Sent to Client | |
---|---|---|---|---|
w | B4U Skyvault ID | cc.b4uatm.com | Embedded in our Web page (unneeded) | |
cc | Amount in CloudCoin | 300 | Sent to Client | |
usd | Amount in USD | 300 | Sent to Client | |
b4u | Transaction ID | P3WFMghh24NWkTwX3eNyag | Sent to Client and Stored on Server | |
m | Merchant ID | 129987 | Stored on Server | |
t | Terminal ID | 34586 | Stored on Server | |
s | Store ID | 54235 | Stored on Server | |
qr | QR Verification Code | XXXXXXX | Sent to Client and Stored on Server | |
d | Date & Time of Transaction | 210914153315 | Stored on Server | |
imei | Mobile Device IMEI | 354454028234368 | Unneeded but seems like it must be generated on Client | |
p | Phone Number | 5305917058 | Unneeded but seems it must be generated on Client | |
e | echo (base64 data that is optional and can be anything. This will be passed to the webhook) | P3WFMghh24NWkTwX3eNyag | Sent To Client |
Sample URL based on current code:
Sample URL based on recommended code:
Web Hook Page
You will need to have a web page that receives notice that your customer has send you CloudCoins and is waiting at the ATM.
Sample URL that your Web Hook receives
https://b4uATM.com/CloudCoin?cc=3000&id=7917cdf720c044049cc534a370130642
Sample URL that your Web Hook receives (including the optional base64 text )
https://b4uATM.com/CloudCoin?cc=3000&id=7917cdf720c044049cc534a370130642
Verifying Payment
You will need to verify that your Skyvault Account has received CloudCoins. You can do this by using the Skyvault Connect CLI. Skyvault Connect is a console application written in GoLang and runs on any platform. It can be called by any programming language.
$ ./Skyvault_connect verify_payment 080A4CE89126F4F1B93E4745F89F6713 b4u.Skyvault.cc {"amount_verified":100,"status":"success","message":"CloudCoins verified"}
1. Sample Web Hook Page in PHP file (name it cloudcoin.php):
<?php /* Load GET Parameters */ isset($_GET['id'])? $id = $_GET['id']: die("ID required"); isset($_GET['cc'])? $cc= $_GET['cc']: die("CC required"); isset($_GET['b64'])? $b64= $_GET['b64']: $b64= ''; $Skyvault = "b4u.Skyvault.cc"; /* CHECK SKYVAULT ACCOUNT IS THERE AND WORKING */ $skyvault_connect = "/usr/local/bin/skyvault_connect"; if (!file_exists($skyvault_connect)) die("skyvault_connect not found"); if (!is_executable($skyvault_connect)) die("skyvault_connect doesn't have exec permissions"); /* Verify Receipt of CloudCoins */ global $skyvault_connect; $cmd = "$skyvault_connect verify_payment $id"; //echo $cmd; // Exec the binary $json = exec($cmd, $outarray, $error_code); if ($error_code != 0) { die("Invalid response from Skyvault_connect: $error_code, Output $json"); } $arr = json_decode($json, true); if (!$arr) { die("Failed to decode json: $json"); } if (!isset($arr['amount_verified']) || !isset($arr['status'])) { die("Corrupted response: $json"); } if ($arr['status'] != "success") { die("Invalid status in response: $json"); } $cc_due = "SELECT cc FROM data WHERE id = $id"; $amountVerified = $arr['amount_verified']; if ($amountVerified != $cc_due ) { die("Invalid amount: $amountVerified, expected: $amount"); } /* Payment has been received */ //1. Send $$$ to the ATM //2. Record Transaction ?>