How does the Pay-by-Mobile Widget work?
Pay-by-Mobile Widget is an all-in one international mobile payment solution for web-based businesses. Setting it up is Quick, Easy, and Free. It's perfect for selling credits in online games, charging for access to content, etc... Get Started Now!
Parameters
When someone completes a payment, Fortumo will inform you about this by making a HTTP GET request to the URL that you have specified in the service configuration (for example http://yourdomain.com/sms.php).This response is considered successful and notification delivered if your server responds with code 200, otherwise the request will be repeated (up to 10 times). The body of your response will not be processed or forwarded.
sendercountrycurrencyamountpriceuser_sharecuidpayment_idservice_idoperatorstatuscompleted for successful payment or contains the phrase failed.testsigIt is important to make sure that the service script is called by Fortumo and not someone else. There are several security measures, that satisfy most of the service providers:
$_SERVER["REMOTE_ADDR"] variable.
sig parameter and is calculated as md5 checksum of the request parameters and secret concatenated together. You can make the same calculation and check whether the sig parameter in the request matches the one that you calculated. See the PHP example below to find out exactly how the calculation is made.
Sample sms.php
<?php // check that the request comes from Fortumo server if(!in_array($_SERVER['REMOTE_ADDR'], array('81.20.151.38', '81.20.148.122', '79.125.125.1', '209.20.83.207'))) { header("HTTP/1.0 403 Forbidden"); die("Error: Unknown IP"); } // check the signature $secret = ''; // insert your secret between '' if(empty($secret) || !check_signature($_GET, $secret)) { header("HTTP/1.0 404 Not Found"); die("Error: Invalid signature"); } $sender = $_GET['sender'];//phone num. $amount = $_GET['amount'];//credit $cuid = $_GET['cuid'];//resource i.e. user $payment_id = $_GET['payment_id'];//unique id //hint: find or create payment by payment_id //additional parameters: operator, price, user_share, country if(preg_match("/failed/i", $_GET['status'])) { // mark payment as failed } else { // mark payment successful } // print out the reply echo('OK'); function check_signature($params_array, $secret) { ksort($params_array); $str = ''; foreach ($params_array as $k=>$v) { if($k != 'sig') { $str .= "$k=$v"; } } $str .= $secret; $signature = md5($str); return ($params_array['sig'] == $signature); } ?>Copy to clipboard