Difference between revisions of "Include CloudCoin in an ATM system"

From CloudCoin Wiki
Jump to: navigation, search
(Sample URL that becomes a QR Code)
(Sample URL based on current code:)
 
(8 intermediate revisions by the same user not shown)
Line 6: Line 6:
  
 
=== Sample URL that becomes a QR Code ===
 
=== 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 (recomended)
 +
 
The QR code contains:
 
The QR code contains:
 
{| class="wikitable"  
 
{| class="wikitable"  
 
|-
 
|-
 
! GET Code
 
! GET Code
! Name
+
! Current Data Elements in QR
! Exanple
+
! Example
 +
! Recommendation to be Stored on Server or Sent to Client
 
|-
 
|-
 
| w
 
| w
| Skywallet ID
+
| B4U Skywallet ID
| bill.skywallet.cc
+
| cc.b4uatm.com
 +
| Embedded in our Web page (unneeded)
 +
|
 
|-
 
|-
 
| cc
 
| cc
 
| Amount in CloudCoin
 
| Amount in CloudCoin
 
| 300
 
| 300
 +
| Sent to Client
 
|-
 
|-
 
| usd
 
| usd
 
| Amount in USD
 
| Amount in USD
 
| 300
 
| 300
 +
| Sent to Client
 
|-
 
|-
 
| b4u
 
| b4u
 
| Transaction ID
 
| Transaction ID
 
| P3WFMghh24NWkTwX3eNyag
 
| P3WFMghh24NWkTwX3eNyag
 +
| Sent to Client and Stored on Server
 
|-
 
|-
 
| m
 
| m
 
| Merchant ID
 
| Merchant ID
 
| 129987
 
| 129987
 +
| Stored on Server
 
|-
 
|-
 
| t
 
| t
 
| Terminal ID
 
| Terminal ID
 
| 34586
 
| 34586
 +
| Stored on Server
 
|-
 
|-
 
| s
 
| s
 
| Store ID
 
| Store ID
 
| 54235
 
| 54235
 +
| Stored on Server
 
|-
 
|-
 
| qr
 
| qr
 
| QR Verification Code
 
| QR Verification Code
 
| XXXXXXX
 
| XXXXXXX
 +
| Sent to Client and Stored on Server
 
|-
 
|-
 
| d
 
| d
 
| Date & Time of Transaction
 
| Date & Time of Transaction
 
| 210914153315
 
| 210914153315
 +
| Stored on Server
 
|-
 
|-
 
| imei
 
| imei
 
| Mobile Device IMEI
 
| Mobile Device IMEI
 
| 354454028234368
 
| 354454028234368
 +
| Unneeded but seems like it must be generated on Client
 
|-
 
|-
 
| p
 
| p
 
| Phone Number
 
| Phone Number
| 530-591-7058
+
| 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: ====
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Sample URL
 +
! Resulting QR
 +
|-
 +
| https://skywallet.cc/b4u?w=bill&cc=300&usd=3434&b4u=P3WFMghh24NWkTwX3eNyag&m=129854&t=34568&s=54256&qr=xxxxxxx&d=210914153315&imei=354454028234368&p=5305927085
 +
| [[File:Currenturl.png|Using Current Data Elements]]
 +
|-
 +
| https://skywallet.cc/b4u?cc=300&usd=3434&b4u=P3WFMghh24NWkTwX3eNyag&qr=xxxxxxx
 +
| [[File:Recomended url.png|Leaving Some Elements on Server]]
 
|}
 
|}
https://skywallet.cc/b4u?cc=3000&usd=300&id=7917cdf720c044049cc534a370130642
 
  
=== Sample URL ( including an optional base64 message created by you ). This that becomes a QR Code ===
+
==== Sample URL based on recommended code: ====  
https://skywallet.cc/b4u?cc=3000&usd=300&id=7917cdf720c044049cc534a370130642&b64=c29tZWJ1bGxzaGl0dGhhdHdpbGx0YWtldXBhbG90b2ZzcGFjZQ==
+
 
  
The QR code needs to contain the following Parameters:
 
  
# https. The Protocol. You must use https.
 
# Skywallet.cc The Skywallet.cc website. There is also a secondary website that is secret but can be switched over to if the Skywallet.cc is down.
 
# b4u The b4u web page. This page contains information about your Skywallet address, the customer's Skywallet address so it does not have to be included in the URL.
 
# cc The amount of CloudCoins that the user is to send. e.g. cc=400
 
# usd The amount of dollars the user is to get from the ATM. e.g. usd=60
 
# id The unique identifier generated by your system to identify the transaction. IMPORTANT: This id must by a guid without hyphens. id=7917cdf720c044049cc534a370130642
 
# b64 Optional information that the ATM may encoded in Base64. This will be passed on to your WebHook server. 
 
  
 
== Web Hook Page ==
 
== Web Hook Page ==

Latest revision as of 19:16, 19 September 2021

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:

  1. Based on the current QR code
  2. Storing a record based on the transaction code on the server (recomended)

The QR code contains:

GET Code Current Data Elements in QR Example Recommendation to be Stored on Server or Sent to Client
w B4U Skywallet 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 Resulting QR
https://skywallet.cc/b4u?w=bill&cc=300&usd=3434&b4u=P3WFMghh24NWkTwX3eNyag&m=129854&t=34568&s=54256&qr=xxxxxxx&d=210914153315&imei=354454028234368&p=5305927085 Using Current Data Elements
https://skywallet.cc/b4u?cc=300&usd=3434&b4u=P3WFMghh24NWkTwX3eNyag&qr=xxxxxxx Leaving Some Elements on Server

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 Skywallet Account has received CloudCoins. You can do this by using the Skywallet Connect CLI. Skywallet Connect is a console application written in GoLang and runs on any platform. It can be called by any programming language.

$ ./skywallet_connect verify_payment 080A4CE89126F4F1B93E4745F89F6713 b4u.skywallet.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= '';

	$skywallet = "b4u.skywallet.cc"; 

/* CHECK SKYWALLET ACCOUNT IS THERE AND WORKING */
	$skywallet_connect = "/usr/local/bin/skywallet_connect";

	if (!file_exists($skywallet_connect))
			die("skywallet_connect not found");

	if (!is_executable($skywallet_connect))
			die("skywallet_connect doesn't have exec permissions");


/* Verify Receipt of CloudCoins */
        global $skywallet_connect;

		$cmd =  "$skywallet_connect verify_payment $id";
		//echo $cmd;

        // Exec the binary
        $json = exec($cmd, $outarray, $error_code);
        if ($error_code != 0) {
            die("Invalid response from skywallet_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. Recored Transaction

?>