first commit

This commit is contained in:
2020-01-11 09:50:39 -05:00
commit dab8d58edb
620 changed files with 355397 additions and 0 deletions
+752
View File
@@ -0,0 +1,752 @@
// Account management toosl
#include "clog.h"
#include "cgi.h"
#include "input.h"
#include "coregrade_api.h"
#include "account.h"
#include "email.h"
#include "safestring.h"
#include <string>
#include "pgsql.h"
#include "pgsql_wrapper.h"
#include "cfg.h"
#include <curl/curl.h>
#define CREATE_BY_EMAIL 1000
#define CREATE_BY_PHONE 2000
struct MemoryStruct {
char *memory;
size_t size;
};
static size_t
WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
size_t realsize = size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct *)userp;
mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1);
if(mem->memory == NULL) {
/* out of memory! */
logfmt( logINFO, "not enough memory (realloc returned NULL)" );
return 0;
}
memcpy(&(mem->memory[mem->size]), contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
return realsize;
}
static const string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
static inline bool is_base64(unsigned char c) {
return (isalnum(c) || (c == '+') || (c == '/'));
}
string base64_decode(string const& encoded_string) {
int in_len = encoded_string.size();
int i = 0;
int j = 0;
int in_ = 0;
unsigned char char_array_4[4], char_array_3[3];
std::string ret;
while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
char_array_4[i++] = encoded_string[in_]; in_++;
if (i ==4) {
for (i = 0; i <4; i++)
char_array_4[i] = base64_chars.find(char_array_4[i]);
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
for (i = 0; (i < 3); i++)
ret += char_array_3[i];
i = 0;
}
}
if (i) {
for (j = i; j <4; j++)
char_array_4[j] = 0;
for (j = 0; j <4; j++)
char_array_4[j] = base64_chars.find(char_array_4[j]);
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
}
return ret;
}
long account_calls(CVars in, CVars &out)
{
logfmt( logINFO, "account_calls()" );
out["result"] = "YES I GET TO BACK END";
long action = REQ_LONG( in, "action", 0, -1);
switch( action )
{
case COREGRADE_ACCOUNT_TESTEMAIL:
break;
case COREGRADE_ACCOUNT_LOGIN:
return LoginCoreGradeAccount( in, out);
break;
case COREGRADE_ACCOUNT_PENDING:
return CreateCoreGradeAccountPending(in, out);
break;
case COREGRADE_ACCOUNT_CREATEACC:
return CreateCoreGradeAccount( in, out);
break;
}
logfmt( logINFO, "/account_calls()" );
return 0;
}
/**************************************************************************************************************************/
long account_session_check(CVars in, CVars out)
{
logfmt( logINFO, "long account_session_check(CVars in, CVars out)" );
long ret = PHP_API_BAD_PARAM;
try {
REQ_STRING (in, "sessionid", 4, 40, "(.*)");
if (load_db_record( out, "SELECT uid FROM members_session WHERE sessionid='%s'", in["sessionid"].c_str())>0) {
if (SessionCheck(out["uid"].Long(), in["sessionid"].c_str(), 0)>0) {
out["status"] = "Session valid";
ret = PHP_API_OK;
}
}
} catch (bad_parameter) {
out["status"] = "Invalid session ID";
}
logfmt( logINFO, "/long account_session_check(CVars in, CVars out)" );
return ret;
}
/**************************************************************************************************************************/
long SessionCheck(long uid, const char *sessionid, int create )
{
logfmt( logINFO, "long SessionCheck(long uid, const char *sessionid, int create )" );
// Sanity check
if (uid<1 || sessionid==NULL || strlen(sessionid)<4) {
return -1L; // Invalif parameters
}
// Clean old sessions
pgsql_exec("DELETE FROM members_session WHERE uid=%ld AND updated < (now() - interval '15 minutes')", uid);
// Update/check existing session
if (create==0 && pgsql_exec("UPDATE members_session SET updated=NOW() WHERE uid=%ld AND sessionid='%s'", uid, sessionid)>0) {
return 1L; // Session updated
}
if (create>0) {
// Check session i?
const PGresult *res = pgsql_query("SELECT * FROM members_session WHERE uid=%ld AND sessionid<>'%s'", uid, sessionid);
if (res!=NULL && pgsql_num_rows(res)>0) {
return -2L; // Active sessions found
}
CVars sess; // Do we have the same session already?
if (load_db_record( sess, "SELECT * FROM members_session WHERE uid=%lu AND sessionid='%s'", uid, sessionid)>0) {
pgsql_exec("UPDATE members_session SET updated=NOW() WHERE uid=%ld AND sessionid='%s'", uid, sessionid);
return sess["id"].Long();
}
// Create a new session
sess["uid"] = uid; sess["uid"].set_valid(true);
sess["sessionid"] = sessionid; sess["sessionid"].set_valid(true);
long sid = insert_db_record( DBS_VALID, "members_session", "members_session_id_seq", sess );
if (sid>0) {
return sid; // New session created
}
return -3L; // Failed to create new session
}
logfmt( logINFO, "/long SessionCheck(long uid, const char *sessionid, int create )" );
return 0L; // No route
}
long LoginCoreGradeAccount( CVars in, CVars &out )
{
long ret = PHP_API_BAD_PARAM;
logfmt( logINFO, "LoginCoreGradeAccount()" );
REQ_STRING (in, "username", 5, 49, "(.*)");
REQ_STRING (in, "password", 5, 49, "(.*)");
REQ_STRING (in, "sessionid", 4, 40, "(.*)");
OPTIONAL( in, "loc" ) REQ_STRING (in, "loc", 3, 15, "(.*)");
ret = load_db_record( out, "SELECT *,id AS member_id FROM members WHERE status=1 AND LOWER(username)=LOWER('%s') AND password= md5('%s')", in["username"].c_str(), in["password"].c_str() );
if (ret) {
if (SessionCheck(out["id"].Long(), in["sessionid"].c_str(), 1)>0) {
out["stauts"] = "OK";
ret = PHP_API_OK;
} else {
out["status"] = "Session check failed";
}
} else {
out["status"] = "Invalid username and/or password";
}
logfmt( logINFO, "/LoginCoreGradeAccount()" );
return ret;
}
long CreateCoreGradeAccountPending(CVars in, CVars &out)
{
long ret = PHP_API_BAD_PARAM;
out =in;
/*
CREATE TABLE members_pending (
id SERIAL,
username VARCHAR(15) UNIQUE NOT NULL,
firstname VARCHAR(50),
lastname VARCHAR(50),
email VARCHAR(50),
phone VARCHAR(25),
status integer DEFAULT 1,
added timestamp without time zone DEFAULT now(),
verify_link VARCHAR(100),
expire timestamp without time zone DEFAULT now() +'30 days'
);
ALTER TABLE ONLY members_pending
ADD CONSTRAINT members_pending_id_key UNIQUE (id);
*/
REQ_STRING (in, "username", 5, 49, "(.*)");
REQ_STRING (in, "firstname", 2, 49, "(.*)");
REQ_STRING (in, "lastname", 2, 49, "(.*)");
REQ_STRING (in, "email", 5, 49, "(.*)");
OPTIONAL( in, "phone" ) REQ_STRING (in, "phone", 3, 15, "(.*)");
OPTIONAL( in, "loc" ) REQ_STRING (in, "loc", 3, 15, "(.*)");
int r1,r2,r3;
char verify_link[100];
srand(time(NULL));
r1 = abs( rand()*100000000);
srand(time(NULL));
r2 = abs( rand()*r1);
srand(time(NULL));
r3 = abs( rand()*r2);
sprintf( verify_link, "RS-%09lu-%08lu-%08lu", r1, r2, r3 );
CVars x;
x["username"] = in["username"]; x["username"].set_valid( true );
x["firstname"] = in["firstname"]; x["firstname"].set_valid( true );
x["lastname"] = in["lastname"]; x["lastname"].set_valid( true );
x["email"] = in["email"]; x["email"].set_valid( true );
x["phone"] = in["phone"]; x["phone"].set_valid( true );
x["loc"] = in["loc"]; x["loc"].set_valid( true );
x["verify_link"] = verify_link; x["verify_link"].set_valid( true );
ret = insert_db_record( DBS_VALID, "members_pending", "members_pending_id_seq", x );
if ( ret > 0 )
{ out["pending_id"] = ret; out["pending_id"].set_valid( true );
x["pending_id"] = ret; x["pending_id"].set_valid( true );
AccountPendingMail(x);
}
return ret;
}
//******************************************************************************
long CreateCoreGradeAccount(CVars in, CVars &out)
{
logfmt( logINFO, "CreateCoreGradeAccount()" );
long ret = PHP_API_BAD_PARAM;
REQ_STRING (in, "verify_link", 2, 120, "(.*)");
REQ_STRING (in, "pass1", 3, 15, "(.*)");
OPTIONAL( in, "loc" ) REQ_STRING (in, "loc", 3, 15, "(.*)");
try {
long lonkF = load_db_record( out, "SELECT *,id AS pending_id FROM members_pending WHERE verify_link ='%s' AND expire > now() LIMIT 1", in["verify_link"].c_str() );
if( lonkF )
{
out["status"] = "prepare to create account";
CVars x;
x["username"] = out["username"]; x["username"].set_valid( true );
x["firstname"] = out["firstname"]; x["firstname"].set_valid( true );
x["lastname"] = out["lastname"]; x["lastname"].set_valid( true );
x["email"] = out["email"]; x["email"].set_valid( true );
x["phone"] = out["phone"]; x["phone"].set_valid( true );
x["loc"] = in["loc"]; x["loc"].set_valid( true );
x["password"] = "1234567890"; x["password"].set_valid( true );
ret = insert_db_record( DBS_VALID, "members", "members_id_seq", x );
if ( ret > 0 )
{ out["member_id"] = ret; out["member_id"].set_valid( true );
x["member_id"] = ret; x["member_id"].set_valid( true );
pgsql_query("UPDATE members SET password = md5('%s') WHERE id = %lu",in["pass1"].c_str(),ret);
pgsql_query("UPDATE members_pending SET status = 5 WHERE id = %lu",out["pending_id"].Long());
AccountPendingMail(x);
}
}
} catch(bad_parameter) {
out["status"] = "ERROR";
}
logfmt( logINFO, "/CreateCoreGradeAccount()" );
return ret;
}
//******************************************************************************
long AddMobileTopuNumber(CVars in, CVars &out)
{
long ret = -1;
long pin = REQ_LONG( in, "pin", 1, -1 );
long customer_id = REQ_LONG( in, "customer_id", 1, -1 );
OPTIONAL( in, "loc" ) REQ_STRING (in, "loc", 3, 15, "(.*)");
REQ_STRING (in, "seller_number", 10, 11, "(.*)");
CVars x;
x["pin"] = in["pin"]; x["pin"].set_valid( true );
x["customer_id"] = in["customer_id"]; x["customer_id"].set_valid( true );
x["loc"] = in["loc"]; x["loc"].set_valid( true );
x["seller_number"] = in["seller_number"]; x["seller_number"].set_valid( true );
ret = insert_db_record( DBS_VALID, "mobile_sales_auth", "mobile_sales_auth_id_seq", x );
out["status"] = ret;
out["auth_id"] = ret;
return ret;
}
//******************************************************************************
long InitiateAddCustomerBalance(CVars in, CVars &out)
{
logfmt( logINFO, "AddCustomerBalance()" );
long ret = PHP_API_BAD_PARAM;
try {
// REQ_LONG( in, "whattodo", 1, -1 );
} catch(bad_parameter) {
out["status"] = "ERROR";
}
logfmt( logINFO, "/AddCustomerBalance()" );
return ret;
}
long CompleteAddCustomerBalance(CVars in, CVars &out)
{
logfmt( logINFO, "AddCustomerBalance()" );
long ret = PHP_API_BAD_PARAM;
try {
// REQ_LONG( in, "whattodo", 1, -1 );
} catch(bad_parameter) {
out["status"] = "ERROR";
}
logfmt( logINFO, "/AddCustomerBalance()" );
return ret;
}
//******************************************************************************
//******************************************************************************
long VerifyEmailCoreGradeAccount(CVars in, CVars &out)
{
logfmt( logINFO, "VerifyEmailCoreGradeAccount()" );
long ret = PHP_API_BAD_PARAM;
try {
long account_id = REQ_LONG( in, "account_id", 1, -1 );
// ret = load_db_record( out, "SELECT * FROM members WHERE id = %lu", account_id );
} catch(bad_parameter) {
out["status"] = "ERROR";
}
logfmt( logINFO, "/VerifyEmailCoreGradeAccount()" );
return ret;
}
//******************************************************************************
long VerifyPhoneCoreGradeAccount(CVars in, CVars &out)
{
logfmt( logINFO, "VerifyPhoneCoreGradeAccount()" );
long ret = PHP_API_BAD_PARAM;
try {
// REQ_LONG( in, "whattodo", 1, -1 );
} catch(bad_parameter) {
out["status"] = "ERROR";
}
logfmt( logINFO, "/VerifyPhoneCoreGradeAccount()" );
return ret;
}
//******************************************************************************
long EditProfileCoreGradeAccount(CVars in, CVars &out)
{
logfmt( logINFO, "EditProfileCoreGradeAccount()" );
long ret = PHP_API_BAD_PARAM;
try {
long account_id = REQ_LONG( in, "account_id", 1, -1 );
REQ_STRING (in, "State", 2, 20, "(.*)");
REQ_STRING (in, "Zipcode", 3, 15, "(.*)");
REQ_STRING (in, "Country", 2, 5, "(.*)");
} catch(bad_parameter) {
out["status"] = "ERROR";
}
logfmt( logINFO, "/EditProfileCoreGradeAccount()" );
return ret;
}
//******************************************************************************
long LoadProfileCoreGradeAccount(CVars in, CVars &out)
{
logfmt( logINFO, "LoadProfileCoreGradeAccount()" );
long ret = PHP_API_BAD_PARAM;
try {
long account_id = REQ_LONG( in, "account_id", 1, -1 );
const PGresult* res = pgsql_query("SELECT * FROM members WHERE id = %lu",account_id );
if (res && pgsql_num_rows(res)>0) { }
} catch(bad_parameter) {
out["status"] = "ERROR";
}
logfmt( logINFO, "/LoadProfileCoreGradeAccount()" );
return ret;
}
//******************************************************************************
//*****************************************************************************/
long ETSL_configure(CVars in, CVars &out)
{
logfmt( logINFO, "long ETSL_configure(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
out["etisalat_endpoint"] = "http://etisalat.service.chiefsoft.com/etisalat_payquic.php";
ret = PHP_API_OK;
} catch (bad_parameter) {
out["status"] = "Bad parameter";
} catch ( ... ) {
out["status"] = "Unhandled exception in INTW_configure";
}
logfmt( logINFO, "/long ETSL_configure(CVars in, CVars &out)");
return ret;
}
long DeliverMobilseEtisalat(CVars in, CVars &out)
{
logfmt( logINFO, "long INTW_sendBillPaymentAdvice(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
int customerId = REQ_LONG( in, "customerid", 1, -1 );
int paymentItemId = REQ_LONG( in, "paymentitemid", 1, -1 );
int amount = REQ_LONG( in, "amount", 0, -1 );
REQ_STRING( in, "customermobile", 5, 15, "(.*)");
OPTIONAL (in, "customeremail") REQ_STRING( in, "customeremail", 1, 100, "(.*)");
OPTIONAL (in, "order_id") REQ_STRING( in, "order_id", 1, 25, "(.*)");
char CustomerMobile[15];
char CustomerEmail[100];
sprintf( CustomerEmail, "%s", in["customeremail"].c_str() );
sprintf( CustomerMobile, "%s", in["customermobile"].c_str() );
//topalert = "sales@payquic.com";
out["topalert"] = CfgReadChar("transnotif.topalert");
sprintf( CustomerEmail, "%s", out["topalert"].c_str() );
CVars customer; // Load customer
ret = load_db_record( customer, "SELECT email,firstname,lastname FROM customer WHERE status=1 AND id = %lu", customerId );
if (ret<1L) {
throw new bad_parameter(out, "customerid");
}
CVars paymentitem; // Load payment item
ret = load_db_record( paymentitem, "SELECT id,billerid,billername,name,amount,paymentcode FROM interswitch_biller_payment_items WHERE gid = %lu", paymentItemId);
if (ret<1L) {
out["advice"] = "PaymentID not found or not valid !!!";
throw new bad_parameter(out, "paymentitemid");
}
// Check amount
if (amount<1L) {
amount = paymentitem["amount"].Long();
}
// Create record
CVars advice;
advice["customerid"] = customerId; advice["customerid"].set_valid(true);
advice["billerid"] = paymentitem["billerid"]; advice["billerid"].set_valid(true);
advice["billerpaymentitemgid"] = paymentItemId; advice["billerpaymentitemgid"].set_valid(true);
advice["amount"] = amount; advice["amount"].set_valid(true);
advice["paymentcode"] = paymentitem["paymentcode"]; advice["paymentcode"].set_valid(true);
advice["order_id"] = in["order_id"]; advice["order_id"].set_valid(true);
advice["customeremail"] = in["customeremail"]; advice["customeremail"].set_valid(true);
advice["customermobile"] = in["customermobile"]; advice["customermobile"].set_valid(true);
out["bill_payment_advice_id"] = insert_db_record( DBS_VALID, "interswitch_bill_payment_advice", "interswitch_bill_payment_advice_id_seq", advice );
if (out["bill_payment_advice_id"].Long()<1L) {
//throw new runtime_error("Failed to create interswitch bill payment advice record");
return PHP_API_BAD_PARAM;
}
// Initiate interswitch session
CVars setup;
ETSL_configure(in, setup);
CVars transaction;
transaction["detail_id"] = out["bill_payment_advice_id"]; transaction["detail_id"].set_valid(true);
transaction["type"] = 1L; /* SendBillPaymentAdvice */ transaction["type"].set_valid(true);
out["transaction_id"] = insert_db_record( DBS_VALID, "interswitch_transaction", "interswitch_transaction_id_seq", transaction );
if (out["transaction_id"].Long()<1L) {
// throw new runtime_error("Failed to create interswitch transaction record");
return PHP_API_BAD_PARAM;
}
char uniqueRef[20];
memset(uniqueRef, 0, 20);
// TransferCode - RequestReference - UniqueRef => request prefix for terminal owner + ID
sprintf( uniqueRef, "ETSL%08lu", out["transaction_id"].Long() );
//sprintf( uniqueRef, "%s%09s", setup["interswitch_pfix"].c_str(), out["transaction_id"].c_str() );
transaction["transfer_code"] = uniqueRef; transaction["transfer_code"].set_valid(true);
CVars cxc;
cxc["transfer_code"] = transaction["transfer_code"];
cxc["transfer_code"].set_valid(true);
update_db_record( DBS_VALID, "interswitch_transaction", cxc, out["transaction_id"].Long());
logfmt( logINFO, "Here -> 1");
logfmt( logINFO, "SENDING TRANSACTION - setup[interswitch_tid].c_str() ->%s",setup["interswitch_tid"].c_str());
// Prepare call
const int statusSize = 1024;
char status[statusSize];
char transactionRef[statusSize];
memset(status, 0, statusSize); // Clear?
memset(transactionRef, 0, statusSize); // Clear?
char xtid[12];
sprintf( xtid, "%s", setup["interswitch_tid"].c_str() );
logfmt( logINFO, "SENDING PAQUIC ETISALAT TRANSACTION->%s",xtid);
out["ResponseCode"] = "99999";
long ret1 = GateDeliverMobilseEtisalat(in,out);
if ( out["statusCode"].Long() == 0 && out["errorCode"].Long() == 0 )
{
ret = 90000L;
//'message' => '<?xml version="1.0" encoding="utf-8"?><result><statusCode>0</statusCode><errorCode>0</errorCode><errorDescription>Successful Transaction 0305055755074473</errorDescription><instanceId>0305055755074473</instanceId></result>'
try
{
CVars txt;
txt["responsecode"] = "90000"; txt["responsecode"].set_valid(true);
txt["transactionref"] = out["errorDescription"]; txt["transactionref"].set_valid(true);
update_db_record( DBS_VALID, "interswitch_transaction", txt, out["transaction_id"].Long());
}
catch ( ... ) { out["status"] = "I see no good response from interswitch"; }
CVars fr0;
fr0["status"] = "5"; fr0["status"].set_valid(true);
update_db_record( DBS_VALID, "interswitch_bill_payment_advice", fr0, out["bill_payment_advice_id"].Long());
}
else
{
try
{
CVars txt0;
txt0["responsecode"] = "99999"; txt0["responsecode"].set_valid(true);
txt0["transactionref"] = out["errorDescription"]; txt0["transactionref"].set_valid(true);
update_db_record( DBS_VALID, "interswitch_transaction", txt0, out["transaction_id"].Long());
}
catch ( ... ) { out["status"] = "I see no good response from interswitch"; }
CVars fr1;
fr1["status"] = "7"; fr1["status"].set_valid(true);
update_db_record( DBS_VALID, "interswitch_bill_payment_advice", fr1, out["bill_payment_advice_id"].Long());
}
out["statusCode"].set_valid( true );
} catch (bad_parameter) {
out["status"] = "Incorrect parameter";
ret = PHP_API_BAD_PARAM;
} catch ( ... ) {
out["status"] = "Unhandled exception in INTW_sendBillPaymentAdvice";
}
logfmt( logINFO, "/long INTW_sendBillPaymentAdvice(CVars in, CVars &out)");
return ret;
}
long GateDeliverMobilseEtisalat(CVars in, CVars &out)
{
logfmt( logINFO, "long DeliverMobilseEtisalat(CVars in, CVars &out)" );
long ret = PHP_API_BAD_PARAM;
CURL *curl;
CURLcode res;
struct MemoryStruct chunk;
chunk.memory = (char*)malloc(1); /* will be grown as needed by the realloc above */
chunk.size = 0; /* no data at this point */
curl_global_init(CURL_GLOBAL_ALL);
/* get a curl handle */
curl = curl_easy_init();
if(curl) {
// Prepare data
string data = "";
CVars::iterator i;
int j = 0; // Will limit to 200 variables
for ( i =in.begin(); i != in.end() && j<200 ; i++ ) {
logfmt( logINFO, "IN: %s=%s", i->first.c_str(), i->second.c_str() );
if (j>0) {
data += "&";
}
data += i->first.c_str();
data += "=";
data += i->second.c_str();
j++;
}
logfmt( logINFO, "DATA: %s", data.c_str());
curl_easy_setopt(curl, CURLOPT_URL, "http://etisalat.service.chiefsoft.com/etisalat_payquic.php");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
// Error
out["status"] = curl_easy_strerror(res);
logfmt( logINFO, "ERROR: %s", out["status"].c_str());
ret = PHP_API_BAD_PARAM;
} else {
logfmt( logINFO, "%lu bytes retrieved\n", (long)chunk.size);
data = (const char *)chunk.memory;
istringstream buffer(data);
string temp, key, val; size_t found;
while (std::getline(buffer, temp)) {
logfmt( logINFO, "line: %s", temp.c_str());
found = temp.find_first_of("=");
key = temp.substr(0, found);
val = temp.substr(found+1);
out[key] = base64_decode(val);
logfmt( logINFO, "'%s' => '%s'", key.c_str(), out[key].c_str() );
}
ret = PHP_API_OK;
}
curl_easy_cleanup(curl);
if(chunk.memory) {
free(chunk.memory);
}
}
curl_global_cleanup();
logfmt( logINFO, "/long DeliverMobilseEtisalat(CVars in, CVars &out)" );
return ret;
}
/*
void TeleSignAddJob(const char *CustomerId, const char *AutheticationId, const char *CountryCode, const char *PhoneNumber, const char *PIN) {
// I make sure that headerlist is erased before rebuilding it with the soap function
curl_slist_free_all(headerlist);
headerlist = curl_slist_append(headerlist, "Host: www.telesign.com");
headerlist = curl_slist_append(headerlist, "Content-Type: text/xml");
headerlist = curl_slist_append(headerlist, "SOAPAction: \"https://www.telesign.com/api/RequestCALL\"");
sprintf(TeleSignSoapReq, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\
<soap:Body>\
<RequestCALL xmlns=\"https://www.telesign.com/api/\">\
<CustomerID>%s</CustomerID>\
<AuthenticationID>%s</AuthenticationID>\
<CountryCode>%s</CountryCode>\
<PhoneNumber>%s</PhoneNumber>\
<VerificationCode>%s</VerificationCode>\
<RedialCount>1</RedialCount>\
</RequestCALL>\
</soap:Body>\
</soap:Envelope>", CustomerId, AutheticationId, CountryCode, PhoneNumber, PIN);
//FILE_LOG(logINFO) << TeleSignSoapReq;
curl_easy_setopt(ch, CURLOPT_POSTFIELDS, TeleSignSoapReq);
curl_easy_setopt(ch, CURLOPT_HTTPHEADER, headerlist);
curl_easy_perform(ch);
}
*/
@@ -0,0 +1,925 @@
#include "coregrade_api_main.h"
#include "coregrade_api.h"
#include "clog.h"
#include "input.h"
#include "interswitch_sendmoney.h"
#include "pgsql.h"
#include "email.h"
#include "account.h"
#include "groups.h"
#include "topups.h"
#include "storeface.h"
#include "pgsql_wrapper.h"
//extern CSQL *sql;
long coregrade_api_main(CVars in, CVars &out)
{
logfmt( logINFO, "SystemStatus()09-09-********~************");
// SystemStatus();
CVars recipient;
CVars cust;
CVars xx;
long maxAirtime = 0;
int r;
char ptid[180];
char xtid[12];
//int channel_code = 3;
logfmt( logINFO, "long coregrade_api_main(CVars in, CVars &out)");
long retval = PHP_API_BAD_PARAM;
long action = REQ_LONG( in, "action", 0, -1);
if ( action >= COREGRADE_ACCOUNT_START && action <= COREGRADE_ACCOUNT_END )
{
logfmt( logINFO, "account calls");
return account_calls(in, out);
}
if ( action >= COREGRADE_GROUP_START && action <= COREGRADE_GROUP_END )
{
logfmt( logINFO, "groups calls");
return groups_calls(in, out);
}
switch (action) {
default: out["status"] = "Unknown action";
}
switch( action )
{
case COREGRADE_LOG_ENTRY:
out = in;
insert_db_record(DBS_VALID,"raw_message","raw_message_id_seq",in);
break;
case COREGRADE_SESSION_CHECK:
retval = account_session_check(in, out);
break;
case 1000000055:
//bonus_balance.mailfile
return CustomerBalanceBonusEmail( in );
break;
case COREGRADE_ADD_MOBILE_TOPUPNUM:
return AddMobileTopuNumber(in, out);
break;
case COREGRADE_PROMO_CALL:
REQ_LONG( in, "pmode", 1, -1 );
REQ_LONG( in, "customer_id", 1, -1 );
REQ_LONG( in, "pro_id", 1, -1 );
if ( load_db_record( out, "SELECT p.id,c.email,c.firstname,c.lastname FROM promotion p LEFT JOIN customer c ON c.id=p.customer_id WHERE p.promo%lu IS NULL AND p.id=%lu",in["pmode"].Long(), in["pro_id"].Long() ) )
{
out["pmode"] = in["pmode"]; out["pmode"].set_valid(true);
pgsql_exec( "UPDATE promotion SET promo%lu = now() WHERE id = %lu ",out["pmode"].Long(),in["pro_id"].Long());
SendPromoEmail(out);
out["status"] ="I passed this point";
}
break;
case COREGRADE_PAYPAL_IPNMSG:
/*
CREATE TABLE ipn_message (
id serial NOT NULL,
payment_date TIMESTAMP,
mc_currency character varying(5) ,
last_name character varying(100) ,
first_name character varying(100),
payer_email character varying(100),
receiver_email character varying(100),
payer_id character varying(50),
receiver_id character varying(50),
txn_id character varying(50),
item_number character varying(25),
item_name character varying(100),
payment_gross float,
mc_gross float,
ipn_track_id character varying(100),
status integer DEFAULT 1,
added TIMESTAMP DEFAULT NOW()
);
*/
out["ipn_id"] = "0";
if ( load_db_record( out, "SELECT id AS ipn_id FROM ipn_message WHERE txn_id = '%s'",in["txn_id"].c_str() ) )
{
out["status"] ="I passed this point";
}
else
{
}
if ( out["ipn_id"].Long() == 0 )
{
xx["payment_date"] =in["payment_date"]; xx["payment_date"].set_valid(true);
xx["mc_currency"] =in["mc_currency"]; xx["mc_currency"].set_valid(true);
xx["last_name"] =in["last_name"]; xx["last_name"].set_valid(true);
xx["first_name"] =in["first_name"]; xx["first_name"].set_valid(true);
xx["payer_email"] =in["payer_email"]; xx["payer_email"].set_valid(true);
xx["receiver_email"] =in["receiver_email"]; xx["receiver_email"].set_valid(true);
xx["payer_id"] =in["payer_id"]; xx["payer_id"].set_valid(true);
xx["receiver_id"] =in["receiver_id"]; xx["receiver_id"].set_valid(true);
xx["txn_id"] =in["txn_id"]; xx["txn_id"].set_valid(true);
xx["item_number"] =in["item_number"]; xx["item_number"].set_valid(true);
xx["item_name"] =in["item_name"]; xx["item_name"].set_valid(true);
xx["payment_gross"] =in["payment_gross"]; xx["payment_gross"].set_valid(true);
xx["mc_gross"] =in["mc_gross"]; xx["mc_gross"].set_valid(true);
xx["ipn_track_id"] =in["ipn_track_id"]; xx["ipn_track_id"].set_valid(true);
insert_db_record(DBS_VALID,"ipn_message","ipn_message_id_seq",xx);
}
return 0;
break;
case COREGRADE_COMPLETE_ADDMONEY:
REQ_LONG( in, "request_id", 1, -1 );
REQ_LONG( in, "customer_id", 1, -1 );
REQ_LONG( in, "csr_id2", 1, -1 );
REQ_LONG( in, "status", 1, -1 );
REQ_STRING( in, "ip2", 1, 20, "(.*)");
if ( in["status"] == APPROVED_BALANCE )
{
if ( load_db_record( out, " SELECT c.*,c.amount AS prop_amount,cc.balance AS curr_balance FROM customer_addbalance c LEFT JOIN customer cc ON cc.id=c.customer_id WHERE c.status = 1 AND c.id = %lu AND c.customer_id = %lu",in["request_id"].Long(),in["customer_id"].Long() ) )
{
pgsql_exec( "UPDATE customer SET balance = balance + %lu WHERE id = %lu ",out["prop_amount"].Long(),out["customer_id"].Long());
load_db_record( out, "SELECT balance AS fin_balance FROM customer WHERE id=%lu",out["customer_id"].Long() ) ;
pgsql_exec( "UPDATE customer_addbalance SET status=%d,completed= now(),ip2='%s',csr_id2=%lu,cur_balance =%lu,fin_balance= %lu WHERE id = %lu ",APPROVED_BALANCE, in["ip2"].c_str(),in["csr_id2"].Long(),out["curr_balance"].Long(),out["fin_balance"].Long(),in["request_id"].Long());
out["result"] ="Completed";
SendBalanceCompleteAlert(in);
}
else{
out["result"] ="Invalid call for approval";
}
}
if ( in["status"] == DISAPROVE_BALANCE )
{
}
/*
$inx["request_id"] = $request_id;
$inx["customer_id"] = $customer_id;
$inx["csr_id2"] = $csr_id2;
$inx["status"] = APPROVED_BALANCE;
$inx["action"] = COREGRADE_COMPLETE_ADDMONEY;
*/
break;
case COREGRADE_START_ADDMONEY:
REQ_LONG( in, "customer_id", 1, -1 );
REQ_LONG( in, "csr_id", 1, -1 );
REQ_LONG( in, "amount", 1, -1 );
REQ_STRING( in, "ip", 1, 20, "(.*)");
xx["customer_id"] =in["customer_id"]; xx["customer_id"].set_valid(true);
xx["csr_id"] =in["csr_id"]; xx["csr_id"].set_valid(true);
xx["amount"] =in["amount"]; xx["amount"].set_valid(true);
xx["ip"] =in["ip"]; xx["ip"].set_valid(true);
out["request_id"] = insert_db_record( DBS_VALID, "customer_addbalance", "customer_addbalance_id_seq", xx );
if ( out["request_id"].Long() > 0 )
{
in["request_id"] = out["request_id"]; in["request_id"].set_valid( true );
SendBalanceRequestAlert(in);
}
break;
case COREGRADE_COMPLETE_PASSWORDRESET:
REQ_STRING( in, "reset_link", 1, 100, "(.*)");
REQ_STRING( in, "newpass", 1, 20, "(.*)");
if ( load_db_record( out, "SELECT l.id AS lostpass_id,c.firstname,c.lastname,c.email,l.customer_id,c.username FROM lostpass l LEFT JOIN customer c ON c.id = l.customer_id WHERE l.reset_link = '%s' AND l.status IN (1,3)",in["reset_link"].c_str() ) )
{
pgsql_exec( "UPDATE lostpass SET status = 5 WHERE status IN (1,3) AND customer_id=%lu AND id = %lu ",out["customer_id"].Long(),out["lostpass_id"].Long());
pgsql_exec( "UPDATE customer SET pass =md5('%s') WHERE id = %lu ",in["newpass"].c_str(),out["customer_id"].Long());
//complete_losspass.mailfile
CompletePassResetEmail(out);
}
else
{
out["status_message"] = "Pass Reset Failed";
}
break;
case COREGRADE_START_PASSWORDRESET:
REQ_STRING( in, "email", 1, 100, "(.*)");
if ( load_db_record( out, "SELECT id as customer_id,* FROM customer WHERE LOWER(email)=LOWER('%s') AND status=1",in["email"].c_str() ) )
{
xx["customer_id"] = out["id"]; xx["customer_id"].set_valid(true);
srand(time(NULL));
r = abs( rand()*100000000);
sprintf( ptid, "RS-%09lu-%08lu", out["id"].Long(), r );
xx["reset_link"] =ptid; xx["reset_link"].set_valid(true);
xx["loc"] = in["loc"]; xx["loc"].set_valid(true);
out["reset_id"] = insert_db_record( DBS_VALID, "lostpass", "lostpass_id_seq", xx );
if ( out["reset_id"].Long() > 0 )
{
pgsql_exec( "UPDATE lostpass SET status = 777 WHERE status IN (1,2,3) AND customer_id=%lu AND id <> %lu ",out["customer_id"].Long(),out["reset_id"].Long());
pgsql_exec( "UPDATE lostpass SET expire = now() + '15 minutes' WHERE id=%lu ",out["reset_id"].Long());
StartPassResetEmail(out);
}
}
break;
case COREGRADE_BULKTOPUP_ORDER:
return CreateBulkTopupBatch(in, out);
break;
case COREGRADE_BULKTOPUP_ITEM:
return AddBulkTopupBatchItem(in, out);
break;
case COREGRADE_BULKTOPUP_ITEMUPDATE:
return UpdateBulkTopupItem(in, out);
break;
case COREGRADE_BULKTOPUP_DELIVER:
return DeliverBulkTopupItem(in, out);
break;
case COREGRADE_CREATE_USER_ACCOUNT:
out=in;
REQ_STRING( in, "firstname", 1, 50, "(.*)");
REQ_STRING( in, "lastname", 1, 50, "(.*)");
REQ_STRING( in, "email", 1, 100, "(.*)");
REQ_STRING( in, "pass", 5, 12, "(.*)");
REQ_STRING( in, "username", 1, 100, "(.*)");
OPTIONAL( in, "country" )
REQ_STRING( in, "country", 1, 4, "(.*)" );
cust["firstname"] = in["firstname"]; cust["firstname"].set_valid(true);
cust["lastname"] = in["lastname"]; cust["lastname"].set_valid(true);
cust["email"] = in["email"]; cust["email"].set_valid(true);
cust["pass"] = in["pass"]; cust["pass"].set_valid(true);
cust["username"] = in["username"]; cust["username"].set_valid(true);
cust["country"] = in["country"]; cust["country"].set_valid(true);
out["user_id"] = insert_db_record( DBS_VALID, "customer", "customer_id_seq", cust );
if (out["user_id"].Long() > 0 )
{
pgsql_exec( "UPDATE customer SET pass=md5('%s') WHERE id=%lu AND username='%s'",cust["pass"].c_str(),out["user_id"].Long(),cust["username"].c_str());
SendAccountCreateAlert(out["user_id"].Long());
CustomerEmailWelcome(out);
}
break;
//#define COREGRADE_BALANCE_TOPUP_ORDER 800020
//#define COREGRADE_BALANCE_TOPUP_PURCHASE 800030
case COREGRADE_BALANCE_TOPUP_PAYMENT:
REQ_STRING( in, "orderid", 1, 50, "(.*)");
// this is used to send email about payment only
return CustomerAirSalePayment(in);
break;
case COREGRADE_BALANCE_TOPUP_ORDER:
REQ_LONG( in, "amount", 1, -1 );
REQ_LONG( in, "customer_id", 1, -1 );
// CustomerAirSalePayment(in);
/*
CREATE TABLE trans_balance_topup (
id serial NOT NULL,
customer_id INT NOT NULL references customer(id),
orderid character varying(25) NOT NULL,
description VARCHAR(100),
amount INT DEFAULT 0,
txnref character varying(25),
payref character varying(200),
retref character varying(50),
status integer DEFAULT 1,
added timestamp without time zone DEFAULT now(),
recipient_id INT NOT NULL references customer(id),
completed timestamp without time zone DEFAULT NULL,
appramt integer DEFAULT 0,
rspcode character varying(10)
);
*/
srand(time(NULL));
r = abs( rand()*100000000);
out["orderid"] ="";
cust["customer_id"] = in["customer_id"]; cust["customer_id"].set_valid(true);
cust["amount"] = in["amount"]; cust["amount"].set_valid(true);
cust["orderid"] = r; cust["orderid"].set_valid(true);
cust["recipient_id"] = in["customer_id"]; cust["recipient_id"].set_valid(true);
out["order_id"] = insert_db_record( DBS_VALID, "trans_balance_topup", "trans_balance_topup_id_seq", cust );
if (out["order_id"].Long() > 0 )
{
sprintf( xtid, "7%08lu", out["order_id"].Long() );
xx["orderid"] = xtid;
pgsql_exec( "UPDATE trans_balance_topup SET orderid ='%s',recipient_id=%lu WHERE id=%lu AND customer_id = %lu ",xtid,in["customer_id"].Long(),out["order_id"].Long(),in["customer_id"].Long());
out["orderid"] = xtid;
}
else
{
out["orderid"] = "";
}
out["balanceorderid"] = xtid; //"AMEYE000000011";
break;
case COREGRADE_BALANCE_TOPUP_PURCHASE:
REQ_STRING( in, "orderid", 1, 50, "(.*)");
if ( load_db_record( out, "SELECT id AS trans_not_id, * FROM trans_balance_topup WHERE orderid='%s' AND resp='00' AND completed IS NULL",in["orderid"].c_str() ) )
{
if ( out["amount"].Long()*100 == out["appramt"].Long() )
{
in["customer_id"] = out["customer_id"]; in["customer_id"].set_valid(true);
// find customer
if ( load_db_record( out, "SELECT balance FROM customer WHERE id = %lu ",in["customer_id"].Long() ) )
{
/*
CREATE TABLE balance_topup (
id serial NOT NULL,
customer_id INT NOT NULL references customer(id),
orderid character varying(25) NOT NULL,
amount INT DEFAULT 0,
curr_balance INT DEFAULT 0,
final_balance INT DEFAULT 0,
status integer DEFAULT 1,
added timestamp without time zone DEFAULT now(),
completed timestamp without time zone DEFAULT NULL
);
*/
xx["orderid"] = in["orderid"]; xx["orderid"].set_valid(true);
xx["customer_id"] = out["customer_id"]; xx["customer_id"].set_valid(true);
xx["curr_balance"] = out["balance"]; xx["curr_balance"].set_valid(true);
xx["amount"] = out["appramt"]; xx["amount"].set_valid(true);
out["topup_id"] = insert_db_record( DBS_VALID, "balance_topup", "balance_topup_id_seq", xx );
//--------------------------------------------------
pgsql_exec( "UPDATE customer SET balance = balance + %lu WHERE id=%lu ",out["appramt"].Long(),in["customer_id"].Long());
//--------------------------------------------------
load_db_record( out, "SELECT balance AS final_balance FROM customer WHERE id = %lu ",in["customer_id"].Long() );
pgsql_exec( "UPDATE balance_topup SET final_balance = %lu, completed = now() WHERE id=%lu ",out["final_balance"].Long(),out["topup_id"].Long());
pgsql_exec( "UPDATE trans_balance_topup SET completed = now() WHERE id=%lu ",out["trans_not_id"].Long());
out["status"] = "Completed";
BalanceUpdateAlert( in);
CustomerBalanceEmail( in);
}
else
{
out["status"] = "Error Processing request, customer not found";
}
}
else
{ // amount error
out["status"] = "Error Processing request, amount error";
}
}
else
{
out["status"] = "Unable to process or the order was completed";
}
// out["status"] = "Yes we get this in backend";
// BalanceUpdateAlert(out); // contains everythinng
break;
case COREGRADE_TOPUP_ORDER_PURCHASE:
out=in;
REQ_LONG( in, "pmode", 1, -1 );
REQ_LONG( in, "paymentitemid", 1, -1 );
REQ_STRING( in, "orderid", 1, 50, "(.*)");
REQ_LONG( in, "payment_code", 1, -1 );
if ( in["pmode"].Long() == PAY_MODE_BALANCE ) // paying with balance
{
REQ_LONG( in, "customer_id", 1, -1 );
}
out["route_id"] = "0";
out["route_etisalat"] = "0";
if( load_db_record( out,"SELECT id AS route_id FROM airtime_route WHERE payment_code ='%s'",in["payment_code"].c_str() ) )
{
out["route_etisalat"] = "1";
}else{ }
out["status"] = "";
out["status_code"] = "";
if ( load_db_record( out, "SELECT gid AS paymentitemid FROM interswitch_biller_payment_items WHERE paymentcode = '%lu'",in["payment_code"].Long() ) )
{
in["paymentitemid"] = out["paymentitemid"];
in["paymentitemid"].set_valid( true );
}
// ret = load_db_record( paymentitem, "SELECT id,billerid,billername,name,amount,paymentcode FROM interswitch_biller_payment_items WHERE gid = %lu", paymentItemId);
if ( load_db_record( out, "SELECT id AS trans_not_id, * FROM trans_notification WHERE orderid='%s' AND customer_id = %lu AND completed IS NULL",in["orderid"].c_str(),in["customer_id"].Long() ) )
{
in["amount"] = out["amount"].Long()*100;
in["amount"].set_valid( true );
in["customermobile"] = out["recipient_no"];
in["customermobile"].set_valid( true );
in["order_id"] =in["orderid"]; in["order_id"].set_valid( true );
REQ_LONG( in, "amount", 1, -1 );
load_db_record( out, "SELECT value AS max_topup FROM global_settings WHERE name = 'MAXIMUM_TOPUP_KOGO'");
maxAirtime = out["max_topup"].Long();
if ( maxAirtime>=in["amount"].Long() )
{
if ( in["pmode"].Long() == PAY_MODE_BONUS ) // paying with balance
{
if ( load_db_record( out, "SELECT * FROM customer WHERE id = %lu AND bonus_pend = 1",in["customer_id"].Long() ) )
{
//--------------------------------------------------
pgsql_exec( "UPDATE customer SET bonus_pend=3 WHERE id=%lu ",in["customer_id"].Long());
//--------------------------------------------------
// retval = INTW_sendBillPaymentAdvice( in, out );
if ( out["route_etisalat"].Long() > 0 && out["route_id"].Long() > 0 )
{
retval = DeliverMobilseEtisalat( in, out );
out["ResponseCode"] = retval;
}
else
{
retval = INTW_sendBillPaymentAdvice( in, out );
}
if (out["ResponseCode"].Long() == 90000L) {
out["status"] = "Completed";
out["status_code"] = "A0001";
pgsql_exec( "UPDATE trans_notification SET completed = now(),description='Bonus to %s' WHERE id=%lu AND customer_id = %lu ",in["customermobile"].c_str(),out["trans_not_id"].Long(),in["customer_id"].Long());
pgsql_exec( "UPDATE customer SET bonus_pend=5 WHERE id=%lu ",in["customer_id"].Long());
out["email_alert"] = "I am sending Email of Success";
CustomerAirBonus( in);
VirtualAirSaleAlert(out);
}
else
{
//--------------------------------------------------
// pgsql_exec( "UPDATE customer SET balance = balance + %lu WHERE id=%lu ",in["amount"].Long(),in["customer_id"].Long());
//--------------------------------------------------
//VirtualAirSaleAlert(out);
out["email_alert"] = "I am sending Email of Failure";
out["status"] = "Unable to deliver topup";
out["status_code"] = "F0005";
}
}
else
{ // customer not found
out["status"] = "Account not found";
out["status_code"] = "F0003";
}
}
if ( in["pmode"].Long() == PAY_MODE_BALANCE ) // paying with balance
{
if ( load_db_record( out, "SELECT * FROM customer WHERE id = %lu",in["customer_id"].Long() ) )
{
if ( out["balance"].Long() < in["amount"].Long() )
{
out["status"] = "Insufficient Balance for Purchase";
out["status_code"] = "F0004";
}
else
{
//--------------------------------------------------
pgsql_exec( "UPDATE customer SET balance = balance - %lu WHERE id=%lu ",in["amount"].Long(),in["customer_id"].Long());
//--------------------------------------------------
//retval = INTW_sendBillPaymentAdvice( in, out );
if ( out["route_etisalat"].Long() > 0 && out["route_id"].Long() > 0 )
{
retval = DeliverMobilseEtisalat( in, out );
out["ResponseCode"] = retval;
}
else
{
retval = INTW_sendBillPaymentAdvice( in, out );
}
if (out["ResponseCode"].Long() == 90000L) {
out["status"] = "Completed";
out["status_code"] = "A0001";
pgsql_exec( "UPDATE trans_notification SET completed = now() WHERE id=%lu AND customer_id = %lu ",out["trans_not_id"].Long(),in["customer_id"].Long());
out["email_alert"] = "I am sending Email of Success";
CustomerAirSale( in);
VirtualAirSaleAlert(out);
}
else
{
//--------------------------------------------------
pgsql_exec( "UPDATE customer SET balance = balance + %lu WHERE id=%lu ",in["amount"].Long(),in["customer_id"].Long());
//--------------------------------------------------
VirtualAirSaleAlert(out);
out["email_alert"] = "I am sending Email of Failure";
out["status"] = "Unable to deliver topup";
out["status_code"] = "F0005";
}
}
}
else
{ // customer not found
out["status"] = "Account not found";
out["status_code"] = "F0003";
}
}
if ( in["pmode"].Long() == PAY_MODE_CCARD ) // paying with balance
{
/*
$ordd["customer_id"] = $_SESSION["uid"];
$ordd["customerid"] =$_SESSION["uid"];
$in["amount"] = isset($_POST["amount"])?((int)(100*$_POST["amount"])):0;
$in["customeremail"] = $_SESSION["email"];
$in["customermobile"] = GetPostVar('customermobile',''); //"08081009999";
*/
if ( load_db_record( out, "SELECT id AS trans_not_id, * FROM trans_notification WHERE orderid='%s' AND rspcode='00' AND completed IS NULL",in["orderid"].c_str() ) )
{
in["customermobile"] = out["recipient_no"];
in["customermobile"].set_valid( true );
in["amount"] = out["amount"].Long() * 100;
in["amount"].set_valid( true );
in["customer_id"] = out["customer_id"];
in["customer_id"].set_valid( true );
in["customerid"] = out["customer_id"];
in["customerid"].set_valid( true );
//retval = INTW_sendBillPaymentAdvice( in, out );
if ( out["route_etisalat"].Long() > 0 && out["route_id"].Long() > 0 )
{
retval = DeliverMobilseEtisalat( in, out );
out["ResponseCode"] = retval;
}
else
{
retval = INTW_sendBillPaymentAdvice( in, out );
}
if (out["ResponseCode"].Long() == 90000L) {
out["status"] = "Completed";
out["status_code"] = "A0001";
pgsql_exec( "UPDATE trans_notification SET completed = now() WHERE id=%lu AND customer_id = %lu ",out["trans_not_id"].Long(),in["customer_id"].Long());
out["email_alert"] = "I am sending Email of Success";
CustomerAirSale( in);
VirtualAirSaleAlert(out);
}
else
{
out["email_alert"] = "I am sending Email of Failure";
out["status"] = "Unable to deliver topup";
out["status_code"] = "F0005";
VirtualAirSaleAlert(out);
}
/*
id | customer_id | orderid | description | amount | txnref | payref | retref | status | added | resp | recipient_no | completed | appramt | rspcode
----+-------------+------------+---------------------------------------------+--------+------------+-----------------------------------+--------------+--------+----------------------------+------+--------------+-----------+---------+---------
33 | 1 | 1625865344 | 08174596139 | 50 | | | | 1 | 2014-09-21 04:48:18.309023 | | 08174596139 | | 0 |
32 | 1 | 1605802112 | 08174596139 | 50 | | | | 1 | 2014-09-21 04:38:27.146335 | | 08174596139 | | 0 |
31 | 1 | 1476321664 | Success: Approved by Financial Institution | 1000 | 1476321664 | FBN|WEB|Mobilis|20-09-2014|022815 | 000000016906 | 1 | 2014-09-20 18:52:46.787728 | 00 | 08174596144 | | 100000 | 00
*/
}
}
}
else
{
out["status"] = "Amount too large based on settings";
out["status_code"] = "F0002";
}
}
else
{
out["status"] = "Valid order not found";
out["status_code"] = "F0001";
retval = -1;
}
break;
case COREGRADE_TOPUP_ORDER: // 900020
REQ_LONG( in, "amount", 1, -1 );
REQ_STRING( in, "recipient_no", 1, 15, "(.*)");
REQ_LONG( in, "customer_id", 1, -1 );
OPTIONAL( in, "xrate" )
REQ_LONG( in, "xrate", 1, -1 );
OPTIONAL( in, "dollar" )
REQ_LONG( in, "dollar", 1, -1 );
srand(time(NULL));
r = abs( rand()*10000000);
cust["orderid"] = r;
in["orderid"] = r;
in["orderid"].set_valid(true);
cust["amount"] = in["amount"]; cust["amount"].set_valid(true);
cust["description"] = in["description"]; cust["description"].set_valid(true);
cust["customer_id"] = in["customer_id"]; cust["customer_id"].set_valid(true);
cust["recipient_no"] = in["recipient_no"]; cust["recipient_no"].set_valid(true);
cust["xrate"] = in["xrate"]; cust["xrate"].set_valid(true);
cust["dollar"] = in["dollar"]; cust["dollar"].set_valid(true);
cust["orderid"].set_valid(true);
out=in;
out["order_id"] = insert_db_record( DBS_VALID, "trans_notification", "trans_notification_id_seq", cust );
if (out["order_id"].Long() > 0 )
{
sprintf( xtid, "9%011lu", out["order_id"].Long() );
xx["orderid"] = xtid;
pgsql_exec( "UPDATE trans_notification SET orderid ='%s' WHERE id=%lu AND customer_id = %lu ",xtid,out["order_id"].Long(),in["customer_id"].Long());
out["orderid"] = xtid;
}
else
{
out["orderid"]="";
}
break;
case COREGRADE_USER_ACCOUNT_LOGIN:
break;
case VIRTUAL_AIRTOPUP:
out = in;
REQ_LONG( in, "amount", 1, -1 );
load_db_record( out, "SELECT value AS max_topup FROM global_settings WHERE name = 'MAXIMUM_TOPUP_KOGO'");
maxAirtime = out["max_topup"].Long();
if ( maxAirtime>=in["amount"].Long() )
{
retval = INTW_sendBillPaymentAdvice( in, out );
if (retval==90000L) {
out["email_alert"] = "I am sending Email of Success";
VirtualAirSaleAlert(out);
}
else
{
VirtualAirSaleAlert(out);
out["email_alert"] = "I am sending Email of Failure";
}
}
else
{
out["status"] = "Amount too large based on settings";
}
break;
case COREGRADE_ADD_MONEYRECIPIENT:
REQ_LONG( in, "customerid", 1, -1 );
REQ_STRING( in, "bank_code", 1, 5, "(.*)");
REQ_STRING( in, "lastname", 1, 50, "(.*)");
REQ_STRING( in, "firstname", 1, 50, "(.*)");
REQ_STRING( in, "account_no", 5, 12, "(.*)");
REQ_LONG( in, "account_type", 1, -1 );
recipient["customerid"] = in["customerid"]; recipient["customerid"].set_valid(true);
recipient["bank_code"] = in["bank_code"]; recipient["bank_code"].set_valid(true);
recipient["firstname"] = in["firstname"]; recipient["firstname"].set_valid(true);
recipient["lastname"] = in["lastname"]; recipient["lastname"].set_valid(true);
recipient["account_no"] = in["account_no"]; recipient["account_no"].set_valid(true);
recipient["account_type"] = in["account_type"]; recipient["account_type"].set_valid(true);
out=in;
out["sendmoney_recipient_id"] = insert_db_record( DBS_VALID, "sendmoney_recipient", "sendmoney_recipient_id_seq", recipient );
break;
case COREGRADE_CREDIT_TOPUP:
// REQUIRED STRING customer_number
REQ_LONG( in, "amount", 1, -1 );
load_db_record( out, "SELECT value AS max_topup FROM global_settings WHERE name = 'MAXIMUM_TOPUP_KOGO'");
maxAirtime = out["max_topup"].Long();
if ( maxAirtime>=in["amount"].Long() )
{
paylid_directAirTimeTopUp(in, out);
}
else
{
out["status"] = "Amount too large based on settings";
}
break;
case COREGRADE_USER_LOGIN:
REQ_STRING( in, "username", 1, 50, "(.*)");
REQ_STRING( in, "pass", 3, 25, "(.*)");
if ( load_db_record( out, "SELECT * FROM customer WHERE username='%s' AND pass = md5('%s')", in["username"].c_str(),in["pass"].c_str() ) )
{
}
else
{
}
break;
case COREGRADE_USER_LOGOUT:
//#define COREGRADE_USER_LOGIN 300
//#define COREGRADE_USER_LOGOUT 301
break;
case COREGRADE_CREATE_ACCOUNT:
retval = CreateCoreGradeAccount( in, out );
break;
case COREGRADE_GETBILLER_INTERSW:
retval = INTW_getBillers( in, out );
break;
case COREGRADE_INTERSW_GETBILLERPAYMENTINTEMS: // 558
retval = INTW_getBillerPaymentItems( in, out );
break;
case COREGRADE_INTERSW_GETBILLERCATEGORIES:
retval = INTW_getBillerCategories( in, out );
break;
case COREGRADE_INTERSW_BILL_PAYMENT_ADVICE:
REQ_LONG( in, "amount", 1, -1 );
load_db_record( out, "SELECT value AS max_topup FROM global_settings WHERE name = 'MAXIMUM_TOPUP_KOGO'");
maxAirtime = out["max_topup"].Long();
if ( maxAirtime>=in["amount"].Long() )
{
retval = INTW_sendBillPaymentAdvice( in, out );
}
else
{
out["status"] = "Amount too large based on settings";
}
break;
case COREGRADE_INTERSW_DO_TRANSFER: // 560
retval = INTW_doTransfer( in, out );
break;
case COREGRADE_INTERSW_QUERY_TRANSACTION: // 561
retval = INTW_queryTransaction( in, out );
break;
case COREGRADE_STOREFACE_GET_ACCOUNT_BALANCE:
retval = paylid_getAccountBalance( in, out );
break;
}
logfmt( logINFO, "/long coregrade_api_main(CVars in, CVars &out)");
return retval;
}
//possible login $ret
#define GITS_VALID_LOGIN 101
#define GITS_INVALID_LOGIN 800
long customer_login(CVars in, CVars &out )
{
// plog->SetFileName( PREFIX"/logs/customer_access.log" );
try
{
try
{
if ( in["lastip"].length() > 0 )
{
int result = 0;
// result = pgsql_exec( "UPDATE customer SET last_login=now(),lastip='%s' WHERE id=%lu", in["lastip"].c_str(), uid);
if (result==1) {
// We are OK
}
// st.Select( "UPDATE customer SET last_login=now(),lastip='%s' WHERE id=%lu", in["lastip"].c_str(), uid);
}
else
{
// st.Select( "UPDATE customer SET last_login=now() WHERE id=%lu", uid);
}
}
catch (bad_parameter)
{
// st.Select( "UPDATE customer SET last_login=now() WHERE id=%lu", uid);
}
/*
if ( session )
out["sessionid"] = session->session_id;
session_to_php();
*/
// out["uid"] = uid;
// out["account_no"] = account_no;
out["status"] = "Customer is logged in";
CVars x;
// x["uid"] = uid; x["uid"].set_valid( true );
x["status"] = "1"; x["status"].set_valid( true );
// track_customer_login(x, out);
return GITS_VALID_LOGIN;
}
catch (bad_parameter)
{
out["status"] = "bad parameter";
return PHP_API_BAD_PARAM;
}
return GITS_INVALID_LOGIN;
}
+666
View File
@@ -0,0 +1,666 @@
#include "email.h"
#include "clog.h"
#include "cgi.h"
#include "input.h"
#include "coregrade_api.h"
#include "safestring.h"
#include "cfg.h"
#include <string>
#include "pgsql_wrapper.h"
void vars2form( CVars &v, C_CGI_Form &form );
extern int mailsend(CVars in,CVars &out);
long AccountPendingMail(CVars in)
{
REQ_LONG( in, "pending_id", 1, -1 );
CVars x;
CVars out;
C_CGI_Form form("","");
char * server_name = getenv( "SERVER_NAME" );
form.LetStr( "server_name", server_name );
form.LetStr( "site_name", "CoreGrade" );
if ( load_db_record( x, "SELECT * FROM members_pending WHERE id = %lu ", in["pending_id"].Long()) )
{
vars2form( x, form );
form.LetStr( "email", x["email"].c_str() );
form.Email( "ACCOUNT/member_pending.mailfile" );
}
return 0;
}
long WelcomeAccountMail(CVars in)
{
REQ_LONG( in, "member_id", 1, -1 );
CVars x;
CVars out;
C_CGI_Form form("","");
char * server_name = getenv( "SERVER_NAME" );
form.LetStr( "server_name", server_name );
form.LetStr( "site_name", "CoreGrade" );
if ( load_db_record( x, "SELECT * FROM members WHERE id = %lu ", in["member_id"].Long()) )
{
vars2form( x, form );
form.LetStr( "email", x["email"].c_str() );
form.Email( "ACCOUNT/member_welcome.mailfile" );
}
return 0;
}
long CreateCoreGradeGroupMail(CVars in)
{
REQ_LONG( in, "group_id", 1, -1 );
CVars x;
CVars out;
C_CGI_Form form("","");
char * server_name = getenv( "SERVER_NAME" );
form.LetStr( "server_name", server_name );
form.LetStr( "site_name", "CoreGrade" );
if ( load_db_record( x, "select g.*,m.email,m.firstname,m.lastname from members_groups g LEFT JOIN members m ON m.id = g.member_id WHERE g.id = %lu ", in["group_id"].Long()) )
{
vars2form( x, form );
form.LetStr( "email", x["email"].c_str() );
form.Email( "GROUP/group_added.mailfile" );
}
return 0;
}
long GroupCreateMemberMail(CVars in)
{
REQ_LONG( in, "group_id", 1, -1 );
REQ_LONG( in, "group_member_id", 1, -1 );
CVars x;
CVars out;
C_CGI_Form form("","");
char * server_name = getenv( "SERVER_NAME" );
form.LetStr( "server_name", server_name );
form.LetStr( "site_name", "CoreGrade" );
if ( load_db_record( x, "SELECT gm.*,m.*,e.email FROM group_members gm LEFT JOIN members_groups m ON m.id=gm.group_id LEFT JOIN members e ON e.id=gm.member_id WHERE gm.id = %lu", in["group_member_id"].Long()) )
{
vars2form( x, form );
form.LetStr( "email", x["email"].c_str() );
form.Email( "GROUP/group_member_added.mailfile" );
}
return 0;
return 0;
}
//==============================================================================================================
long send_email(CVars in, CVars &out)
{
logfmt( logINFO, "send_email()" );
long ret = PHP_API_BAD_PARAM;
try {
REQ_LONG( in, "whattodo", 1, -1 );
switch(in["whattodo"].Long()) {
default: logfmt( logINFO, "Not implemented" );
}
} catch(bad_parameter) {
out["status"] = "Unknow action supplied";
}
logfmt( logINFO, "/send_email()" );
return ret;
}
long EmailCustBalUpdt(CVars in)
{
REQ_LONG( in, "balance_update_id", 1, -1 );
C_CGI_Form form("","");
char * server_name = getenv( "SERVER_NAME" );
CVars x;
vars2form( x, form );
form.LetStr( "site", server_name );
form.Email( "test.mailfile" );
return 0;
}
long SendPromoEmail(CVars in)
{
long pmode = REQ_LONG( in, "pmode", 1, -1 );
CVars x;
CVars out;
C_CGI_Form form("","");
vars2form( in, form );
form.LetStr( "email", in["email"].c_str() );
switch( pmode )
{
case 1:
form.Email( "promo/promotion1.mailfile" );
break;
case 2:
form.Email( "promo/promotion2.mailfile" );
break;
}
return 0;
}
long SendBalanceRequestAlert(CVars in)
{
REQ_LONG( in, "request_id", 1, -1 );
CVars x;
CVars out;
C_CGI_Form form("","");
out["topupemail"] = CfgReadChar("transnotif.topupemail");
if ( load_db_record( x, "SELECT a.*,a.amount*0.01 AS req_amount,c.*,a.ip AS ip_loc,u.name FROM customer_addbalance a LEFT JOIN customer c ON c.id=a.customer_id LEFT JOIN bko_users u ON u.id=a.csr_id WHERE a.id = '%lu' ", in["request_id"].Long()) )
{
vars2form( x, form );
form.LetStr( "email", out["topupemail"].c_str() );
form.Email( "alerts/balancereq.mailfile" );
}
return 0;
}
long SendBalanceCompleteAlert(CVars in)
{
REQ_LONG( in, "request_id", 1, -1 );
CVars x;
CVars out;
C_CGI_Form form("","");
out["topupemail"] = CfgReadChar("transnotif.topupemail");
if ( load_db_record( x, "SELECT a.*,a.amount*0.01 AS req_amount,c.*,a.ip2 AS ip_loc,u.name,a.cur_balance*0.01 AS cur2, a.fin_balance*0.01 AS fin2 FROM customer_addbalance a LEFT JOIN customer c ON c.id=a.customer_id LEFT JOIN bko_users u ON u.id=a.csr_id WHERE a.id = '%lu' ", in["request_id"].Long()) )
{
vars2form( x, form );
form.LetStr( "email", out["topupemail"].c_str() );
form.Email( "alerts/balancecomplete.mailfile" );
}
return 0;
}
long SystemStatus()
{
logfmt( logINFO, "SystemStatus()*************~************");
C_CGI_Form form("","");
const char * server_name = getenv( "SERVER_NAME" );
CVars x;
vars2form( x, form );
form.LetStr( "site", server_name );
form.LetStr( "message", server_name );
form.LetStr( "email", "ses66181@gmail.com" );
// form.LetStr( "email", "acidumirae@gmail.com" );
form.Email( "test.mailfile" );
return 0l;
}
long StartPassResetEmail(CVars in)
{
//customer_id
// reset_id
C_CGI_Form form("","");
const char * server_name = getenv( "SERVER_NAME" );
CVars out;
CVars x;
load_db_record( x, "SELECT * FROM customer WHERE id = %lu",in["customer_id"].Long() ) ;
vars2form( x, form );
form.LetStr( "site", server_name );
/*
CREATE TABLE lostpass (
id serial NOT NULL,
customer_id INT REFERENCES customer(id),
added TIMESTAMP DEFAULT NOW(),
updated TIMESTAMP DEFAULT NOW(),
loc INET,
reset_link VARCHAR(200) NOT NULL,
expire TIMESTAMP ,
status integer DEFAULT 1
);
*/
load_db_record( out, "SELECT added AS lost_added,* FROM lostpass WHERE id = %lu",in["reset_id"].Long() ) ;
vars2form( out, form );
form.LetStr( "email", x["email"].c_str() );
form.Email( "start_losspass.mailfile" ); //customer notification
return 0;
//start_losspass.mailfile
}
long CompletePassResetEmail(CVars in)
{
//customer_id
// reset_id
C_CGI_Form form("","");
const char * server_name = getenv( "SERVER_NAME" );
CVars out;
CVars x;
load_db_record( x, "SELECT * FROM customer WHERE id = %lu",in["customer_id"].Long() ) ;
vars2form( x, form );
form.LetStr( "site", server_name );
form.LetStr( "email", x["email"].c_str() );
form.Email( "complete_losspass.mailfile" ); //customer notification
return 0;
//start_losspass.mailfile
}
long CustomerAirSalePayment(CVars in)
{
/*
payquic_test=> select t.*,c.* from trans_notification t LEFT JOIN customer c ON c.id = t.customer_id limit 1;
id | customer_id | orderid | description | amount | txnref | payref | retref | status | added | resp | recipient_no | completed | appramt | rspcode | id | username | firstname | lastname | email | pass
| status | added | balance
----+-------------+------------+-------------+--------+--------+--------+--------+--------+----------------------------+------+--------------+-----------+---------+---------+----+--------------------+-----------+----------+--------------------+-------------------
---------------+--------+----------------------------+---------
2 | 1 | 1452581056 | 08174596143 | 1000 | | | | 1 | 2014-09-15 21:00:39.921535 | | 08174596144 | | 0 | | 1 | ses66181@gmail.com | Olu | Amey | ses66181@gmail.com | d0fbea2563b377ea70
74bced45c88dcb | 1 | 2014-07-09 13:52:02.478932 | 189700
(1 row)
*/
CVars out;
out["topupemail"] = CfgReadChar("transnotif.topupemail");
logfmt( logINFO, "SystemStatus()*************~************");
C_CGI_Form form("","");
const char * server_name = getenv( "SERVER_NAME" );
CVars x,y;
load_db_record( x, "select t.*,c.*,c.loc AS loc_c,c.balance*0.01 AS balance2,t.amount AS amount2,c.email AS email2,t.added AS trans_date from trans_notification t LEFT JOIN customer c ON c.id = t.customer_id WHERE t.orderid='%s'",in["orderid"].c_str() ) ;
vars2form( x, form );
load_db_record( y, "SELECT country_code,country_name,continent_code,continent_name FROM ipligence2 WHERE ip_from <= ip2int('%s') AND ip_to>=ip2int('%s') LIMIT 1",x["loc_c"].c_str(),x["loc_c"].c_str());
/*
country_code | country_name | continent_code | continent_name
--------------+---------------+----------------+----------------
US | UNITED STATES | NA | NORTH AMERICA
*/
vars2form( y, form );
if ( in["pmode"].Long() == PAY_MODE_BALANCE ) // paying with balance
{
form.LetStr( "paymode", "Payment with balance" );
}
else
{
form.LetStr( "paymode", "Payment with card" );
}
form.LetStr( "site", server_name );
form.LetStr( "email", x["email2"].c_str() );
form.Email( "topup_payment.mailfile" ); //customer notification
form.LetStr( "email", out["topupemail"].c_str() );
form.Email( "topup_payment_alert.mailfile" ); //customer notification
return 0l;
}
long CustomerAirBonus(CVars in)
{
/*
payquic_test=> select t.*,c.* from trans_notification t LEFT JOIN customer c ON c.id = t.customer_id limit 1;
id | customer_id | orderid | description | amount | txnref | payref | retref | status | added | resp | recipient_no | completed | appramt | rspcode | id | username | firstname | lastname | email | pass
| status | added | balance
----+-------------+------------+-------------+--------+--------+--------+--------+--------+----------------------------+------+--------------+-----------+---------+---------+----+--------------------+-----------+----------+--------------------+-------------------
---------------+--------+----------------------------+---------
2 | 1 | 1452581056 | 08174596143 | 1000 | | | | 1 | 2014-09-15 21:00:39.921535 | | 08174596144 | | 0 | | 1 | ses66181@gmail.com | Olu | Amey | ses66181@gmail.com | d0fbea2563b377ea70
74bced45c88dcb | 1 | 2014-07-09 13:52:02.478932 | 189700
(1 row)
*/
CVars out;
out["topupemail"] = CfgReadChar("transnotif.topupemail");
logfmt( logINFO, "SystemStatus()*************~************");
C_CGI_Form form("","");
const char * server_name = getenv( "SERVER_NAME" );
CVars x;
load_db_record( x, "select t.*,c.*,c.balance*0.01 AS balance2,t.amount AS amount2,c.email AS email2,t.added AS trans_date from trans_notification t LEFT JOIN customer c ON c.id = t.customer_id WHERE t.orderid='%s'",in["orderid"].c_str() ) ;
vars2form( x, form );
if ( in["pmode"].Long() == PAY_MODE_BALANCE ) // paying with balance
{
form.LetStr( "paymode", "Payment with balance" );
}
else
{
form.LetStr( "paymode", "Payment with card" );
}
form.LetStr( "site", server_name );
form.LetStr( "email", x["email2"].c_str() );
form.Email( "topup_bonus_completed.mailfile" ); //customer notification
return 0l;
}
long CustomerAirSale(CVars in)
{
/*
payquic_test=> select t.*,c.* from trans_notification t LEFT JOIN customer c ON c.id = t.customer_id limit 1;
id | customer_id | orderid | description | amount | txnref | payref | retref | status | added | resp | recipient_no | completed | appramt | rspcode | id | username | firstname | lastname | email | pass
| status | added | balance
----+-------------+------------+-------------+--------+--------+--------+--------+--------+----------------------------+------+--------------+-----------+---------+---------+----+--------------------+-----------+----------+--------------------+-------------------
---------------+--------+----------------------------+---------
2 | 1 | 1452581056 | 08174596143 | 1000 | | | | 1 | 2014-09-15 21:00:39.921535 | | 08174596144 | | 0 | | 1 | ses66181@gmail.com | Olu | Amey | ses66181@gmail.com | d0fbea2563b377ea70
74bced45c88dcb | 1 | 2014-07-09 13:52:02.478932 | 189700
(1 row)
*/
CVars out;
out["topupemail"] = CfgReadChar("transnotif.topupemail");
logfmt( logINFO, "SystemStatus()*************~************");
C_CGI_Form form("","");
const char * server_name = getenv( "SERVER_NAME" );
CVars x,y;
load_db_record( x, "select t.*,c.*,c.loc AS loc_c,c.balance*0.01 AS balance2,t.amount AS amount2,c.email AS email2,t.added AS trans_date from trans_notification t LEFT JOIN customer c ON c.id = t.customer_id WHERE t.orderid='%s'",in["orderid"].c_str() ) ;
vars2form( x, form );
load_db_record( y, "SELECT country_code,country_name,continent_code,continent_name FROM ipligence2 WHERE ip_from <= ip2int('%s') AND ip_to>=ip2int('%s') LIMIT 1",x["loc_c"].c_str(),x["loc_c"].c_str());
/*
country_code | country_name | continent_code | continent_name
--------------+---------------+----------------+----------------
US | UNITED STATES | NA | NORTH AMERICA
*/
vars2form( y, form );
if ( in["pmode"].Long() == PAY_MODE_BALANCE ) // paying with balance
{
form.LetStr( "paymode", "Payment with balance" );
}
else
{
form.LetStr( "paymode", "Payment with card" );
}
form.LetStr( "site", server_name );
form.LetStr( "email", x["email2"].c_str() );
form.Email( "topup_completed.mailfile" ); //customer notification
return 0l;
}
long VirtualAirSaleCustomer(CVars in)
{
CVars out;
out["topupemail"] = CfgReadChar("transnotif.topupemail");
logfmt( logINFO, "SystemStatus()*************~************");
C_CGI_Form form("","");
const char * server_name = getenv( "SERVER_NAME" );
CVars x,y;
load_db_record( x, "select t.*,c.*,c.loc AS loc_c,c.balance*0.01 AS balance2,t.amount AS amount2,c.email AS email2,t.added AS trans_date from trans_notification t LEFT JOIN customer c ON c.id = t.customer_id WHERE t.orderid='%s'",in["orderid"].c_str() ) ;
vars2form( x, form );
load_db_record( y, "SELECT country_code,country_name,continent_code,continent_name FROM ipligence2 WHERE ip_from <= ip2int('%s') AND ip_to>=ip2int('%s') LIMIT 1",x["loc_c"].c_str(),x["loc_c"].c_str());
/*
country_code | country_name | continent_code | continent_name
--------------+---------------+----------------+----------------
US | UNITED STATES | NA | NORTH AMERICA
*/
vars2form( y, form );
CVars z;
load_db_record( z, "SELECT t.paymentcode,i.responsecode,i.transactionref FROM interswitch_bill_payment_advice t LEFT JOIN interswitch_transaction i ON i.detail_id=t.id WHERE t.order_id ='%s'",x["orderid"].c_str());
vars2form( z, form );
if ( in["pmode"].Long() == PAY_MODE_BALANCE ) // paying with balance
{
form.LetStr( "paymode", "Payment with balance" );
}
else
{
form.LetStr( "paymode", "Payment with card" );
}
form.LetStr( "site", server_name );
form.LetStr( "message", server_name );
form.LetStr( "email", out["topupemail"].c_str() );
form.Email( "virtualtopup.mailfile" ); // this is alert
return 0l;
}
void CustomerBalanceEmail(CVars in)
{
REQ_STRING( in, "orderid", 1, 50, "(.*)");
CVars x;
C_CGI_Form form("","");
if ( load_db_record( x, "select c.*,t.*,t.added AS balance_date,appramt*0.01 AS appramt2,t.added AS trans_date,c.balance*0.01 AS balance2 from trans_balance_topup t LEFT JOIN customer c ON c.id = t.customer_id where t.orderid = '%s' AND completed IS NOT NULL", in["orderid"].c_str()) )
{
vars2form( x, form );
form.Email( "balance_updated.mailfile" );
}
}
long CustomerBalanceBonusEmail(CVars in)
{
//REQ_STRING( in, "orderid", 1, 50, "(.*)");
REQ_LONG( in, "customer_id", 1, -1 );
CVars x;
C_CGI_Form form("","");
if ( load_db_record( x, "select * FROM customer WHERE id = %lu ", in["customer_id"].Long()) )
{
vars2form( x, form );
form.Email( "bonus_balance.mailfile" );
}
return 0;
}
void PaymentAlert(CVars in)
{
}
void BalanceUpdateAlert(CVars in)
{
REQ_STRING( in, "orderid", 1, 50, "(.*)");
CVars x;
CVars out;
C_CGI_Form form("","");
out["topupemail"] = CfgReadChar("transnotif.topupemail");
if ( load_db_record( x, "select c.*,t.*,t.added AS balance_date,appramt*0.01 AS appramt2 ,c.balance*0.01 AS balance2 from trans_balance_topup t LEFT JOIN customer c ON c.id = t.customer_id where t.orderid = '%s' AND completed IS NOT NULL", in["orderid"].c_str()) )
{
vars2form( x, form );
form.LetStr( "email", out["topupemail"].c_str() );
form.Email( "alert_balance_updated.mailfile" );
}
}
void CustomerEmailWelcome(CVars in)
{
long customer_id = in["user_id"].Long();
C_CGI_Form form("","");
const char * server_name = getenv( "SERVER_NAME" );
CVars x;
load_db_record( x, "select *,email as email2 from customer WHERE id =%lu ",customer_id ) ;
vars2form( x, form );
form.Email( "welcome.mailfile" );
}
/*****************************************************************************/
long VirtualAirSaleAlert(CVars in)
{
/*
payquic_test=> select t.*,c.* from trans_notification t LEFT JOIN customer c ON c.id = t.customer_id limit 1;
id | customer_id | orderid | description | amount | txnref | payref | retref | status | added | resp | recipient_no | completed | appramt | rspcode | id | username | firstname | lastname | email | pass
| status | added | balance
----+-------------+------------+-------------+--------+--------+--------+--------+--------+----------------------------+------+--------------+-----------+---------+---------+----+--------------------+-----------+----------+--------------------+-------------------
---------------+--------+----------------------------+---------
2 | 1 | 1452581056 | 08174596143 | 1000 | | | | 1 | 2014-09-15 21:00:39.921535 | | 08174596144 | | 0 | | 1 | ses66181@gmail.com | Olu | Amey | ses66181@gmail.com | d0fbea2563b377ea70
74bced45c88dcb | 1 | 2014-07-09 13:52:02.478932 | 189700
(1 row)
*/
CVars out;
out["topupemail"] = CfgReadChar("transnotif.topupemail");
logfmt( logINFO, "SystemStatus()*************~************");
C_CGI_Form form("","");
const char * server_name = getenv( "SERVER_NAME" );
CVars x,y;
load_db_record( x, "select t.*,c.*,c.loc as loc_c,c.balance*0.01 AS balance2,t.amount AS amount2,c.email AS email2 from trans_notification t LEFT JOIN customer c ON c.id = t.customer_id WHERE t.orderid='%s'",in["orderid"].c_str() ) ;
vars2form( x, form );
load_db_record( y, "SELECT country_code,country_name,continent_code,continent_name FROM ipligence2 WHERE ip_from <= ip2int('%s') AND ip_to>=ip2int('%s') LIMIT 1",x["loc_c"].c_str(),x["loc_c"].c_str());
/*
country_code | country_name | continent_code | continent_name
--------------+---------------+----------------+----------------
US | UNITED STATES | NA | NORTH AMERICA
*/
vars2form( y, form );
CVars z;
load_db_record( z, "SELECT t.paymentcode,i.responsecode,i.transactionref FROM interswitch_bill_payment_advice t LEFT JOIN interswitch_transaction i ON i.detail_id=t.id WHERE t.order_id ='%s'",x["orderid"].c_str());
vars2form( z, form );
if ( in["pmode"].Long() == PAY_MODE_BALANCE ) // paying with balance
{
form.LetStr( "paymode", "Payment with balance" );
}
else if ( in["pmode"].Long() == PAY_MODE_BONUS ) // paying bonus
{
form.LetStr( "paymode", "Bonus Payment" );
}
else
{
form.LetStr( "paymode", "Payment with card" );
}
form.LetStr( "site", server_name );
form.LetStr( "message", server_name );
//form.LetStr( "email", "ses66181@gmail.com,oladeji@gmail.com" );
form.LetStr( "email", out["topupemail"].c_str() );
// form.LetStr( "email", "acidumirae@gmail.com" );
form.Email( "virtualtopup.mailfile" );
return 0l;
}
/*****************************************************************************/
void SendAccountCreateAlert(long customer_id)
{
CVars out;
out["topupemail"] = CfgReadChar("transnotif.topupemail");
logfmt( logINFO, "SystemStatus()*************~************");
C_CGI_Form form("","");
const char * server_name = getenv( "SERVER_NAME" );
CVars x,y;
load_db_record( x, "SELECT *,email as email2,balance*0.01 AS balance2,dollar_balance*0.01 AS dollar_balance2 from customer WHERE id =%lu ",customer_id ) ;
vars2form( x, form );
load_db_record( y, "SELECT country_code,country_name,continent_code,continent_name FROM ipligence2 WHERE ip_from <= ip2int('%s') AND ip_to>=ip2int('%s') LIMIT 1",x["loc"].c_str(),x["loc"].c_str());
/*
country_code | country_name | continent_code | continent_name
--------------+---------------+----------------+----------------
US | UNITED STATES | NA | NORTH AMERICA
*/
vars2form( y, form );
form.LetStr( "site", server_name );
form.LetStr( "message", server_name );
form.LetStr( "email", out["topupemail"].c_str() );
// form.LetStr( "email", "acidumirae@gmail.com" );
form.Email( "alert_accountcreated.mailfile" );
//alert_accountcreated.mailfile
}
/*****************************************************************************/
void vars2form( CVars &v, C_CGI_Form &form )
{
CVars::const_iterator i;
for ( i=v.begin(); i != v.end(); i++ ) {
char name[30];
strsafecpy( name, i->first.c_str(), sizeof(name) );
// &fee, tax, total
if ( strcasecmp( name, "tax" )==0 ||
strcasecmp( name, "total" )==0 ||
strcasecmp( name, "price" )==0 ||
strcasecmp( name, "amount" )==0 ||
strcasecmp( name, "shipping" )==0 ||
strcasecmp( name, "subtotal" )==0 ||
( strlen(name)>=3 && strcasecmp( &name[strlen(name)-3], "fee" )==0 )) {
form.LetStrf( name, "%.2f", i->second.Long()/100.0 );
} else {
form.LetStr( i->first.c_str(), i->second.c_str() );
}
}
}
/*****************************************************************************/
File diff suppressed because it is too large Load Diff
+130
View File
@@ -0,0 +1,130 @@
// Account management toosl
#include "clog.h"
#include "cgi.h"
#include "input.h"
#include "coregrade_api.h"
#include "groups.h"
#include "email.h"
#include "safestring.h"
#include <string>
#include "pgsql.h"
#include "pgsql_wrapper.h"
#include "cfg.h"
#include <curl/curl.h>
long groups_calls(CVars in, CVars &out)
{
logfmt( logINFO, "groups_calls()" );
out["result"] = "YES I GET TO BACK END";
long action = REQ_LONG( in, "action", 0, -1);
switch( action )
{
case COREGRADE_GROUP_ACCEPTGROUP:
//return LoginCoreGradeAccount( in, out);
break;
case COREGRADE_GROUP_INVITEGROUP:
//return CreateCoreGradeAccountPending(in, out);
break;
case COREGRADE_GROUP_CREATEGROUP:
return CreateCoreGradeGroup( in, out);
break;
}
logfmt( logINFO, "/groups_calls()" );
return 0;
}
long CreateCoreGradeGroup(CVars in, CVars &out)
{
long ret = PHP_API_BAD_PARAM;
out =in;
REQ_STRING (in, "group_name", 5, 99, "(.*)");
OPTIONAL( in, "description" ) REQ_STRING (in, "description", 1, 249, "(.*)");
REQ_LONG( in, "contribute", 1, -1 );
REQ_LONG( in, "member_id", 1, -1 );
OPTIONAL( in, "loc" ) REQ_STRING (in, "loc", 3, 15, "(.*)");
CVars x;
x["group_name"] = in["group_name"]; x["group_name"].set_valid( true );
x["description"] = in["description"]; x["description"].set_valid( true );
x["invite"] = "1"; x["invite"].set_valid( true );
x["member_id"] = in["member_id"]; x["member_id"].set_valid( true );
x["loc"] = in["loc"]; x["loc"].set_valid( true );
ret = insert_db_record( DBS_VALID, "members_groups", "members_groups_id_seq", x );
if ( ret > 0 )
{
if ( in["contribute"].Long() > 0 )
{
pgsql_exec("UPDATE members_groups SET contribute=NOW() WHERE id=%lu ", ret);
}
out["group_id"] = ret; out["group_id"].set_valid( true );
x["group_id"] = ret; x["group_id"].set_valid( true );
CVars y;
y["member_id"] = in["member_id"]; y["member_id"].set_valid( true );
y["admin_status"] = in["member_id"]; y["admin_status"].set_valid( true );
y["group_id"] = out["group_id"]; y["group_id"].set_valid( true );
y["loc"] = in["loc"]; y["loc"].set_valid( true );
//ALTER TABLE group_members ADD admin_status INT REFERENCES members(id);
CoreGradeGroupCreateMember(y,out);
CreateCoreGradeGroupMail(y);
}
return ret;
}
long CoreGradeGroupCreateMember(CVars in, CVars &out)
{
long ret = PHP_API_BAD_PARAM;
out =in;
REQ_LONG( in, "member_id", 1, -1 );
REQ_LONG( in, "group_id", 1, -1 );
OPTIONAL( in, "loc" ) REQ_STRING (in, "loc", 3, 15, "(.*)");
CVars x;
x["group_id"] = in["group_id"]; x["group_id"].set_valid( true );
x["member_id"] = in["member_id"]; x["member_id"].set_valid( true );
x["loc"] = in["loc"]; x["loc"].set_valid( true );
if (in["admin_status"].Long() > 0)
{
x["admin_status"] = in["admin_status"]; x["admin_status"].set_valid( true );
}
ret = insert_db_record( DBS_VALID, "group_members", "group_members_id_seq", x );
if ( ret > 0 )
{ out["group_member_id"] = ret; out["group_member_id"].set_valid( true );
x["group_member_id"] = ret; x["group_member_id"].set_valid( true );
GroupCreateMemberMail(x);
pgsql_exec("UPDATE members_groups SET accepted = (SELECT count(*) FROM group_members WHERE group_id = %lu ) WHERE id=%lu",x["group_id"].Long(),x["group_id"].Long() );
}
return ret;
}
//******************************************************************************
/*
CREATE TABLE group_members (
id SERIAL,
member_id INT REFERENCES members(id),
group_name VARCHAR(100) UNIQUE NOT NULL,
description VARCHAR(250),
added timestamp without time zone DEFAULT now(),
balance integer DEFAULT 0,
contribute timestamp without time zone,
alert integer DEFAULT 0,
status integer DEFAULT 1,
invite integer DEFAULT 0,
accepted integer DEFAULT 0,
rejected integer DEFAULT 0,
loc INET
);
ALTER TABLE ONLY members_groups
ADD CONSTRAINT members_groups_id_key UNIQUE (id);
*/
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,593 @@
#include <cstdlib>
#include <ext/hash_map>
#include "interswitch.h"
#include "interswitch_sendmoney.h"
#include "cfg.h"
#include "clog.h"
#include "exceptions.h"
#include "input.h"
#include "coregrade_api.h"
#include "pgsql.h"
#include "pgsql_wrapper.h"
#include "safestring.h"
#include <string>
#include <stdexcept>
using namespace std;
using namespace __gnu_cxx;
//*****************************************************************************/
long INTW_configure(CVars in, CVars &out)
{
logfmt( logINFO, "long INTW_configure(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
// Configure Interswitch SSL
interswitch_config_ssl(
CfgReadChar("interswitch.keyfile"),
CfgReadChar("interswitch.password"),
CfgReadChar("interswitch.cacert"),
CfgReadLong("interswitch.version"));
out["interswitch_ver"] = CfgReadLong("interswitch.version");
out["interswitch_sep"] = CfgReadChar("interswitch.soap_endpoint");
out["interswitch_tid"] = CfgReadChar("interswitch.terminal_id");
out["interswitch_code"] = CfgReadChar("interswitch.entity_code");
out["interswitch_mkey"] = CfgReadChar("interswitch.master_key");
out["interswitch_pin"] = CfgReadChar("interswitch.pin");
out["interswitch_pfix"] = CfgReadChar("interswitch.prefix");
out["interswitch_keyf"] = CfgReadChar("interswitch.keyfile");
out["interswitch_pass"] = CfgReadChar("interswitch.password");
out["interswitch_cert"] = CfgReadChar("interswitch.cacert");
ret = PHP_API_OK;
} catch (bad_parameter) {
out["status"] = "Bad parameter";
} catch ( ... ) {
out["status"] = "Unhandled exception in INTW_configure";
}
logfmt( logINFO, "/long INTW_configure(CVars in, CVars &out)");
return ret;
}
//*****************************************************************************/
long INTW_getBillersSave(hash_map<const char*, const char*, hash<const char*>, eqstr> saveData) { //long id, char *name, long currencyCode, char *quickTellerSiteUrlName, char *supportEmail) {
logfmt( logINFO, "long INTW_getBillersSave(...)");
long gid = -1L, id = 0L;
CVars x;
hash_map<const char*, const char*, hash<const char*>, eqstr>::iterator pointer;
for (pointer = saveData.begin();pointer!=saveData.end();++pointer) {
x[pointer->first] = pointer->second; x[pointer->first].set_valid(true);
if (strcmp("Id",pointer->first)==0) {
id = atol(pointer->second);
// Check if the record already exists
const PGresult* res = pgsql_query("SELECT * FROM interswitch_billers WHERE id = %lu", id );
if (id<1L || (res && pgsql_num_rows(res)>0)) {
// Incorrect id or alredy exists
logfmt(FLOG_MAX, "Incorrect id or alredy exists: %ld", id);
return -1L;
}
}
}
gid = insert_db_record( DBS_VALID, "interswitch_billers", "interswitch_billers_gid_seq", x );
pgsql_exec( "UPDATE global_settings SET value=now() WHERE name='LAST_INTSW_GETBILLER_RUN'");
logfmt( logINFO, "/long INTW_getBillersSave(...)");
return gid;
}
//*****************************************************************************/
long INTW_getBillers(CVars in, CVars &out)
{
logfmt( logINFO, "long INTW_getBillers(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
// Initiate interswitch session
CVars setup;
INTW_configure(in, setup);
// Prepare call
const int statusSize = 1024;
char status[statusSize];
int billerId = 0;
int categoryId = 0;
int channelId = 0;
char xtid[12];
int channel_code = 3;
sprintf( xtid, "%s", setup["interswitch_tid"].c_str() );
ret = interswitch_getBillers(
setup["interswitch_sep"].c_str(),
xtid,
billerId,
categoryId,
channelId,
"",
status,
&INTW_getBillersSave);
} catch ( ... ) {
out["status"] = "Unhandled exception in INTW_getBillers";
}
logfmt( logINFO, "/long INTW_getBillers(CVars in, CVars &out)");
return ret;
}
/*
<------>long INTW_getSaveGeneric(const char *table, hash_map<const char*, const char*, hash<const char*>, eqstr> saveData);
<------>long INTW_getBillerPaymentItems(CVars in, CVars &out);
*/
//*****************************************************************************/
long INTW_getSaveGeneric(const char *table, hash_map<const char*, const char*, hash<const char*>, eqstr> saveData) { //long id, char *name, long currencyCode, char *quickTellerSiteUrlName, char *supportEmail) {
logfmt( logINFO, "long INTW_getSaveGeneric(...)");
long gid = -1L, id = 0L;
CVars x;
hash_map<const char*, const char*, hash<const char*>, eqstr>::iterator pointer;
for (pointer = saveData.begin();pointer!=saveData.end();++pointer) {
x[pointer->first] = pointer->second; x[pointer->first].set_valid(true);
}
const int n = strlen(table) + 20;
char table_seq[n];
snprintf(table_seq, n, "%s_gid_seq", table);
gid = insert_db_record( DBS_VALID, table, table_seq, x );
logfmt( logINFO, "/long INTW_getSaveGeneric(...)");
return gid;
}
//*****************************************************************************/
long INTW_getBillerPaymentItems(CVars in, CVars &out)
{
logfmt( logINFO, "long INTW_getBillerPaymentItems(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
// Initiate interswitch session
CVars setup;
INTW_configure(in, setup);
// Prepare call
const int statusSize = 1024;
char status[statusSize];
int billerId = REQ_LONG( in, "id", 1, -1 );;
char xtid[12];
sprintf( xtid, "%s", setup["interswitch_tid"].c_str() );
ret = interswitch_getBillerPaymentItems(
setup["interswitch_sep"].c_str(),
xtid,
billerId,
status,
&INTW_getSaveGeneric);
} catch (bad_parameter) {
out["status"] = "Incorrect Biller ID";
} catch ( ... ) {
out["status"] = "Unhandled exception in INTW_getBillerPaymentItems";
}
logfmt( logINFO, "/long INTW_getBillerPaymentItems(CVars in, CVars &out)");
return ret;
}
//*****************************************************************************/
long INTW_sendBillPaymentAdvice(CVars in, CVars &out )
{
logfmt( logINFO, "long INTW_sendBillPaymentAdvice(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
int customerId = REQ_LONG( in, "customerid", 1, -1 );
int paymentItemId = REQ_LONG( in, "paymentitemid", 1, -1 );
int amount = REQ_LONG( in, "amount", 0, -1 );
REQ_STRING( in, "customermobile", 5, 15, "(.*)");
OPTIONAL (in, "customeremail") REQ_STRING( in, "customeremail", 1, 100, "(.*)");
OPTIONAL (in, "order_id") REQ_STRING( in, "order_id", 1, 25, "(.*)");
char CustomerMobile[15];
char CustomerEmail[100];
sprintf( CustomerEmail, "%s", in["customeremail"].c_str() );
sprintf( CustomerMobile, "%s", in["customermobile"].c_str() );
//topalert = "sales@payquic.com";
out["topalert"] = CfgReadChar("transnotif.topalert");
sprintf( CustomerEmail, "%s", out["topalert"].c_str() );
CVars customer; // Load customer
ret = load_db_record( customer, "SELECT email,firstname,lastname FROM customer WHERE status=1 AND id = %lu", customerId );
if (ret<1L) {
throw new bad_parameter(out, "customerid");
}
CVars paymentitem; // Load payment item
ret = load_db_record( paymentitem, "SELECT id,billerid,billername,name,amount,paymentcode FROM interswitch_biller_payment_items WHERE gid = %lu", paymentItemId);
if (ret<1L) {
out["advice"] = "PaymentID not found or not valid !!!";
throw new bad_parameter(out, "paymentitemid");
}
// Check amount
if (amount<1L) {
amount = paymentitem["amount"].Long();
}
/**/
// Create record
CVars advice;
advice["customerid"] = customerId; advice["customerid"].set_valid(true);
advice["billerid"] = paymentitem["billerid"]; advice["billerid"].set_valid(true);
advice["billerpaymentitemgid"] = paymentItemId; advice["billerpaymentitemgid"].set_valid(true);
advice["amount"] = amount; advice["amount"].set_valid(true);
advice["paymentcode"] = paymentitem["paymentcode"]; advice["paymentcode"].set_valid(true);
advice["order_id"] = in["order_id"]; advice["order_id"].set_valid(true);
advice["customeremail"] = in["customeremail"]; advice["customeremail"].set_valid(true);
advice["customermobile"] = in["customermobile"]; advice["customermobile"].set_valid(true);
out["bill_payment_advice_id"] = insert_db_record( DBS_VALID, "interswitch_bill_payment_advice", "interswitch_bill_payment_advice_id_seq", advice );
if (out["bill_payment_advice_id"].Long()<1L) {
throw new runtime_error("Failed to create interswitch bill payment advice record");
}
// Initiate interswitch session
CVars setup;
INTW_configure(in, setup);
CVars transaction;
transaction["detail_id"] = out["bill_payment_advice_id"]; transaction["detail_id"].set_valid(true);
transaction["type"] = 1L; /* SendBillPaymentAdvice */ transaction["type"].set_valid(true);
out["transaction_id"] = insert_db_record( DBS_VALID, "interswitch_transaction", "interswitch_transaction_id_seq", transaction );
if (out["transaction_id"].Long()<1L) {
throw new runtime_error("Failed to create interswitch transaction record");
}
char uniqueRef[20];
memset(uniqueRef, 0, 20);
// TransferCode - RequestReference - UniqueRef => request prefix for terminal owner + ID
sprintf( uniqueRef, "%s%s000000", setup["interswitch_pfix"].c_str(), out["transaction_id"].c_str() );
//sprintf( uniqueRef, "%s%09s", setup["interswitch_pfix"].c_str(), out["transaction_id"].c_str() );
transaction["transfer_code"] = uniqueRef; transaction["transfer_code"].set_valid(true);
CVars cxc;
cxc["transfer_code"] = transaction["transfer_code"];
cxc["transfer_code"].set_valid(true);
update_db_record( DBS_VALID, "interswitch_transaction", cxc, out["transaction_id"].Long());
logfmt( logINFO, "Here -> 1");
logfmt( logINFO, "SENDING TRANSACTION - setup[interswitch_tid].c_str() ->%s",setup["interswitch_tid"].c_str());
// Prepare call
const int statusSize = 1024;
char status[statusSize];
char transactionRef[statusSize];
memset(status, 0, statusSize); // Clear?
memset(transactionRef, 0, statusSize); // Clear?
char xtid[12];
sprintf( xtid, "%s", setup["interswitch_tid"].c_str() );
logfmt( logINFO, "SENDING TRANSACTION->%s",xtid);
string result = interswitch_SendBillPaymentAdvice(
setup["interswitch_sep"].c_str(),
xtid,
amount,
paymentitem["paymentcode"].c_str(),
customerId,
uniqueRef,
status,
transactionRef,
CustomerMobile,
CustomerEmail);
CVars advicestatus;
out["status"] = status;
out["ResponseCode"] = result;
out["TransactionRef"] = transactionRef;
// Update status
try
{
transaction["responsecode"] = result; transaction["responsecode"].set_valid(true);
transaction["transactionref"] = transactionRef; transaction["transactionref"].set_valid(true);
update_db_record( DBS_VALID, "interswitch_transaction", transaction, out["transaction_id"].Long());
}
catch ( ... ) { out["status"] = "I see no good response from interswitch"; }
// Success?
if (result=="90000") {
advicestatus["status"] = "5"; advicestatus["status"].set_valid(true);
update_db_record( DBS_VALID, "interswitch_bill_payment_advice", advicestatus, out["bill_payment_advice_id"].Long());
logfmt( logINFO, "Send bill payment advice successful");
ret = PHP_API_OK;
} else {
CVars fr1;
fr1["status"] = "7"; fr1["status"].set_valid( true );
advicestatus["status"] = "7"; advicestatus["status"].set_valid(true);
update_db_record( DBS_VALID, "interswitch_bill_payment_advice", fr1, out["bill_payment_advice_id"].Long());
//ret = -1;
throw new runtime_error("Failed to send bill payment advice");
}
} catch (runtime_error& ex) {
out["status"] = ex.what();
ret = PHP_API_BAD_PARAM;
} catch (bad_parameter) {
out["status"] = "Incorrect parameter";
ret = PHP_API_BAD_PARAM;
} catch ( ... ) {
out["status"] = "Unhandled exception in INTW_sendBillPaymentAdvice";
}
logfmt( logINFO, "/long INTW_sendBillPaymentAdvice(CVars in, CVars &out)");
return ret;
}
//*****************************************************************************/
long INTW_getBillerCategories(CVars in, CVars &out)
{
logfmt( logINFO, "long INTW_getBillerCategories(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
// Initiate interswitch session
CVars setup;
INTW_configure(in, setup);
// Prepare call
const int statusSize = 1024;
char status[statusSize];
ret = interswitch_getBillerCategories(
setup["interswitch_sep"].c_str(),
status,
NULL);
} catch ( ... ) {
out["status"] = "Unhandled exception in INTW_getBillerCategories";
}
logfmt( logINFO, "/long INTW_getBillerCategories(CVars in, CVars &out)");
return ret;
}
//*****************************************************************************/
long INTW_doTransfer(CVars in, CVars &out )
{
logfmt( logINFO, "long INTW_doTransfer(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
// Initiate interswitch session
CVars setup;
INTW_configure(in, setup);
in["action"].set_valid(false);
REQ_STRING( in, "InitiatingEntityCode", 3, 3, "(.*)" );
REQ_LONG( in, "InitiatingAmount", 1, -1 );
REQ_LONG( in, "Fee", 1, -1 );
REQ_LONG( in, "InitiatingChannel", 1, -1 );
REQ_STRING( in, "InitiatingPaymentMethodCode", 2, 2, "(.*)" );
REQ_STRING( in, "InitiatingCurrencyCode", 3, 3, "(.*)" );
REQ_STRING( in, "TerminatingPaymentMethodCode", 2, 2, "(.*)" );
REQ_LONG( in, "TerminatingAmount", 1, -1 );
REQ_STRING( in, "TerminatingCurrencyCode", 3, 3, "(.*)" );
REQ_STRING( in, "TerminatingCountryCode", 2, 2, "(.*)" );
//REQ_STRING( in, "TerminatingEntityCode", 1, 5, "(.*)" );
//REQ_STRING( in, "TerminatingAccountNumber", 1, 50, "(.*)" );
//REQ_STRING( in, "TerminatingAccountType", 2, 2, "(.*)" );
long senderid = REQ_LONG( in, "senderid", 1, -1 );
long recipientid = REQ_LONG( in, "recipientid", 1, -1 );
in["InitiatingEntityCode"]="MBA";
CVars recipient; // Load recipient
//ret = load_db_record( recipient, "SELECT firstname,lastname FROM customer WHERE id = %lu AND status = 1", recipientid);
ret = load_db_record( recipient, "SELECT firstname,lastname,account_no,bank_code,account_type FROM sendmoney_recipient WHERE id = %lu ", recipientid);
if (ret<1L) {
throw new bad_parameter(out, "recipientid");
}
in["TerminatingEntityCode"] = recipient["bank_code"]; in["TerminatingEntityCode"].set_valid( true );
in["TerminatingAccountNumber"] = recipient["account_no"]; in["TerminatingAccountNumber"].set_valid( true );
out["money_transfer_id"] = insert_db_record( DBS_VALID, "interswitch_money_transfer", "interswitch_money_transfer_id_seq", in );
if (out["money_transfer_id"].Long()<1L) {
throw new runtime_error("Failed to create interswitch bill money transfer record");
}
CVars transaction;
transaction["detail_id"] = out["money_transfer_id"]; transaction["detail_id"].set_valid(true);
transaction["type"] = 2L; /* DoTransfer */ transaction["type"].set_valid(true);
out["transaction_id"] = insert_db_record( DBS_VALID, "interswitch_transaction", "interswitch_transaction_id_seq", transaction );
if (out["transaction_id"].Long()<1L) {
throw new runtime_error("Failed to create interswitch transaction record");
}
char xtid[12], uniqueRef[20];
memset(uniqueRef, 0, 20);
// TransferCode - RequestReference - UniqueRef => request prefix for terminal owner + ID
sprintf( uniqueRef, "%s%s000000", setup["interswitch_pfix"].c_str(), out["transaction_id"].c_str() );
transaction["transfer_code"] = uniqueRef; transaction["transfer_code"].set_valid(true);
//sprintf( xtid, "%s", setup["interswitch_tid"].c_str() );
sprintf( xtid, "%s", "MBA" );
CVars sender; // Load sender
ret = load_db_record( sender, "SELECT firstname,lastname FROM customer WHERE id = %lu AND status = 1", senderid);
if (ret<1L) {
throw new bad_parameter(out, "senderid");
}
//in["SenderEmail"] = sender["email"]; in["SenderEmail"].set_valid(true);
//in["BeneficiaryEmail"] = recipient["email"]; in["BeneficiaryEmail"].set_valid(true);
CVars trans_info;
trans_info["Fee"] = in["Fee"];
trans_info["InitiatingAmount"] = in["InitiatingAmount"];
trans_info["InitiatingChannel"] = in["InitiatingChannel"];
trans_info["InitiatingCurrencyCode"] = in["InitiatingCurrencyCode"];
trans_info["InitiatingEntityCode"] = in["InitiatingEntityCode"];
trans_info["InitiatingPaymentMethodCode"] = in["InitiatingPaymentMethodCode"];
trans_info["TerminatingAccountNumber"] = recipient["account_no"]; //in["TerminatingAccountNumber"];
trans_info["TerminatingAccountType"] = recipient["account_type"]; // in["TerminatingAccountType"];
trans_info["TerminatingAmount"] = in["TerminatingAmount"];
trans_info["TerminatingCountryCode"] = in["TerminatingCountryCode"];
trans_info["TerminatingCurrencyCode"] = in["TerminatingCurrencyCode"];
trans_info["TerminatingEntityCode"] = recipient["bank_code"]; //in["TerminatingEntityCode"];
trans_info["TerminatingPaymentMethodCode"] = in["TerminatingPaymentMethodCode"];
trans_info["TransferCode"] = uniqueRef;
trans_info["SenderLastname"] = sender["lastname"];
trans_info["SenderOthernames"] = sender["firstname"];
trans_info["BeneficiaryLastname"] = recipient["lastname"];
trans_info["BeneficiaryOthernames"] = recipient["firstname"];
char status[SAFESTRING_COMMON_BUFFER_SIZE];
memset(status,32,SAFESTRING_COMMON_BUFFER_SIZE);
status[SAFESTRING_COMMON_BUFFER_SIZE] = '\0';
char transCode[SAFESTRING_COMMON_BUFFER_SIZE];
memset(transCode, 0, SAFESTRING_COMMON_BUFFER_SIZE);
sprintf(transCode,""); // ???
string result = interswitch_doTransfer(
setup["interswitch_sep"].c_str(),
xtid,
trans_info,
status);
logfmt(FLOG_MAX, "Return: %s", result.c_str());
logfmt(FLOG_MAX, "Status: %s", status);
out["ResponseCode"] = result;
out["status"] = status;
out["TransferCode"] = in["TransferCode"];
if (result=="90000") {
ret = PHP_API_OK;
out["TransactionReferenceCode"] = status;
out["status"] = "Transfer successful";
} else {
ret = PHP_API_BAD_PARAM;
out["TransactionReferenceCode"] = "";
}
transaction["responsecode"] = out["ResponseCode"]; transaction["responsecode"].set_valid(true);
transaction["transactionref"] = out["TransactionReferenceCode"]; transaction["transactionref"].set_valid(true);
update_db_record( DBS_VALID, "interswitch_transaction", transaction, out["transaction_id"].Long());
} catch (runtime_error& ex) {
out["status"] = ex.what();
ret = PHP_API_BAD_PARAM;
} catch (bad_parameter) {
out["status"] = "Invalid input";
ret = PHP_API_BAD_PARAM;
} catch ( ... ) {
out["status"] = "Unhandled exception in INTW_doTransfer";
ret = PHP_API_BAD_PARAM;
}
logfmt( logINFO, "/long INTW_doTransfer(CVars in, CVars &out)");
return ret;
}
//*****************************************************************************/
long INTW_queryTransaction(CVars in, CVars &out )
{
logfmt( logINFO, "long INTW_queryTransaction(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
// Initiate interswitch session
CVars setup;
INTW_configure(in, setup);
// Prepare call
const int statusSize = SAFESTRING_COMMON_BUFFER_SIZE;
char status[statusSize];
char transactionResponseCode[SAFESTRING_COMMON_BUFFER_SIZE];
long id = REQ_LONG( in, "id", 1, -1 );
char xtid[12];
sprintf( xtid, "%s", setup["interswitch_tid"].c_str() );
CVars advice; // Load advice
ret = load_db_record( advice, "SELECT transfer_code,transactionref FROM interswitch_transaction WHERE id = %lu", id);
if (ret<1L) {
throw new bad_parameter(out, "id");
}
string result = interswitch_queryTransaction(
setup["interswitch_sep"].c_str(),
xtid,
advice["transfer_code"].c_str(),
advice["transactionref"].c_str(),
status,
transactionResponseCode);
out["ResponseCode"] = result;
out["TransactionResponseCode"] = transactionResponseCode;
out["status"] = status;
ret = PHP_API_OK;
advice["responsecode"] = transactionResponseCode; advice["responsecode"].set_valid(true);
update_db_record( DBS_VALID, "interswitch_transaction", advice, id);
} catch (bad_parameter) {
out["status"] = "Invalid ID";
} catch ( ... ) {
out["status"] = "Unhandled exception in INTW_queryTransaction";
}
logfmt( logINFO, "/long INTW_queryTransaction(CVars in, CVars &out)");
return ret;
}
//*****************************************************************************/
+4
View File
@@ -0,0 +1,4 @@
#include <stdsoap2.h>
extern "C" {
SOAP_NMAC struct Namespace namespaces[] = { { NULL, NULL} };
}
+550
View File
@@ -0,0 +1,550 @@
#include <iomanip>
#include <iostream>
#include <cstring>
#include "XmlParser.h"
#include "hmac_sha2.h"
#include "paylidpaylidwsdlBindingProxy.h" // get proxy
#include "paylid.nsmap" // obtain the generated XML namespace mapping table for the InterSwitch service
#define BUFSIZE 1024
using namespace std;
using namespace paylid;
#ifdef TEST
enum { FLOG_NONE,FLOG_FATAL,FLOG_CRITICAL,FLOG_WARN,FLOG_COMMAND,FLOG_MAX };
#define logfmt test_log
#define PREFIX "FAKE:"
class FakeLog {
public:
void SetFileName(const char *str) {
cout << str << endl;
}
};
static FakeLog *plog = new FakeLog();
#else
//#include "general_types.h"
#include "clog.h"
#warning "Including log..."
#endif
void test_log( int level, const char * format, ... ) {
va_list ap;
va_start( ap, format );
vfprintf( stdout, format, ap );
fprintf( stdout, "\n" );
fflush( stdout );
va_end( ap );
}
// Helper to convert hex digit to integer
char dtox(int d) {
if (d>=0 && d<=9) return '0'+d;
if (d>=10 && d<=16) return 'a'-10+d;
return '0'; // not Hex digit
}
// Helper to convert hex digit to integer
int xtod(char c) {
if (c>='0' && c<='9') return c-'0';
if (c>='A' && c<='F') return c-'A'+10;
if (c>='a' && c<='f') return c-'a'+10;
return c=0; // not Hex digit
}
// This is a hashing function
void hash_hmac(const char *key, char *data, char *result) {
unsigned char mac[SHA512_DIGEST_SIZE];
hmac_sha512((unsigned char *)key, strlen(key), (unsigned char *)data, strlen(data), mac, SHA512_DIGEST_SIZE);
for (int i=0; i<SHA512_DIGEST_SIZE; i++) {
unsigned char c = mac[i];
*(result+2*i) = dtox((int)c/16);
*(result+2*i+1) = dtox(c%16);
}
}
// Helper to replace substrings
string& replaceAll(string& context, const string& from, const string& to)
{
size_t lookHere = 0;
size_t foundHere;
while((foundHere = context.find(from, lookHere)) != string::npos)
{
context.replace(foundHere, from.size(), to);
lookHere = foundHere + to.size();
}
return context;
}
// Basic parsing
int ParseResponse(const char *xmlstring,const char *rslCode,const char *what,char *response) {
// <?xml version="1.0" encoding="UTF-8"?><PayLid><TransactionReference>111111111111111</TransactionReference><ResultCryptogram>B7AFD916C387DCF87DB91C9EAA9828DA</ResultCryptogram></PayLid>
using namespace SimpleXMLParser;
string xml(xmlstring);
string lto = "&lt;";
string gto = "&gt;";
string ltr = "<";
string gtr = ">";
xml = replaceAll(xml,lto, ltr);
xml = replaceAll(xml,gto, gtr);
xml = "<PayLid>" + xml + "</PayLid>";
#ifdef TEST
cout << "RSL: " << rslCode << endl;
cout << "RAW: " << xmlstring << endl;
cout << "XML: " << xml << endl;
#endif
int rsl = atoi(rslCode);
// logfmt( FLOG_MAX, "Response: %s", paylid__directAirTimeTopUpResponse_.Data.c_str() );
logfmt( FLOG_MAX, "Response: rsl %d", rsl );
if (rsl!=10000) {
switch (rsl) {
case 20000: strcpy(response,"Invalid terminal ID");break;
case 30000: strcpy(response,"Hash HMAC validation failed");break;
case 40000: strcpy(response,"Service database error");break;
case 50000: strcpy(response,"IP access denied");break;
case 90000: strcpy(response,"Custom base error");break;
default: strcpy(response,"Unknown code"); break;
}
return rsl;
}
XmlParser parser;
const Element& root = parser.Parse(xml.c_str(),strlen(xml.c_str()));
if (root.GetName()!="PayLid") {
#ifdef TEST
cout << "Unknown XML response" << endl;
#endif
return -1;
}
int ret = rsl; // Empty result cryptogram error
const Elements* classes = root.GetChildren();
if(classes != 0) {
for(Elements::const_iterator class_it = classes->begin();class_it != classes->end(); ++class_it) {
if ((*class_it)->GetName()==what) {
const string value = (*class_it)->GetValue();
strcpy(response,value.c_str());
// There is no cryptogram - override
if ((*class_it)->GetName()=="TransResponseCode") {
ret = atoi(value.c_str());
}
if ((*class_it)->GetName()=="delivery_status") {
ret = atoi(value.c_str());
}
} else {
#ifdef TEST
cout << (*class_it)->GetName() << endl;
#endif
}
}
}
return ret;
}
void GenerateUniqueRef(char *buffer,int bSize) {
buffer[0] = 'P';
buffer[1] = 'L';
buffer[2] = 'I';
buffer[3] = 'D';
int i = 4, n = bSize - 4;
time_t seconds;
seconds = time (NULL);
while (seconds>0 && n>0) {
int d = seconds % 10;
buffer[i++] = '0'+d;
seconds /= 10;
n--;
}
while (n>0) {
buffer[i++] = '\0';
n--;
}
}
long storeface_transferFund(const char *endpoint, const char *tid, const char *toDestination, const char *key, char *error) {
//plog->SetFileName( PREFIX"/logs/SendMoneyPayLid.log" );
long result = -1;
string status = "Unknown error";
soap_ssl_init(); /* init OpenSSL (just once) */
paylidwsdlBindingProxy *q = new paylidwsdlBindingProxy();
q->soap_endpoint = endpoint;
paylid__transferFundResponse paylid__transferFundResponse_; // = new paylid__transferFundResponse();
string terminalID(tid);
logfmt( FLOG_MAX, "XML SENT-> %s", toDestination);
string toDestinationString(toDestination);
string data = tid;
data += toDestination;
//logfmt( FLOG_MAX, "DATA-> %s", data.c_str());
// Get hash HMAC
const int mac_512_size = 2*SHA512_DIGEST_SIZE+1;
char hmac[mac_512_size];
memset(hmac,0,mac_512_size);
hash_hmac(key, (char *)data.c_str(), hmac);
logfmt( FLOG_MAX, "HMAC is '%s'", hmac);
if (hmac!=NULL) {
string hmacString(hmac);
if (soap_ssl_client_context(q,SOAP_SSL_SKIP_HOST_CHECK|SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE|SOAP_SSL_NO_AUTHENTICATION,NULL,NULL,NULL,NULL,NULL)) {
soap_print_fault(q, stderr);
status = "Cannoy initalize SOAP/SSL";
strncpy(error,status.c_str(),strlen(error));
return -1L;
}
#ifdef TEST
cout << "terminalID=" << terminalID.c_str() << endl;
cout << "toDestination=" << toDestinationString.c_str() << endl;
cout << "hmac=" << hmacString.c_str() << endl;
#endif
result = SOAP_ERR;
try {
result = q->transferFund(terminalID, toDestinationString, hmacString, paylid__transferFundResponse_);
} catch (...) {
status = "Proxy exception";
}
if (result == SOAP_OK) {
char response[BUFSIZE];
memset(response,0,BUFSIZE);
result = ParseResponse(paylid__transferFundResponse_.Data.c_str(),paylid__transferFundResponse_.Code.c_str(),"TransactionReference",response);
/*
struct paylid__transferFundResponse
{
std::string Code;
std::string Data;
std::string Hmac;
};
*/
char c[32];
sprintf(c, "%d", result);
if (result<0) {
status = "ParseResponse() error: ";
status += c;
} else {
status = response;
}
} else {
if (q!=NULL && q->soap_fault_string()!=NULL) {
status = "Fault string: ";
status += q->soap_fault_string();
}
if (q!=NULL && q->soap_fault_detail()) {
status += "Fault detail: ";
status += q->soap_fault_detail();
}
if (q==NULL) {
status = "Bad proxy";
} else {
//cout << "Unknown error: " << result << endl;
}
}
} else {
status = "Hash HMAC error";
}
//delete paylid__transferFundResponse_;
delete q;
strncpy(error,status.c_str(),strlen(error));
return result;
}
long storeface_checkTransferStatus(const char *endpoint, const char *tid, const char *transactionRef, const char *key, char *error) {
long result = -1;
string status = "Unknown error";
soap_ssl_init(); /* init OpenSSL (just once) */
paylidwsdlBindingProxy *q = new paylidwsdlBindingProxy();
q->soap_endpoint = endpoint;
paylid__checkTransferStatusResponse paylid__checkTransferStatusResponse_;
string terminalID(tid);
//No session key required
string transactionRefString(transactionRef);
// Get hash HMAC
const int mac_512_size = 2*SHA512_DIGEST_SIZE+1;
char hmac[mac_512_size];
memset(hmac,0,mac_512_size);
hash_hmac(key, (char *)tid, hmac);
string hmacString(hmac);
if (soap_ssl_client_context(q,SOAP_SSL_SKIP_HOST_CHECK|SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE|SOAP_SSL_NO_AUTHENTICATION,NULL,NULL,NULL,NULL,NULL)) {
soap_print_fault(q, stderr);
status = "Cannoy initalize SOAP/SSL";
strncpy(error,status.c_str(),strlen(error));
return -1L;
}
result = SOAP_ERR;
try {
result = q->checkTransferStatus(terminalID, transactionRefString, hmacString, paylid__checkTransferStatusResponse_);
} catch (...) {
status = "Proxy exception";
}
if (result == SOAP_OK) {
char response[BUFSIZE];
memset(response,0,BUFSIZE);
result = ParseResponse(paylid__checkTransferStatusResponse_.Data.c_str(),paylid__checkTransferStatusResponse_.Code.c_str(),"TransResponseCode",response);
char c[32];
sprintf(c, "%d", result);
if (result<0) {
status = "ParseResponse() error: ";
status += c;
} else {
status = response;
}
} else {
if (q!=NULL && q->soap_fault_string()!=NULL) {
status = "Fault string: ";
status += q->soap_fault_string();
}
if (q!=NULL && q->soap_fault_detail()) {
status += "Fault detail: ";
status += q->soap_fault_detail();
}
if (q==NULL) {
status = "Bad proxy";
} else {
//cout << "Unknown error: " << result << endl;
}
}
delete q;
strncpy(error,status.c_str(),strlen(error));
return result;
}
long storeface_getAccountBalance(const char *endpoint, const char *tid, const char *key, char *error) {
logfmt( FLOG_MAX, "long storeface_getAccountBalance(const char *endpoint, const char *tid, const char *key, char *error)");
logfmt( FLOG_MAX, "endpoint=%s", endpoint);
int result = -1;
string status = "Unknown error";
soap_ssl_init(); /* init OpenSSL (just once) */
//paylidwsdlBindingProxy *q = new paylidwsdlBindingProxy();
paylidwsdlBindingProxy q;
q.soap_endpoint = endpoint;
paylid__getAccountBalanceResponse paylid__getAccountBalanceResponse_;
string terminalID(tid);
// Get hash HMAC
const int mac_512_size = 2*SHA512_DIGEST_SIZE+1;
char hmac[mac_512_size];
memset(hmac,0,mac_512_size);
hash_hmac(key, (char *)tid, hmac);
if (hmac!=NULL) {
string hmacString(hmac);
if (soap_ssl_client_context(&q,SOAP_SSL_SKIP_HOST_CHECK|SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE|SOAP_SSL_NO_AUTHENTICATION,NULL,NULL,NULL,NULL,NULL)) {
soap_print_fault(&q, stderr);
status = "Cannot initalize SOAP/SSL";
strncpy(error,status.c_str(),strlen(error));
return -1L;
}
#ifdef TEST
cout << "terminalID=" << terminalID.c_str() << endl;
cout << "hmac=" << hmacString.c_str() << endl;
#endif
result = SOAP_ERR; // -1
try {
result = q.getAccountBalance(terminalID, hmacString, paylid__getAccountBalanceResponse_);
} catch (...) {
status = "Proxy exception";
}
logfmt( FLOG_MAX, "SOAP call result = %d", result );
if (result == SOAP_OK) {
char response[BUFSIZE];
memset(response,0,BUFSIZE);
result = ParseResponse(paylid__getAccountBalanceResponse_.Data.c_str(),paylid__getAccountBalanceResponse_.Code.c_str(),"balance",response);
char c[32];
sprintf(c, "%d", result);
if (result<0) {
status = "ParseResponse() error: ";
status += c;
} else {
status = response;
}
} else {/*
if (q!=NULL && q.soap_fault_string()!=NULL) {
status = "Fault string: ";
status += q.soap_fault_string();
}
if (q!=NULL && q.soap_fault_detail()) {
status += "Fault detail: ";
status += q.soap_fault_detail();
}
if (q==NULL) {
status = "Bad proxy";
} else {
//cout << "Unknown error: " << result << endl;
}
*/
}
} else {
status = "Hash hmac error";
}
// WARNING: momory leak!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
q.destroy();
//delete q;
//q = NULL;
strncpy(error,status.c_str(),strlen(error));
logfmt( FLOG_MAX, "/long storeface_getAccountBalance(const char *endpoint, const char *tid, const char *key, char *error)");
return (long)result;
}
long storeface_directAirTimeTopUp(const char *endpoint, const char *tid, const char *topupData, const char *key, char *error, long &delivery_status) {
long result = -1;
string status = "Unknown error";
soap_ssl_init(); /* init OpenSSL (just once) */
paylidwsdlBindingProxy *q = new paylidwsdlBindingProxy();
q->soap_endpoint = endpoint;
paylid__directAirTimeTopUpResponse paylid__directAirTimeTopUpResponse_;
string terminalID(tid);
string topupDataString(topupData);
// Get hash HMAC
const int mac_512_size = 2*SHA512_DIGEST_SIZE+1;
char hmac[mac_512_size];
memset(hmac,0,mac_512_size);
hash_hmac(key, (char *)tid, hmac);
if (hmac!=NULL) {
string hmacString(hmac);
if (soap_ssl_client_context(q,SOAP_SSL_SKIP_HOST_CHECK|SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE|SOAP_SSL_NO_AUTHENTICATION,NULL,NULL,NULL,NULL,NULL)) {
soap_print_fault(q, stderr);
status = "Cannoy initalize SOAP/SSL";
strncpy(error,status.c_str(),strlen(error));
return -1L;
}
delivery_status = 56789;
result = SOAP_ERR;
try {
result = q->directAirTimeTopUp(terminalID, topupDataString, hmacString, paylid__directAirTimeTopUpResponse_);
} catch (...) {
status = "Proxy exception";
}
if (result == SOAP_OK) {
logfmt( FLOG_MAX, "Response: %s", paylid__directAirTimeTopUpResponse_.Data.c_str() );
char response[BUFSIZE];
memset(response,0,BUFSIZE);
result = 1L;
// result = ParseResponse(paylid__directAirTimeTopUpResponse_->return_->c_str(),sessKey,"Balance",response);
//ParseResponse(paylid__directAirTimeTopUpResponse_.Data.c_str(),paylid__directAirTimeTopUpResponse_.Code.c_str(),"result",response);
delivery_status = ParseResponse(paylid__directAirTimeTopUpResponse_.Data.c_str(),paylid__directAirTimeTopUpResponse_.Code.c_str(),"delivery_status",response);
//delivery_status = (long)response;
// delivery_status = 56789;
char c[32];
sprintf(c, "%d", result);
if (result<0) {
status = "ParseResponse() error: ";
status += c;
} else {
status = response;
}
} else {
if (q!=NULL && q->soap_fault_string()!=NULL) {
status = "Fault string: ";
status += q->soap_fault_string();
}
if (q!=NULL && q->soap_fault_detail()) {
status += "Fault detail: ";
status += q->soap_fault_detail();
}
if (q==NULL) {
status = "Bad proxy";
} else {
//cout << "Unknown error: " << result << endl;
}
}
} else {
status = "Hash hmac error";
}
delete q;
strncpy(error,status.c_str(),strlen(error));
return result;
}
#ifdef TEST
int main(void) {
// Common
long ret = 0;
const char *endpoint = "http://oameye.works.storeface.com/rsl/service.php";
const char *tid = "INTERRA001";
// WARNING: Key is case-sensetive!
const char *key = "29832d0e1a51eff1cb673feda90293abec053aa5b81f9649d9ed53de86f79ed7";
const int mac_512_size = 2*SHA512_DIGEST_SIZE+1;
char hmac[mac_512_size];
// 78fa6a576f52342df61628e2ad48f11027c3d619c00c598c1ca1a9ce086febcd603b846da02eaa5f3a77a97478a8fa0d1832afe2ef7a0715629d7f8f2f4140d1
// Specific
const char *account = "4852010016214"; //"00010080023868"; //"0910010905070015"; //"0910010705222055";
char* status = (char *)malloc(BUFSIZE);
memset(status,32,BUFSIZE);
status[BUFSIZE] = '\0';
//memset(hmac,0,mac_512_size);
//hash_hmac(key, (char *)tid, hmac);
cout << "==========================================================" << endl;
cout << "getAccountBalance(tid,hmac,status)" << endl;
ret = storeface_getAccountBalance(endpoint,tid,key,status);
cout << "Return: " << ret << endl << "Status: " << status << endl;
memset(status,32,BUFSIZE);
status[BUFSIZE] = '\0';
char *uniqueRef = (char *)malloc(32);
GenerateUniqueRef(uniqueRef,32);
memset(hmac,0,mac_512_size);
hash_hmac(key, (char *)tid, hmac);
cout << "==========================================================" << endl;
cout << "transferFund(tid,toDestination,hmac)" << endl;
cout << "Unique Reference: " << uniqueRef << endl;
ret = storeface_transferFund(endpoint,tid,uniqueRef,hmac,status); // 100.00
cout << "Return: " << ret << endl << "Status: " << status << endl;
cout << "Unique Reference: " << uniqueRef << endl;
memset(status,32,BUFSIZE);
status[BUFSIZE] = '\0';
memset(hmac,0,mac_512_size);
hash_hmac(key, (char *)tid, hmac);
cout << "==========================================================" << endl;
cout << "checkTransferStatus(tid,transactionRef,hmac,status)" << endl;
cout << "Unique Reference: " << uniqueRef << endl;
ret = storeface_checkTransferStatus(endpoint,tid,uniqueRef,hmac,status);
cout << "Return: " << ret << endl << "Status: " << status << endl;
free(uniqueRef);
free(status);
return 0;
}
#endif
// vi:ts=2
@@ -0,0 +1,875 @@
namespace paylid {
/* PaylidService.h
Generated by wsdl2h 1.2.16 from http://www.paylid.com/rsl/service.php?wsdl and typemap.dat
2020-01-09 17:52:18 GMT
DO NOT INCLUDE THIS FILE DIRECTLY INTO YOUR PROJECT BUILDS
USE THE soapcpp2-GENERATED SOURCE CODE FILES FOR YOUR PROJECT BUILDS
gSOAP XML Web services tools.
Copyright (C) 2001-2010 Robert van Engelen, Genivia Inc. All Rights Reserved.
Part of this software is released under one of the following licenses:
GPL or Genivia's license for commercial use.
*/
/** @page page_notes Build Notes
NOTE:
- Run soapcpp2 on PaylidService.h to generate the SOAP/XML processing logic.
Use soapcpp2 option -I to specify paths for #import
To build with STL, 'stlvector.h' is imported from 'import' dir in package.
Use soapcpp2 option -i to generate improved proxy and server classes.
- Use wsdl2h options -c and -s to generate pure C code or C++ code without STL.
- Use 'typemap.dat' to control namespace bindings and type mappings.
It is strongly recommended to customize the names of the namespace prefixes
generated by wsdl2h. To do so, modify the prefix bindings in the Namespaces
section below and add the modified lines to 'typemap.dat' to rerun wsdl2h.
- Use Doxygen (www.doxygen.org) on this file to generate documentation.
- Use wsdl2h options -nname and -Nname to globally rename the prefix 'ns'.
- Use wsdl2h option -d to enable DOM support for xsd:anyType.
- Use wsdl2h option -g to auto-generate readers and writers for root elements.
- Struct/class members serialized as XML attributes are annotated with a '@'.
- Struct/class members that have a special role are annotated with a '$'.
WARNING:
DO NOT INCLUDE THIS FILE DIRECTLY INTO YOUR PROJECT BUILDS.
USE THE SOURCE CODE FILES GENERATED BY soapcpp2 FOR YOUR PROJECT BUILDS:
THE soapStub.h FILE CONTAINS THIS CONTENT WITHOUT ANNOTATIONS.
LICENSE:
@verbatim
--------------------------------------------------------------------------------
gSOAP XML Web services tools
Copyright (C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
This software is released under one of the following two licenses:
1) GPL or 2) Genivia's license for commercial use.
--------------------------------------------------------------------------------
1) GPL license.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
Author contact information:
engelen@genivia.com / engelen@acm.org
--------------------------------------------------------------------------------
2) A commercial-use license is available from Genivia, Inc., contact@genivia.com
--------------------------------------------------------------------------------
@endverbatim
*/
//gsoapopt w
/******************************************************************************\
* *
* Definitions *
* urn:paylidwsdl *
* *
\******************************************************************************/
/******************************************************************************\
* *
* Import *
* *
\******************************************************************************/
// STL vector containers (use option -s to remove STL dependency)
#import "stlvector.h"
/******************************************************************************\
* *
* Schema Namespaces *
* *
\******************************************************************************/
/* NOTE:
It is strongly recommended to customize the names of the namespace prefixes
generated by wsdl2h. To do so, modify the prefix bindings below and add the
modified lines to typemap.dat to rerun wsdl2h:
paylid = "urn:paylidwsdl"
*/
#define SOAP_NAMESPACE_OF_paylid "urn:paylidwsdl"
//gsoap paylid schema namespace: urn:paylidwsdl
//gsoap paylid schema form: unqualified
/******************************************************************************\
* *
* Built-in Schema Types and Top-Level Elements and Attributes *
* *
\******************************************************************************/
/******************************************************************************\
* *
* Forward Declarations *
* *
\******************************************************************************/
/******************************************************************************\
* *
* Schema Types and Top-Level Elements and Attributes *
* urn:paylidwsdl *
* *
\******************************************************************************/
/******************************************************************************\
* *
* Schema Complex Types and Top-Level Elements *
* urn:paylidwsdl *
* *
\******************************************************************************/
/******************************************************************************\
* *
* Additional Top-Level Elements *
* urn:paylidwsdl *
* *
\******************************************************************************/
/******************************************************************************\
* *
* Additional Top-Level Attributes *
* urn:paylidwsdl *
* *
\******************************************************************************/
/******************************************************************************\
* *
* Services *
* *
\******************************************************************************/
//gsoap paylid service name: paylidwsdlBinding
//gsoap paylid service type: paylidwsdlPortType
//gsoap paylid service port: https://www.paylid.com:443/rsl/service.php
//gsoap paylid service namespace: urn:paylidwsdl
//gsoap paylid service transport: http://schemas.xmlsoap.org/soap/http
/** @mainpage Service Definitions
@section Service_bindings Service Bindings
- @ref paylidwsdlBinding
@section Service_more More Information
- @ref page_notes "Notes"
- @ref page_XMLDataBinding "XML Data Binding"
- @ref SOAP_ENV__Header "SOAP Header Content"
- @ref SOAP_ENV__Detail "SOAP Fault Detail Content" (when applicable)
*/
/**
@page paylidwsdlBinding Binding "paylidwsdlBinding"
@section paylidwsdlBinding_operations Operations of Binding "paylidwsdlBinding"
- @ref paylid__getAccountBalance
- @ref paylid__transferFund
- @ref paylid__checkTransferStatus
- @ref paylid__directAirTimeTopUp
- @ref paylid__currentXrate
- @ref paylid__getAccount
- @ref paylid__getTrxStatus
- @ref paylid__getSupportedBanks
@section paylidwsdlBinding_ports Endpoints of Binding "paylidwsdlBinding"
- https://www.paylid.com:443/rsl/service.php
Note: use wsdl2h option -N to change the service binding prefix name
*/
/******************************************************************************\
* *
* Service Binding *
* paylidwsdlBinding *
* *
\******************************************************************************/
/******************************************************************************\
* *
* Service Operation *
* paylid__getAccountBalance *
* *
\******************************************************************************/
/// Operation response struct "paylid__getAccountBalanceResponse" of service binding "paylidwsdlBinding" operation "paylid__getAccountBalance"
struct paylid__getAccountBalanceResponse
{
std::string Code;
std::string Data;
std::string Hmac;
};
/// Operation "paylid__getAccountBalance" of service binding "paylidwsdlBinding"
/**
Operation details:
Gets account balance
- SOAP RPC encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- SOAP action="urn:paylidwsdl#getAccountBalance"
C stub function (defined in soapClient.c[pp] generated by soapcpp2):
@code
int soap_call_paylid__getAccountBalance(
struct soap *soap,
NULL, // char *endpoint = NULL selects default endpoint for this operation
NULL, // char *action = NULL selects default action for this operation
// request parameters:
std::string terminalID,
std::string hmac,
// response parameters:
struct paylid__getAccountBalanceResponse&
);
@endcode
C server function (called from the service dispatcher defined in soapServer.c[pp]):
@code
int paylid__getAccountBalance(
struct soap *soap,
// request parameters:
std::string terminalID,
std::string hmac,
// response parameters:
struct paylid__getAccountBalanceResponse&
);
@endcode
C++ proxy class (defined in soappaylidwsdlBindingProxy.h):
@code
class paylidwsdlBindingProxy;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes;
C++ service class (defined in soappaylidwsdlBindingService.h):
@code
class paylidwsdlBindingService;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes;
*/
//gsoap paylid service method-style: getAccountBalance rpc
//gsoap paylid service method-encoding: getAccountBalance http://schemas.xmlsoap.org/soap/encoding/
//gsoap paylid service method-action: getAccountBalance urn:paylidwsdl#getAccountBalance
int paylid__getAccountBalance(
std::string terminalID, ///< Request parameter
std::string hmac, ///< Request parameter
struct paylid__getAccountBalanceResponse& ///< Response struct parameter
);
/******************************************************************************\
* *
* Service Operation *
* paylid__transferFund *
* *
\******************************************************************************/
/// Operation response struct "paylid__transferFundResponse" of service binding "paylidwsdlBinding" operation "paylid__transferFund"
struct paylid__transferFundResponse
{
std::string Code;
std::string Data;
std::string Hmac;
};
/// Operation "paylid__transferFund" of service binding "paylidwsdlBinding"
/**
Operation details:
Transfers funds
- SOAP RPC encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- SOAP action="urn:paylidwsdl#transferFund"
C stub function (defined in soapClient.c[pp] generated by soapcpp2):
@code
int soap_call_paylid__transferFund(
struct soap *soap,
NULL, // char *endpoint = NULL selects default endpoint for this operation
NULL, // char *action = NULL selects default action for this operation
// request parameters:
std::string terminalID,
std::string toDestination,
std::string hmac,
// response parameters:
struct paylid__transferFundResponse&
);
@endcode
C server function (called from the service dispatcher defined in soapServer.c[pp]):
@code
int paylid__transferFund(
struct soap *soap,
// request parameters:
std::string terminalID,
std::string toDestination,
std::string hmac,
// response parameters:
struct paylid__transferFundResponse&
);
@endcode
C++ proxy class (defined in soappaylidwsdlBindingProxy.h):
@code
class paylidwsdlBindingProxy;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes;
C++ service class (defined in soappaylidwsdlBindingService.h):
@code
class paylidwsdlBindingService;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes;
*/
//gsoap paylid service method-style: transferFund rpc
//gsoap paylid service method-encoding: transferFund http://schemas.xmlsoap.org/soap/encoding/
//gsoap paylid service method-action: transferFund urn:paylidwsdl#transferFund
int paylid__transferFund(
std::string terminalID, ///< Request parameter
std::string toDestination, ///< Request parameter
std::string hmac, ///< Request parameter
struct paylid__transferFundResponse& ///< Response struct parameter
);
/******************************************************************************\
* *
* Service Operation *
* paylid__checkTransferStatus *
* *
\******************************************************************************/
/// Operation response struct "paylid__checkTransferStatusResponse" of service binding "paylidwsdlBinding" operation "paylid__checkTransferStatus"
struct paylid__checkTransferStatusResponse
{
std::string Code;
std::string Data;
std::string Hmac;
};
/// Operation "paylid__checkTransferStatus" of service binding "paylidwsdlBinding"
/**
Operation details:
Checks money transfer status
- SOAP RPC encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- SOAP action="urn:paylidwsdl#checkTransferStatus"
C stub function (defined in soapClient.c[pp] generated by soapcpp2):
@code
int soap_call_paylid__checkTransferStatus(
struct soap *soap,
NULL, // char *endpoint = NULL selects default endpoint for this operation
NULL, // char *action = NULL selects default action for this operation
// request parameters:
std::string terminalID,
std::string transactionRef,
std::string hmac,
// response parameters:
struct paylid__checkTransferStatusResponse&
);
@endcode
C server function (called from the service dispatcher defined in soapServer.c[pp]):
@code
int paylid__checkTransferStatus(
struct soap *soap,
// request parameters:
std::string terminalID,
std::string transactionRef,
std::string hmac,
// response parameters:
struct paylid__checkTransferStatusResponse&
);
@endcode
C++ proxy class (defined in soappaylidwsdlBindingProxy.h):
@code
class paylidwsdlBindingProxy;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes;
C++ service class (defined in soappaylidwsdlBindingService.h):
@code
class paylidwsdlBindingService;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes;
*/
//gsoap paylid service method-style: checkTransferStatus rpc
//gsoap paylid service method-encoding: checkTransferStatus http://schemas.xmlsoap.org/soap/encoding/
//gsoap paylid service method-action: checkTransferStatus urn:paylidwsdl#checkTransferStatus
int paylid__checkTransferStatus(
std::string terminalID, ///< Request parameter
std::string transactionRef, ///< Request parameter
std::string hmac, ///< Request parameter
struct paylid__checkTransferStatusResponse& ///< Response struct parameter
);
/******************************************************************************\
* *
* Service Operation *
* paylid__directAirTimeTopUp *
* *
\******************************************************************************/
/// Operation response struct "paylid__directAirTimeTopUpResponse" of service binding "paylidwsdlBinding" operation "paylid__directAirTimeTopUp"
struct paylid__directAirTimeTopUpResponse
{
std::string Code;
std::string Data;
std::string Hmac;
};
/// Operation "paylid__directAirTimeTopUp" of service binding "paylidwsdlBinding"
/**
Operation details:
Direct air time top up
- SOAP RPC encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- SOAP action="urn:paylidwsdl#checkTransferStatus"
C stub function (defined in soapClient.c[pp] generated by soapcpp2):
@code
int soap_call_paylid__directAirTimeTopUp(
struct soap *soap,
NULL, // char *endpoint = NULL selects default endpoint for this operation
NULL, // char *action = NULL selects default action for this operation
// request parameters:
std::string terminalID,
std::string topupData,
std::string hmac,
// response parameters:
struct paylid__directAirTimeTopUpResponse&
);
@endcode
C server function (called from the service dispatcher defined in soapServer.c[pp]):
@code
int paylid__directAirTimeTopUp(
struct soap *soap,
// request parameters:
std::string terminalID,
std::string topupData,
std::string hmac,
// response parameters:
struct paylid__directAirTimeTopUpResponse&
);
@endcode
C++ proxy class (defined in soappaylidwsdlBindingProxy.h):
@code
class paylidwsdlBindingProxy;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes;
C++ service class (defined in soappaylidwsdlBindingService.h):
@code
class paylidwsdlBindingService;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes;
*/
//gsoap paylid service method-style: directAirTimeTopUp rpc
//gsoap paylid service method-encoding: directAirTimeTopUp http://schemas.xmlsoap.org/soap/encoding/
//gsoap paylid service method-action: directAirTimeTopUp urn:paylidwsdl#checkTransferStatus
int paylid__directAirTimeTopUp(
std::string terminalID, ///< Request parameter
std::string topupData, ///< Request parameter
std::string hmac, ///< Request parameter
struct paylid__directAirTimeTopUpResponse& ///< Response struct parameter
);
/******************************************************************************\
* *
* Service Operation *
* paylid__currentXrate *
* *
\******************************************************************************/
/// Operation response struct "paylid__currentXrateResponse" of service binding "paylidwsdlBinding" operation "paylid__currentXrate"
struct paylid__currentXrateResponse
{
std::string Code;
std::string Data;
std::string Hmac;
};
/// Operation "paylid__currentXrate" of service binding "paylidwsdlBinding"
/**
Operation details:
Get Current XRAte
- SOAP RPC encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- SOAP action="urn:paylidwsdl#currentXrate"
C stub function (defined in soapClient.c[pp] generated by soapcpp2):
@code
int soap_call_paylid__currentXrate(
struct soap *soap,
NULL, // char *endpoint = NULL selects default endpoint for this operation
NULL, // char *action = NULL selects default action for this operation
// request parameters:
std::string terminalID,
std::string topupData,
std::string hmac,
// response parameters:
struct paylid__currentXrateResponse&
);
@endcode
C server function (called from the service dispatcher defined in soapServer.c[pp]):
@code
int paylid__currentXrate(
struct soap *soap,
// request parameters:
std::string terminalID,
std::string topupData,
std::string hmac,
// response parameters:
struct paylid__currentXrateResponse&
);
@endcode
C++ proxy class (defined in soappaylidwsdlBindingProxy.h):
@code
class paylidwsdlBindingProxy;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes;
C++ service class (defined in soappaylidwsdlBindingService.h):
@code
class paylidwsdlBindingService;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes;
*/
//gsoap paylid service method-style: currentXrate rpc
//gsoap paylid service method-encoding: currentXrate http://schemas.xmlsoap.org/soap/encoding/
//gsoap paylid service method-action: currentXrate urn:paylidwsdl#currentXrate
int paylid__currentXrate(
std::string terminalID, ///< Request parameter
std::string topupData, ///< Request parameter
std::string hmac, ///< Request parameter
struct paylid__currentXrateResponse& ///< Response struct parameter
);
/******************************************************************************\
* *
* Service Operation *
* paylid__getAccount *
* *
\******************************************************************************/
/// Operation response struct "paylid__getAccountResponse" of service binding "paylidwsdlBinding" operation "paylid__getAccount"
struct paylid__getAccountResponse
{
std::string Code;
std::string Data;
std::string Hmac;
};
/// Operation "paylid__getAccount" of service binding "paylidwsdlBinding"
/**
Operation details:
Get Account Properties
- SOAP RPC encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- SOAP action="urn:paylidwsdl#getAccount"
C stub function (defined in soapClient.c[pp] generated by soapcpp2):
@code
int soap_call_paylid__getAccount(
struct soap *soap,
NULL, // char *endpoint = NULL selects default endpoint for this operation
NULL, // char *action = NULL selects default action for this operation
// request parameters:
std::string terminalID,
std::string topupData,
std::string hmac,
// response parameters:
struct paylid__getAccountResponse&
);
@endcode
C server function (called from the service dispatcher defined in soapServer.c[pp]):
@code
int paylid__getAccount(
struct soap *soap,
// request parameters:
std::string terminalID,
std::string topupData,
std::string hmac,
// response parameters:
struct paylid__getAccountResponse&
);
@endcode
C++ proxy class (defined in soappaylidwsdlBindingProxy.h):
@code
class paylidwsdlBindingProxy;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes;
C++ service class (defined in soappaylidwsdlBindingService.h):
@code
class paylidwsdlBindingService;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes;
*/
//gsoap paylid service method-style: getAccount rpc
//gsoap paylid service method-encoding: getAccount http://schemas.xmlsoap.org/soap/encoding/
//gsoap paylid service method-action: getAccount urn:paylidwsdl#getAccount
int paylid__getAccount(
std::string terminalID, ///< Request parameter
std::string topupData, ///< Request parameter
std::string hmac, ///< Request parameter
struct paylid__getAccountResponse & ///< Response struct parameter
);
/******************************************************************************\
* *
* Service Operation *
* paylid__getTrxStatus *
* *
\******************************************************************************/
/// Operation response struct "paylid__getTrxStatusResponse" of service binding "paylidwsdlBinding" operation "paylid__getTrxStatus"
struct paylid__getTrxStatusResponse
{
std::string Code;
std::string Data;
std::string Hmac;
};
/// Operation "paylid__getTrxStatus" of service binding "paylidwsdlBinding"
/**
Operation details:
General Get Transaction Status
- SOAP RPC encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- SOAP action="urn:paylidwsdl#getTrxStatus"
C stub function (defined in soapClient.c[pp] generated by soapcpp2):
@code
int soap_call_paylid__getTrxStatus(
struct soap *soap,
NULL, // char *endpoint = NULL selects default endpoint for this operation
NULL, // char *action = NULL selects default action for this operation
// request parameters:
std::string terminalID,
std::string topupData,
std::string hmac,
// response parameters:
struct paylid__getTrxStatusResponse&
);
@endcode
C server function (called from the service dispatcher defined in soapServer.c[pp]):
@code
int paylid__getTrxStatus(
struct soap *soap,
// request parameters:
std::string terminalID,
std::string topupData,
std::string hmac,
// response parameters:
struct paylid__getTrxStatusResponse&
);
@endcode
C++ proxy class (defined in soappaylidwsdlBindingProxy.h):
@code
class paylidwsdlBindingProxy;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes;
C++ service class (defined in soappaylidwsdlBindingService.h):
@code
class paylidwsdlBindingService;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes;
*/
//gsoap paylid service method-style: getTrxStatus rpc
//gsoap paylid service method-encoding: getTrxStatus http://schemas.xmlsoap.org/soap/encoding/
//gsoap paylid service method-action: getTrxStatus urn:paylidwsdl#getTrxStatus
int paylid__getTrxStatus(
std::string terminalID, ///< Request parameter
std::string topupData, ///< Request parameter
std::string hmac, ///< Request parameter
struct paylid__getTrxStatusResponse& ///< Response struct parameter
);
/******************************************************************************\
* *
* Service Operation *
* paylid__getSupportedBanks *
* *
\******************************************************************************/
/// Operation response struct "paylid__getSupportedBanksResponse" of service binding "paylidwsdlBinding" operation "paylid__getSupportedBanks"
struct paylid__getSupportedBanksResponse
{
std::string Code;
std::string Data;
std::string Hmac;
};
/// Operation "paylid__getSupportedBanks" of service binding "paylidwsdlBinding"
/**
Operation details:
General List of supported banks based on country
- SOAP RPC encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
- SOAP action="urn:paylidwsdl#getSupportedBanks"
C stub function (defined in soapClient.c[pp] generated by soapcpp2):
@code
int soap_call_paylid__getSupportedBanks(
struct soap *soap,
NULL, // char *endpoint = NULL selects default endpoint for this operation
NULL, // char *action = NULL selects default action for this operation
// request parameters:
std::string terminalID,
std::string topupData,
std::string hmac,
// response parameters:
struct paylid__getSupportedBanksResponse&
);
@endcode
C server function (called from the service dispatcher defined in soapServer.c[pp]):
@code
int paylid__getSupportedBanks(
struct soap *soap,
// request parameters:
std::string terminalID,
std::string topupData,
std::string hmac,
// response parameters:
struct paylid__getSupportedBanksResponse&
);
@endcode
C++ proxy class (defined in soappaylidwsdlBindingProxy.h):
@code
class paylidwsdlBindingProxy;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes;
C++ service class (defined in soappaylidwsdlBindingService.h):
@code
class paylidwsdlBindingService;
@endcode
Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes;
*/
//gsoap paylid service method-style: getSupportedBanks rpc
//gsoap paylid service method-encoding: getSupportedBanks http://schemas.xmlsoap.org/soap/encoding/
//gsoap paylid service method-action: getSupportedBanks urn:paylidwsdl#getSupportedBanks
int paylid__getSupportedBanks(
std::string terminalID, ///< Request parameter
std::string topupData, ///< Request parameter
std::string hmac, ///< Request parameter
struct paylid__getSupportedBanksResponse& ///< Response struct parameter
);
/******************************************************************************\
* *
* XML Data Binding *
* *
\******************************************************************************/
/**
@page page_XMLDataBinding XML Data Binding
SOAP/XML services use data bindings contractually bound by WSDL and auto-
generated by wsdl2h and soapcpp2 (see Service Bindings). Plain data bindings
are adopted from XML schemas as part of the WSDL types section or when running
wsdl2h on a set of schemas to produce non-SOAP-based XML data bindings.
The following readers and writers are C/C++ data type (de)serializers auto-
generated by wsdl2h and soapcpp2. Run soapcpp2 on this file to generate the
(de)serialization code, which is stored in soapC.c[pp]. Include "soapH.h" in
your code to import these data type and function declarations. Only use the
soapcpp2-generated files in your project build. Do not include the wsdl2h-
generated .h file in your code.
XML content can be retrieved from:
- a FILE* fd, using soap->recvfd = fd
- a socket, using soap->socket = ...
- a C++ stream, using soap->is = ...
- a buffer, using the soap->frecv() callback
XML content can be stored to:
- a FILE* fd, using soap->sendfd = fd
- a socket, using soap->socket = ...
- a C++ stream, using soap->os = ...
- a buffer, using the soap->fsend() callback
@section paylid Top-level root elements of schema "urn:paylidwsdl"
*/
} // namespace paylid
/* End of PaylidService.h */
@@ -0,0 +1,11 @@
#include "paylidH.h"
SOAP_NMAC struct Namespace paylid_namespaces[] =
{
{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
{"paylid", "urn:paylidwsdl", NULL, NULL},
{NULL, NULL, NULL, NULL}
};
File diff suppressed because it is too large Load Diff
+730
View File
@@ -0,0 +1,730 @@
/* paylidH.h
Generated by gSOAP 2.7.16 from PaylidService.h
Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
This part of the software is released under one of the following licenses:
GPL, the gSOAP public license, or Genivia's license for commercial use.
*/
#ifndef paylidH_H
#define paylidH_H
#include "paylidStub.h"
namespace paylid {
#ifndef WITH_NOIDREF
SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap*, const void*, int);
SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap*, const void*, const char*, int, int);
SOAP_FMAC3 void *SOAP_FMAC4 soap_getelement(struct soap*, int*);
SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap*);
SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap*);
#endif
SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap*);
SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist*);
SOAP_FMAC3 void* SOAP_FMAC4 soap_class_id_enter(struct soap*, const char*, void*, int, size_t, const char*, const char*);
SOAP_FMAC3 void* SOAP_FMAC4 soap_container_id_forward(struct soap*, const char*, void*, size_t, int, int, size_t, unsigned int);
SOAP_FMAC3 void SOAP_FMAC4 soap_container_insert(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_byte
#define SOAP_TYPE_paylid_byte (3)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap*, char *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap*, const char*, int, const char *, const char*);
SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap*, const char*, char *, const char*);
#define soap_write_byte(soap, data) ( soap_begin_send(soap) || paylid::soap_put_byte(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap*, const char *, const char*, const char*);
#define soap_read_byte(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_byte(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap*, char *, const char*, const char*);
#ifndef SOAP_TYPE_paylid_int
#define SOAP_TYPE_paylid_int (1)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap*, int *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap*, const char*, int, const int *, const char*);
SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap*, const char*, int *, const char*);
#define soap_write_int(soap, data) ( soap_begin_send(soap) || paylid::soap_put_int(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap*, const int *, const char*, const char*);
#define soap_read_int(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_int(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap*, int *, const char*, const char*);
#ifndef SOAP_TYPE_paylid_std__string
#define SOAP_TYPE_paylid_std__string (9)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__string(struct soap*, std::string *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__string(struct soap*, const std::string *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__string(struct soap*, const char*, int, const std::string*, const char*);
SOAP_FMAC3 std::string * SOAP_FMAC4 soap_in_std__string(struct soap*, const char*, std::string*, const char*);
#define soap_write_std__string(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_std__string(struct soap*, const std::string *, const char*, const char*);
#define soap_read_std__string(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_std__string(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 std::string * SOAP_FMAC4 soap_get_std__string(struct soap*, std::string *, const char*, const char*);
#define soap_new_std__string(soap, n) soap_instantiate_std__string(soap, n, NULL, NULL, NULL)
#define soap_delete_std__string(soap, p) soap_delete(soap, p)
SOAP_FMAC1 std::string * SOAP_FMAC2 soap_instantiate_std__string(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__string(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef WITH_NOGLOBAL
#ifndef SOAP_TYPE_paylid_SOAP_ENV__Fault
#define SOAP_TYPE_paylid_SOAP_ENV__Fault (48)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Fault(struct soap*, const char*, int, const struct SOAP_ENV__Fault *, const char*);
SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct soap*, const char*, struct SOAP_ENV__Fault *, const char*);
#define soap_write_SOAP_ENV__Fault(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_SOAP_ENV__Fault(soap, data), 0) || paylid::soap_put_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *, const char*, const char*);
#define soap_read_SOAP_ENV__Fault(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *, const char*, const char*);
#define soap_new_SOAP_ENV__Fault(soap, n) soap_instantiate_SOAP_ENV__Fault(soap, n, NULL, NULL, NULL)
#define soap_delete_SOAP_ENV__Fault(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap*, int, int, void*, size_t, const void*, size_t);
#endif
#ifndef WITH_NOGLOBAL
#ifndef SOAP_TYPE_paylid_SOAP_ENV__Reason
#define SOAP_TYPE_paylid_SOAP_ENV__Reason (47)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Reason(struct soap*, const char*, int, const struct SOAP_ENV__Reason *, const char*);
SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason *, const char*);
#define soap_write_SOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_SOAP_ENV__Reason(soap, data), 0) || paylid::soap_put_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *, const char*, const char*);
#define soap_read_SOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *, const char*, const char*);
#define soap_new_SOAP_ENV__Reason(soap, n) soap_instantiate_SOAP_ENV__Reason(soap, n, NULL, NULL, NULL)
#define soap_delete_SOAP_ENV__Reason(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap*, int, int, void*, size_t, const void*, size_t);
#endif
#ifndef WITH_NOGLOBAL
#ifndef SOAP_TYPE_paylid_SOAP_ENV__Detail
#define SOAP_TYPE_paylid_SOAP_ENV__Detail (44)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Detail(struct soap*, const char*, int, const struct SOAP_ENV__Detail *, const char*);
SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail *, const char*);
#define soap_write_SOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_SOAP_ENV__Detail(soap, data), 0) || paylid::soap_put_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *, const char*, const char*);
#define soap_read_SOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *, const char*, const char*);
#define soap_new_SOAP_ENV__Detail(soap, n) soap_instantiate_SOAP_ENV__Detail(soap, n, NULL, NULL, NULL)
#define soap_delete_SOAP_ENV__Detail(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap*, int, int, void*, size_t, const void*, size_t);
#endif
#ifndef WITH_NOGLOBAL
#ifndef SOAP_TYPE_paylid_SOAP_ENV__Code
#define SOAP_TYPE_paylid_SOAP_ENV__Code (42)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Code(struct soap*, const char*, int, const struct SOAP_ENV__Code *, const char*);
SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code *, const char*);
#define soap_write_SOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_SOAP_ENV__Code(soap, data), 0) || paylid::soap_put_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *, const char*, const char*);
#define soap_read_SOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *, const char*, const char*);
#define soap_new_SOAP_ENV__Code(soap, n) soap_instantiate_SOAP_ENV__Code(soap, n, NULL, NULL, NULL)
#define soap_delete_SOAP_ENV__Code(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap*, int, int, void*, size_t, const void*, size_t);
#endif
#ifndef WITH_NOGLOBAL
#ifndef SOAP_TYPE_paylid_SOAP_ENV__Header
#define SOAP_TYPE_paylid_SOAP_ENV__Header (41)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap*, const char*, int, const struct SOAP_ENV__Header *, const char*);
SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap*, const char*, struct SOAP_ENV__Header *, const char*);
#define soap_write_SOAP_ENV__Header(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_SOAP_ENV__Header(soap, data), 0) || paylid::soap_put_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *, const char*, const char*);
#define soap_read_SOAP_ENV__Header(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *, const char*, const char*);
#define soap_new_SOAP_ENV__Header(soap, n) soap_instantiate_SOAP_ENV__Header(soap, n, NULL, NULL, NULL)
#define soap_delete_SOAP_ENV__Header(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Header(struct soap*, int, int, void*, size_t, const void*, size_t);
#endif
#ifndef SOAP_TYPE_paylid_paylid__getSupportedBanks
#define SOAP_TYPE_paylid_paylid__getSupportedBanks (40)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__getSupportedBanks(struct soap*, struct paylid__getSupportedBanks *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__getSupportedBanks(struct soap*, const struct paylid__getSupportedBanks *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__getSupportedBanks(struct soap*, const char*, int, const struct paylid__getSupportedBanks *, const char*);
SOAP_FMAC3 struct paylid__getSupportedBanks * SOAP_FMAC4 soap_in_paylid__getSupportedBanks(struct soap*, const char*, struct paylid__getSupportedBanks *, const char*);
#define soap_write_paylid__getSupportedBanks(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__getSupportedBanks(soap, data), 0) || paylid::soap_put_paylid__getSupportedBanks(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__getSupportedBanks(struct soap*, const struct paylid__getSupportedBanks *, const char*, const char*);
#define soap_read_paylid__getSupportedBanks(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__getSupportedBanks(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__getSupportedBanks * SOAP_FMAC4 soap_get_paylid__getSupportedBanks(struct soap*, struct paylid__getSupportedBanks *, const char*, const char*);
#define soap_new_paylid__getSupportedBanks(soap, n) soap_instantiate_paylid__getSupportedBanks(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__getSupportedBanks(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__getSupportedBanks * SOAP_FMAC2 soap_instantiate_paylid__getSupportedBanks(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__getSupportedBanks(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__getSupportedBanksResponse
#define SOAP_TYPE_paylid_paylid__getSupportedBanksResponse (37)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__getSupportedBanksResponse(struct soap*, struct paylid__getSupportedBanksResponse *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__getSupportedBanksResponse(struct soap*, const struct paylid__getSupportedBanksResponse *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__getSupportedBanksResponse(struct soap*, const char*, int, const struct paylid__getSupportedBanksResponse *, const char*);
SOAP_FMAC3 struct paylid__getSupportedBanksResponse * SOAP_FMAC4 soap_in_paylid__getSupportedBanksResponse(struct soap*, const char*, struct paylid__getSupportedBanksResponse *, const char*);
#define soap_write_paylid__getSupportedBanksResponse(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__getSupportedBanksResponse(soap, data), 0) || paylid::soap_put_paylid__getSupportedBanksResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__getSupportedBanksResponse(struct soap*, const struct paylid__getSupportedBanksResponse *, const char*, const char*);
#define soap_read_paylid__getSupportedBanksResponse(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__getSupportedBanksResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__getSupportedBanksResponse * SOAP_FMAC4 soap_get_paylid__getSupportedBanksResponse(struct soap*, struct paylid__getSupportedBanksResponse *, const char*, const char*);
#define soap_new_paylid__getSupportedBanksResponse(soap, n) soap_instantiate_paylid__getSupportedBanksResponse(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__getSupportedBanksResponse(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__getSupportedBanksResponse * SOAP_FMAC2 soap_instantiate_paylid__getSupportedBanksResponse(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__getSupportedBanksResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__getTrxStatus
#define SOAP_TYPE_paylid_paylid__getTrxStatus (36)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__getTrxStatus(struct soap*, struct paylid__getTrxStatus *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__getTrxStatus(struct soap*, const struct paylid__getTrxStatus *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__getTrxStatus(struct soap*, const char*, int, const struct paylid__getTrxStatus *, const char*);
SOAP_FMAC3 struct paylid__getTrxStatus * SOAP_FMAC4 soap_in_paylid__getTrxStatus(struct soap*, const char*, struct paylid__getTrxStatus *, const char*);
#define soap_write_paylid__getTrxStatus(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__getTrxStatus(soap, data), 0) || paylid::soap_put_paylid__getTrxStatus(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__getTrxStatus(struct soap*, const struct paylid__getTrxStatus *, const char*, const char*);
#define soap_read_paylid__getTrxStatus(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__getTrxStatus(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__getTrxStatus * SOAP_FMAC4 soap_get_paylid__getTrxStatus(struct soap*, struct paylid__getTrxStatus *, const char*, const char*);
#define soap_new_paylid__getTrxStatus(soap, n) soap_instantiate_paylid__getTrxStatus(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__getTrxStatus(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__getTrxStatus * SOAP_FMAC2 soap_instantiate_paylid__getTrxStatus(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__getTrxStatus(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__getTrxStatusResponse
#define SOAP_TYPE_paylid_paylid__getTrxStatusResponse (33)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__getTrxStatusResponse(struct soap*, struct paylid__getTrxStatusResponse *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__getTrxStatusResponse(struct soap*, const struct paylid__getTrxStatusResponse *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__getTrxStatusResponse(struct soap*, const char*, int, const struct paylid__getTrxStatusResponse *, const char*);
SOAP_FMAC3 struct paylid__getTrxStatusResponse * SOAP_FMAC4 soap_in_paylid__getTrxStatusResponse(struct soap*, const char*, struct paylid__getTrxStatusResponse *, const char*);
#define soap_write_paylid__getTrxStatusResponse(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__getTrxStatusResponse(soap, data), 0) || paylid::soap_put_paylid__getTrxStatusResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__getTrxStatusResponse(struct soap*, const struct paylid__getTrxStatusResponse *, const char*, const char*);
#define soap_read_paylid__getTrxStatusResponse(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__getTrxStatusResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__getTrxStatusResponse * SOAP_FMAC4 soap_get_paylid__getTrxStatusResponse(struct soap*, struct paylid__getTrxStatusResponse *, const char*, const char*);
#define soap_new_paylid__getTrxStatusResponse(soap, n) soap_instantiate_paylid__getTrxStatusResponse(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__getTrxStatusResponse(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__getTrxStatusResponse * SOAP_FMAC2 soap_instantiate_paylid__getTrxStatusResponse(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__getTrxStatusResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__getAccount
#define SOAP_TYPE_paylid_paylid__getAccount (32)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__getAccount(struct soap*, struct paylid__getAccount *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__getAccount(struct soap*, const struct paylid__getAccount *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__getAccount(struct soap*, const char*, int, const struct paylid__getAccount *, const char*);
SOAP_FMAC3 struct paylid__getAccount * SOAP_FMAC4 soap_in_paylid__getAccount(struct soap*, const char*, struct paylid__getAccount *, const char*);
#define soap_write_paylid__getAccount(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__getAccount(soap, data), 0) || paylid::soap_put_paylid__getAccount(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__getAccount(struct soap*, const struct paylid__getAccount *, const char*, const char*);
#define soap_read_paylid__getAccount(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__getAccount(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__getAccount * SOAP_FMAC4 soap_get_paylid__getAccount(struct soap*, struct paylid__getAccount *, const char*, const char*);
#define soap_new_paylid__getAccount(soap, n) soap_instantiate_paylid__getAccount(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__getAccount(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__getAccount * SOAP_FMAC2 soap_instantiate_paylid__getAccount(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__getAccount(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__getAccountResponse
#define SOAP_TYPE_paylid_paylid__getAccountResponse (29)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__getAccountResponse(struct soap*, struct paylid__getAccountResponse *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__getAccountResponse(struct soap*, const struct paylid__getAccountResponse *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__getAccountResponse(struct soap*, const char*, int, const struct paylid__getAccountResponse *, const char*);
SOAP_FMAC3 struct paylid__getAccountResponse * SOAP_FMAC4 soap_in_paylid__getAccountResponse(struct soap*, const char*, struct paylid__getAccountResponse *, const char*);
#define soap_write_paylid__getAccountResponse(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__getAccountResponse(soap, data), 0) || paylid::soap_put_paylid__getAccountResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__getAccountResponse(struct soap*, const struct paylid__getAccountResponse *, const char*, const char*);
#define soap_read_paylid__getAccountResponse(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__getAccountResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__getAccountResponse * SOAP_FMAC4 soap_get_paylid__getAccountResponse(struct soap*, struct paylid__getAccountResponse *, const char*, const char*);
#define soap_new_paylid__getAccountResponse(soap, n) soap_instantiate_paylid__getAccountResponse(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__getAccountResponse(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__getAccountResponse * SOAP_FMAC2 soap_instantiate_paylid__getAccountResponse(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__getAccountResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__currentXrate
#define SOAP_TYPE_paylid_paylid__currentXrate (28)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__currentXrate(struct soap*, struct paylid__currentXrate *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__currentXrate(struct soap*, const struct paylid__currentXrate *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__currentXrate(struct soap*, const char*, int, const struct paylid__currentXrate *, const char*);
SOAP_FMAC3 struct paylid__currentXrate * SOAP_FMAC4 soap_in_paylid__currentXrate(struct soap*, const char*, struct paylid__currentXrate *, const char*);
#define soap_write_paylid__currentXrate(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__currentXrate(soap, data), 0) || paylid::soap_put_paylid__currentXrate(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__currentXrate(struct soap*, const struct paylid__currentXrate *, const char*, const char*);
#define soap_read_paylid__currentXrate(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__currentXrate(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__currentXrate * SOAP_FMAC4 soap_get_paylid__currentXrate(struct soap*, struct paylid__currentXrate *, const char*, const char*);
#define soap_new_paylid__currentXrate(soap, n) soap_instantiate_paylid__currentXrate(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__currentXrate(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__currentXrate * SOAP_FMAC2 soap_instantiate_paylid__currentXrate(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__currentXrate(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__currentXrateResponse
#define SOAP_TYPE_paylid_paylid__currentXrateResponse (25)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__currentXrateResponse(struct soap*, struct paylid__currentXrateResponse *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__currentXrateResponse(struct soap*, const struct paylid__currentXrateResponse *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__currentXrateResponse(struct soap*, const char*, int, const struct paylid__currentXrateResponse *, const char*);
SOAP_FMAC3 struct paylid__currentXrateResponse * SOAP_FMAC4 soap_in_paylid__currentXrateResponse(struct soap*, const char*, struct paylid__currentXrateResponse *, const char*);
#define soap_write_paylid__currentXrateResponse(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__currentXrateResponse(soap, data), 0) || paylid::soap_put_paylid__currentXrateResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__currentXrateResponse(struct soap*, const struct paylid__currentXrateResponse *, const char*, const char*);
#define soap_read_paylid__currentXrateResponse(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__currentXrateResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__currentXrateResponse * SOAP_FMAC4 soap_get_paylid__currentXrateResponse(struct soap*, struct paylid__currentXrateResponse *, const char*, const char*);
#define soap_new_paylid__currentXrateResponse(soap, n) soap_instantiate_paylid__currentXrateResponse(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__currentXrateResponse(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__currentXrateResponse * SOAP_FMAC2 soap_instantiate_paylid__currentXrateResponse(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__currentXrateResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__directAirTimeTopUp
#define SOAP_TYPE_paylid_paylid__directAirTimeTopUp (24)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__directAirTimeTopUp(struct soap*, struct paylid__directAirTimeTopUp *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__directAirTimeTopUp(struct soap*, const struct paylid__directAirTimeTopUp *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__directAirTimeTopUp(struct soap*, const char*, int, const struct paylid__directAirTimeTopUp *, const char*);
SOAP_FMAC3 struct paylid__directAirTimeTopUp * SOAP_FMAC4 soap_in_paylid__directAirTimeTopUp(struct soap*, const char*, struct paylid__directAirTimeTopUp *, const char*);
#define soap_write_paylid__directAirTimeTopUp(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__directAirTimeTopUp(soap, data), 0) || paylid::soap_put_paylid__directAirTimeTopUp(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__directAirTimeTopUp(struct soap*, const struct paylid__directAirTimeTopUp *, const char*, const char*);
#define soap_read_paylid__directAirTimeTopUp(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__directAirTimeTopUp(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__directAirTimeTopUp * SOAP_FMAC4 soap_get_paylid__directAirTimeTopUp(struct soap*, struct paylid__directAirTimeTopUp *, const char*, const char*);
#define soap_new_paylid__directAirTimeTopUp(soap, n) soap_instantiate_paylid__directAirTimeTopUp(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__directAirTimeTopUp(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__directAirTimeTopUp * SOAP_FMAC2 soap_instantiate_paylid__directAirTimeTopUp(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__directAirTimeTopUp(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__directAirTimeTopUpResponse
#define SOAP_TYPE_paylid_paylid__directAirTimeTopUpResponse (21)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__directAirTimeTopUpResponse(struct soap*, struct paylid__directAirTimeTopUpResponse *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__directAirTimeTopUpResponse(struct soap*, const struct paylid__directAirTimeTopUpResponse *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__directAirTimeTopUpResponse(struct soap*, const char*, int, const struct paylid__directAirTimeTopUpResponse *, const char*);
SOAP_FMAC3 struct paylid__directAirTimeTopUpResponse * SOAP_FMAC4 soap_in_paylid__directAirTimeTopUpResponse(struct soap*, const char*, struct paylid__directAirTimeTopUpResponse *, const char*);
#define soap_write_paylid__directAirTimeTopUpResponse(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__directAirTimeTopUpResponse(soap, data), 0) || paylid::soap_put_paylid__directAirTimeTopUpResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__directAirTimeTopUpResponse(struct soap*, const struct paylid__directAirTimeTopUpResponse *, const char*, const char*);
#define soap_read_paylid__directAirTimeTopUpResponse(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__directAirTimeTopUpResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__directAirTimeTopUpResponse * SOAP_FMAC4 soap_get_paylid__directAirTimeTopUpResponse(struct soap*, struct paylid__directAirTimeTopUpResponse *, const char*, const char*);
#define soap_new_paylid__directAirTimeTopUpResponse(soap, n) soap_instantiate_paylid__directAirTimeTopUpResponse(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__directAirTimeTopUpResponse(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__directAirTimeTopUpResponse * SOAP_FMAC2 soap_instantiate_paylid__directAirTimeTopUpResponse(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__directAirTimeTopUpResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__checkTransferStatus
#define SOAP_TYPE_paylid_paylid__checkTransferStatus (20)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__checkTransferStatus(struct soap*, struct paylid__checkTransferStatus *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__checkTransferStatus(struct soap*, const struct paylid__checkTransferStatus *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__checkTransferStatus(struct soap*, const char*, int, const struct paylid__checkTransferStatus *, const char*);
SOAP_FMAC3 struct paylid__checkTransferStatus * SOAP_FMAC4 soap_in_paylid__checkTransferStatus(struct soap*, const char*, struct paylid__checkTransferStatus *, const char*);
#define soap_write_paylid__checkTransferStatus(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__checkTransferStatus(soap, data), 0) || paylid::soap_put_paylid__checkTransferStatus(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__checkTransferStatus(struct soap*, const struct paylid__checkTransferStatus *, const char*, const char*);
#define soap_read_paylid__checkTransferStatus(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__checkTransferStatus(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__checkTransferStatus * SOAP_FMAC4 soap_get_paylid__checkTransferStatus(struct soap*, struct paylid__checkTransferStatus *, const char*, const char*);
#define soap_new_paylid__checkTransferStatus(soap, n) soap_instantiate_paylid__checkTransferStatus(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__checkTransferStatus(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__checkTransferStatus * SOAP_FMAC2 soap_instantiate_paylid__checkTransferStatus(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__checkTransferStatus(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__checkTransferStatusResponse
#define SOAP_TYPE_paylid_paylid__checkTransferStatusResponse (17)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__checkTransferStatusResponse(struct soap*, struct paylid__checkTransferStatusResponse *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__checkTransferStatusResponse(struct soap*, const struct paylid__checkTransferStatusResponse *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__checkTransferStatusResponse(struct soap*, const char*, int, const struct paylid__checkTransferStatusResponse *, const char*);
SOAP_FMAC3 struct paylid__checkTransferStatusResponse * SOAP_FMAC4 soap_in_paylid__checkTransferStatusResponse(struct soap*, const char*, struct paylid__checkTransferStatusResponse *, const char*);
#define soap_write_paylid__checkTransferStatusResponse(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__checkTransferStatusResponse(soap, data), 0) || paylid::soap_put_paylid__checkTransferStatusResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__checkTransferStatusResponse(struct soap*, const struct paylid__checkTransferStatusResponse *, const char*, const char*);
#define soap_read_paylid__checkTransferStatusResponse(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__checkTransferStatusResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__checkTransferStatusResponse * SOAP_FMAC4 soap_get_paylid__checkTransferStatusResponse(struct soap*, struct paylid__checkTransferStatusResponse *, const char*, const char*);
#define soap_new_paylid__checkTransferStatusResponse(soap, n) soap_instantiate_paylid__checkTransferStatusResponse(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__checkTransferStatusResponse(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__checkTransferStatusResponse * SOAP_FMAC2 soap_instantiate_paylid__checkTransferStatusResponse(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__checkTransferStatusResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__transferFund
#define SOAP_TYPE_paylid_paylid__transferFund (16)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__transferFund(struct soap*, struct paylid__transferFund *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__transferFund(struct soap*, const struct paylid__transferFund *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__transferFund(struct soap*, const char*, int, const struct paylid__transferFund *, const char*);
SOAP_FMAC3 struct paylid__transferFund * SOAP_FMAC4 soap_in_paylid__transferFund(struct soap*, const char*, struct paylid__transferFund *, const char*);
#define soap_write_paylid__transferFund(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__transferFund(soap, data), 0) || paylid::soap_put_paylid__transferFund(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__transferFund(struct soap*, const struct paylid__transferFund *, const char*, const char*);
#define soap_read_paylid__transferFund(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__transferFund(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__transferFund * SOAP_FMAC4 soap_get_paylid__transferFund(struct soap*, struct paylid__transferFund *, const char*, const char*);
#define soap_new_paylid__transferFund(soap, n) soap_instantiate_paylid__transferFund(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__transferFund(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__transferFund * SOAP_FMAC2 soap_instantiate_paylid__transferFund(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__transferFund(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__transferFundResponse
#define SOAP_TYPE_paylid_paylid__transferFundResponse (13)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__transferFundResponse(struct soap*, struct paylid__transferFundResponse *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__transferFundResponse(struct soap*, const struct paylid__transferFundResponse *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__transferFundResponse(struct soap*, const char*, int, const struct paylid__transferFundResponse *, const char*);
SOAP_FMAC3 struct paylid__transferFundResponse * SOAP_FMAC4 soap_in_paylid__transferFundResponse(struct soap*, const char*, struct paylid__transferFundResponse *, const char*);
#define soap_write_paylid__transferFundResponse(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__transferFundResponse(soap, data), 0) || paylid::soap_put_paylid__transferFundResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__transferFundResponse(struct soap*, const struct paylid__transferFundResponse *, const char*, const char*);
#define soap_read_paylid__transferFundResponse(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__transferFundResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__transferFundResponse * SOAP_FMAC4 soap_get_paylid__transferFundResponse(struct soap*, struct paylid__transferFundResponse *, const char*, const char*);
#define soap_new_paylid__transferFundResponse(soap, n) soap_instantiate_paylid__transferFundResponse(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__transferFundResponse(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__transferFundResponse * SOAP_FMAC2 soap_instantiate_paylid__transferFundResponse(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__transferFundResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__getAccountBalance
#define SOAP_TYPE_paylid_paylid__getAccountBalance (12)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__getAccountBalance(struct soap*, struct paylid__getAccountBalance *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__getAccountBalance(struct soap*, const struct paylid__getAccountBalance *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__getAccountBalance(struct soap*, const char*, int, const struct paylid__getAccountBalance *, const char*);
SOAP_FMAC3 struct paylid__getAccountBalance * SOAP_FMAC4 soap_in_paylid__getAccountBalance(struct soap*, const char*, struct paylid__getAccountBalance *, const char*);
#define soap_write_paylid__getAccountBalance(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__getAccountBalance(soap, data), 0) || paylid::soap_put_paylid__getAccountBalance(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__getAccountBalance(struct soap*, const struct paylid__getAccountBalance *, const char*, const char*);
#define soap_read_paylid__getAccountBalance(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__getAccountBalance(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__getAccountBalance * SOAP_FMAC4 soap_get_paylid__getAccountBalance(struct soap*, struct paylid__getAccountBalance *, const char*, const char*);
#define soap_new_paylid__getAccountBalance(soap, n) soap_instantiate_paylid__getAccountBalance(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__getAccountBalance(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__getAccountBalance * SOAP_FMAC2 soap_instantiate_paylid__getAccountBalance(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__getAccountBalance(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef SOAP_TYPE_paylid_paylid__getAccountBalanceResponse
#define SOAP_TYPE_paylid_paylid__getAccountBalanceResponse (8)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_paylid__getAccountBalanceResponse(struct soap*, struct paylid__getAccountBalanceResponse *);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_paylid__getAccountBalanceResponse(struct soap*, const struct paylid__getAccountBalanceResponse *);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_paylid__getAccountBalanceResponse(struct soap*, const char*, int, const struct paylid__getAccountBalanceResponse *, const char*);
SOAP_FMAC3 struct paylid__getAccountBalanceResponse * SOAP_FMAC4 soap_in_paylid__getAccountBalanceResponse(struct soap*, const char*, struct paylid__getAccountBalanceResponse *, const char*);
#define soap_write_paylid__getAccountBalanceResponse(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_paylid__getAccountBalanceResponse(soap, data), 0) || paylid::soap_put_paylid__getAccountBalanceResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_paylid__getAccountBalanceResponse(struct soap*, const struct paylid__getAccountBalanceResponse *, const char*, const char*);
#define soap_read_paylid__getAccountBalanceResponse(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_paylid__getAccountBalanceResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct paylid__getAccountBalanceResponse * SOAP_FMAC4 soap_get_paylid__getAccountBalanceResponse(struct soap*, struct paylid__getAccountBalanceResponse *, const char*, const char*);
#define soap_new_paylid__getAccountBalanceResponse(soap, n) soap_instantiate_paylid__getAccountBalanceResponse(soap, n, NULL, NULL, NULL)
#define soap_delete_paylid__getAccountBalanceResponse(soap, p) soap_delete(soap, p)
SOAP_FMAC1 struct paylid__getAccountBalanceResponse * SOAP_FMAC2 soap_instantiate_paylid__getAccountBalanceResponse(struct soap*, int, const char*, const char*, size_t*);
SOAP_FMAC3 void SOAP_FMAC4 soap_copy_paylid__getAccountBalanceResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
#ifndef WITH_NOGLOBAL
#ifndef SOAP_TYPE_paylid_PointerToSOAP_ENV__Reason
#define SOAP_TYPE_paylid_PointerToSOAP_ENV__Reason (50)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Reason(struct soap*, const char *, int, struct SOAP_ENV__Reason *const*, const char *);
SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason **, const char*);
#define soap_write_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_PointerToSOAP_ENV__Reason(soap, data), 0) || paylid::soap_put_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*, const char*, const char*);
#define soap_read_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason **, const char*, const char*);
#endif
#ifndef WITH_NOGLOBAL
#ifndef SOAP_TYPE_paylid_PointerToSOAP_ENV__Detail
#define SOAP_TYPE_paylid_PointerToSOAP_ENV__Detail (49)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Detail(struct soap*, const char *, int, struct SOAP_ENV__Detail *const*, const char *);
SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail **, const char*);
#define soap_write_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_PointerToSOAP_ENV__Detail(soap, data), 0) || paylid::soap_put_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*, const char*, const char*);
#define soap_read_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail **, const char*, const char*);
#endif
#ifndef WITH_NOGLOBAL
#ifndef SOAP_TYPE_paylid_PointerToSOAP_ENV__Code
#define SOAP_TYPE_paylid_PointerToSOAP_ENV__Code (43)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Code(struct soap*, const char *, int, struct SOAP_ENV__Code *const*, const char *);
SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code **, const char*);
#define soap_write_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_PointerToSOAP_ENV__Code(soap, data), 0) || paylid::soap_put_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*, const char*, const char*);
#define soap_read_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code **, const char*, const char*);
#endif
#ifndef SOAP_TYPE_paylid__QName
#define SOAP_TYPE_paylid__QName (5)
#endif
#define soap_default__QName(soap, a) soap_default_string(soap, a)
#define soap_serialize__QName(soap, a) soap_serialize_string(soap, a)
SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap*, const char*, int, char*const*, const char*);
SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap*, const char*, char **, const char*);
#define soap_write__QName(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize__QName(soap, data), 0) || paylid::soap_put__QName(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap*, char *const*, const char*, const char*);
#define soap_read__QName(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get__QName(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap*, char **, const char*, const char*);
#ifndef SOAP_TYPE_paylid_string
#define SOAP_TYPE_paylid_string (4)
#endif
SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap*, char **);
SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap*, char *const*);
SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap*, const char*, int, char*const*, const char*);
SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap*, const char*, char **, const char*);
#define soap_write_string(soap, data) ( soap_begin_send(soap) || (paylid::soap_serialize_string(soap, data), 0) || paylid::soap_put_string(soap, data, NULL, NULL) || soap_end_send(soap) )
SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap*, char *const*, const char*, const char*);
#define soap_read_string(soap, data) ( soap_begin_recv(soap) || !paylid::soap_get_string(soap, data, NULL, NULL) || soap_end_recv(soap) )
SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap*, char **, const char*, const char*);
} // namespace paylid
#endif
/* End of paylidH.h */
@@ -0,0 +1,334 @@
/* paylidStub.h
Generated by gSOAP 2.7.16 from PaylidService.h
Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
This part of the software is released under one of the following licenses:
GPL, the gSOAP public license, or Genivia's license for commercial use.
*/
#ifndef paylidStub_H
#define paylidStub_H
#include <vector>
#define SOAP_NAMESPACE_OF_paylid "urn:paylidwsdl"
#ifndef WITH_NONAMESPACES
#define WITH_NONAMESPACES
#endif
#ifndef WITH_NOGLOBAL
#define WITH_NOGLOBAL
#endif
#include "stdsoap2.h"
namespace paylid {
/******************************************************************************\
* *
* Enumerations *
* *
\******************************************************************************/
/******************************************************************************\
* *
* Types with Custom Serializers *
* *
\******************************************************************************/
/******************************************************************************\
* *
* Classes and Structs *
* *
\******************************************************************************/
#if 0 /* volatile type: do not redeclare here */
#endif
#if 0 /* volatile type: do not redeclare here */
#endif
#ifndef SOAP_TYPE_paylid_paylid__getAccountBalanceResponse
#define SOAP_TYPE_paylid_paylid__getAccountBalanceResponse (8)
/* paylid:getAccountBalanceResponse */
struct paylid__getAccountBalanceResponse
{
public:
std::string Code; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* required element of type xsd:string */
std::string Data; /* required element of type xsd:string */
std::string Hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__getAccountBalance
#define SOAP_TYPE_paylid_paylid__getAccountBalance (12)
/* paylid:getAccountBalance */
struct paylid__getAccountBalance
{
public:
std::string terminalID; /* required element of type xsd:string */
std::string hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__transferFundResponse
#define SOAP_TYPE_paylid_paylid__transferFundResponse (13)
/* paylid:transferFundResponse */
struct paylid__transferFundResponse
{
public:
std::string Code; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* required element of type xsd:string */
std::string Data; /* required element of type xsd:string */
std::string Hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__transferFund
#define SOAP_TYPE_paylid_paylid__transferFund (16)
/* paylid:transferFund */
struct paylid__transferFund
{
public:
std::string terminalID; /* required element of type xsd:string */
std::string toDestination; /* required element of type xsd:string */
std::string hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__checkTransferStatusResponse
#define SOAP_TYPE_paylid_paylid__checkTransferStatusResponse (17)
/* paylid:checkTransferStatusResponse */
struct paylid__checkTransferStatusResponse
{
public:
std::string Code; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* required element of type xsd:string */
std::string Data; /* required element of type xsd:string */
std::string Hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__checkTransferStatus
#define SOAP_TYPE_paylid_paylid__checkTransferStatus (20)
/* paylid:checkTransferStatus */
struct paylid__checkTransferStatus
{
public:
std::string terminalID; /* required element of type xsd:string */
std::string transactionRef; /* required element of type xsd:string */
std::string hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__directAirTimeTopUpResponse
#define SOAP_TYPE_paylid_paylid__directAirTimeTopUpResponse (21)
/* paylid:directAirTimeTopUpResponse */
struct paylid__directAirTimeTopUpResponse
{
public:
std::string Code; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* required element of type xsd:string */
std::string Data; /* required element of type xsd:string */
std::string Hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__directAirTimeTopUp
#define SOAP_TYPE_paylid_paylid__directAirTimeTopUp (24)
/* paylid:directAirTimeTopUp */
struct paylid__directAirTimeTopUp
{
public:
std::string terminalID; /* required element of type xsd:string */
std::string topupData; /* required element of type xsd:string */
std::string hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__currentXrateResponse
#define SOAP_TYPE_paylid_paylid__currentXrateResponse (25)
/* paylid:currentXrateResponse */
struct paylid__currentXrateResponse
{
public:
std::string Code; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* required element of type xsd:string */
std::string Data; /* required element of type xsd:string */
std::string Hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__currentXrate
#define SOAP_TYPE_paylid_paylid__currentXrate (28)
/* paylid:currentXrate */
struct paylid__currentXrate
{
public:
std::string terminalID; /* required element of type xsd:string */
std::string topupData; /* required element of type xsd:string */
std::string hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__getAccountResponse
#define SOAP_TYPE_paylid_paylid__getAccountResponse (29)
/* paylid:getAccountResponse */
struct paylid__getAccountResponse
{
public:
std::string Code; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* required element of type xsd:string */
std::string Data; /* required element of type xsd:string */
std::string Hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__getAccount
#define SOAP_TYPE_paylid_paylid__getAccount (32)
/* paylid:getAccount */
struct paylid__getAccount
{
public:
std::string terminalID; /* required element of type xsd:string */
std::string topupData; /* required element of type xsd:string */
std::string hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__getTrxStatusResponse
#define SOAP_TYPE_paylid_paylid__getTrxStatusResponse (33)
/* paylid:getTrxStatusResponse */
struct paylid__getTrxStatusResponse
{
public:
std::string Code; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* required element of type xsd:string */
std::string Data; /* required element of type xsd:string */
std::string Hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__getTrxStatus
#define SOAP_TYPE_paylid_paylid__getTrxStatus (36)
/* paylid:getTrxStatus */
struct paylid__getTrxStatus
{
public:
std::string terminalID; /* required element of type xsd:string */
std::string topupData; /* required element of type xsd:string */
std::string hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__getSupportedBanksResponse
#define SOAP_TYPE_paylid_paylid__getSupportedBanksResponse (37)
/* paylid:getSupportedBanksResponse */
struct paylid__getSupportedBanksResponse
{
public:
std::string Code; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* required element of type xsd:string */
std::string Data; /* required element of type xsd:string */
std::string Hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_paylid__getSupportedBanks
#define SOAP_TYPE_paylid_paylid__getSupportedBanks (40)
/* paylid:getSupportedBanks */
struct paylid__getSupportedBanks
{
public:
std::string terminalID; /* required element of type xsd:string */
std::string topupData; /* required element of type xsd:string */
std::string hmac; /* required element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_SOAP_ENV__Header
#define SOAP_TYPE_paylid_SOAP_ENV__Header (41)
/* SOAP Header: */
struct SOAP_ENV__Header
{
#ifdef WITH_NOEMPTYSTRUCT
private:
char dummy; /* dummy member to enable compilation */
#endif
};
#endif
#ifndef SOAP_TYPE_paylid_SOAP_ENV__Code
#define SOAP_TYPE_paylid_SOAP_ENV__Code (42)
/* SOAP Fault Code: */
struct SOAP_ENV__Code
{
public:
char *SOAP_ENV__Value; /* optional element of type xsd:QName */
struct SOAP_ENV__Code *SOAP_ENV__Subcode; /* optional element of type SOAP-ENV:Code */
};
#endif
#ifndef SOAP_TYPE_paylid_SOAP_ENV__Detail
#define SOAP_TYPE_paylid_SOAP_ENV__Detail (44)
/* SOAP-ENV:Detail */
struct SOAP_ENV__Detail
{
public:
int __type; /* any type of element <fault> (defined below) */
void *fault; /* transient */
char *__any;
};
#endif
#ifndef SOAP_TYPE_paylid_SOAP_ENV__Reason
#define SOAP_TYPE_paylid_SOAP_ENV__Reason (47)
/* SOAP-ENV:Reason */
struct SOAP_ENV__Reason
{
public:
char *SOAP_ENV__Text; /* optional element of type xsd:string */
};
#endif
#ifndef SOAP_TYPE_paylid_SOAP_ENV__Fault
#define SOAP_TYPE_paylid_SOAP_ENV__Fault (48)
/* SOAP Fault: */
struct SOAP_ENV__Fault
{
public:
char *faultcode; /* optional element of type xsd:QName */
char *faultstring; /* optional element of type xsd:string */
char *faultactor; /* optional element of type xsd:string */
struct SOAP_ENV__Detail *detail; /* optional element of type SOAP-ENV:Detail */
struct SOAP_ENV__Code *SOAP_ENV__Code; /* optional element of type SOAP-ENV:Code */
struct SOAP_ENV__Reason *SOAP_ENV__Reason; /* optional element of type SOAP-ENV:Reason */
char *SOAP_ENV__Node; /* optional element of type xsd:string */
char *SOAP_ENV__Role; /* optional element of type xsd:string */
struct SOAP_ENV__Detail *SOAP_ENV__Detail; /* optional element of type SOAP-ENV:Detail */
};
#endif
/******************************************************************************\
* *
* Typedefs *
* *
\******************************************************************************/
#ifndef SOAP_TYPE_paylid__QName
#define SOAP_TYPE_paylid__QName (5)
typedef char *_QName;
#endif
#ifndef SOAP_TYPE_paylid__XML
#define SOAP_TYPE_paylid__XML (6)
typedef char *_XML;
#endif
/******************************************************************************\
* *
* Externals *
* *
\******************************************************************************/
} // namespace paylid
#endif
/* End of paylidStub.h */
@@ -0,0 +1,534 @@
/* paylidpaylidwsdlBindingProxy.cpp
Generated by gSOAP 2.7.16 from PaylidService.h
Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
This part of the software is released under one of the following licenses:
GPL, the gSOAP public license, or Genivia's license for commercial use.
*/
#include "paylidpaylidwsdlBindingProxy.h"
namespace paylid {
paylidwsdlBindingProxy::paylidwsdlBindingProxy()
{ paylidwsdlBindingProxy_init(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT);
}
paylidwsdlBindingProxy::paylidwsdlBindingProxy(const struct soap &_soap) :soap(_soap)
{ }
paylidwsdlBindingProxy::paylidwsdlBindingProxy(soap_mode iomode)
{ paylidwsdlBindingProxy_init(iomode, iomode);
}
paylidwsdlBindingProxy::paylidwsdlBindingProxy(soap_mode imode, soap_mode omode)
{ paylidwsdlBindingProxy_init(imode, omode);
}
void paylidwsdlBindingProxy::paylidwsdlBindingProxy_init(soap_mode imode, soap_mode omode)
{ soap_imode(this, imode);
soap_omode(this, omode);
soap_endpoint = NULL;
static const struct Namespace namespaces[] =
{
{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
{"paylid", "urn:paylidwsdl", NULL, NULL},
{NULL, NULL, NULL, NULL}
};
this->namespaces = namespaces;
}
paylidwsdlBindingProxy::~paylidwsdlBindingProxy()
{ }
void paylidwsdlBindingProxy::destroy()
{ soap_destroy(this);
soap_end(this);
}
void paylidwsdlBindingProxy::soap_noheader()
{ header = NULL;
}
const SOAP_ENV__Fault *paylidwsdlBindingProxy::soap_fault()
{ return (const paylid::SOAP_ENV__Fault*)this->fault;
}
const char *paylidwsdlBindingProxy::soap_fault_string()
{ return *soap_faultstring(this);
}
const char *paylidwsdlBindingProxy::soap_fault_detail()
{ return *soap_faultdetail(this);
}
int paylidwsdlBindingProxy::soap_close_socket()
{ return soap_closesock(this);
}
void paylidwsdlBindingProxy::soap_print_fault(FILE *fd)
{ ::soap_print_fault(this, fd);
}
#ifndef WITH_LEAN
void paylidwsdlBindingProxy::soap_stream_fault(std::ostream& os)
{ ::soap_stream_fault(this, os);
}
char *paylidwsdlBindingProxy::soap_sprint_fault(char *buf, size_t len)
{ return ::soap_sprint_fault(this, buf, len);
}
#endif
int paylidwsdlBindingProxy::getAccountBalance(std::string terminalID, std::string hmac, struct paylid__getAccountBalanceResponse &_param_1)
{ struct soap *soap = this;
struct paylid__getAccountBalance soap_tmp_paylid__getAccountBalance;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#getAccountBalance";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__getAccountBalance.terminalID = terminalID;
soap_tmp_paylid__getAccountBalance.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__getAccountBalance(soap, &soap_tmp_paylid__getAccountBalance);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getAccountBalance(soap, &soap_tmp_paylid__getAccountBalance, "paylid:getAccountBalance", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getAccountBalance(soap, &soap_tmp_paylid__getAccountBalance, "paylid:getAccountBalance", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_1)
return soap_closesock(soap);
soap_default_paylid__getAccountBalanceResponse(soap, &_param_1);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__getAccountBalanceResponse(soap, &_param_1, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::transferFund(std::string terminalID, std::string toDestination, std::string hmac, struct paylid__transferFundResponse &_param_2)
{ struct soap *soap = this;
struct paylid__transferFund soap_tmp_paylid__transferFund;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#transferFund";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__transferFund.terminalID = terminalID;
soap_tmp_paylid__transferFund.toDestination = toDestination;
soap_tmp_paylid__transferFund.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__transferFund(soap, &soap_tmp_paylid__transferFund);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__transferFund(soap, &soap_tmp_paylid__transferFund, "paylid:transferFund", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__transferFund(soap, &soap_tmp_paylid__transferFund, "paylid:transferFund", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_2)
return soap_closesock(soap);
soap_default_paylid__transferFundResponse(soap, &_param_2);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__transferFundResponse(soap, &_param_2, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::checkTransferStatus(std::string terminalID, std::string transactionRef, std::string hmac, struct paylid__checkTransferStatusResponse &_param_3)
{ struct soap *soap = this;
struct paylid__checkTransferStatus soap_tmp_paylid__checkTransferStatus;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#checkTransferStatus";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__checkTransferStatus.terminalID = terminalID;
soap_tmp_paylid__checkTransferStatus.transactionRef = transactionRef;
soap_tmp_paylid__checkTransferStatus.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__checkTransferStatus(soap, &soap_tmp_paylid__checkTransferStatus);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__checkTransferStatus(soap, &soap_tmp_paylid__checkTransferStatus, "paylid:checkTransferStatus", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__checkTransferStatus(soap, &soap_tmp_paylid__checkTransferStatus, "paylid:checkTransferStatus", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_3)
return soap_closesock(soap);
soap_default_paylid__checkTransferStatusResponse(soap, &_param_3);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__checkTransferStatusResponse(soap, &_param_3, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::directAirTimeTopUp(std::string terminalID, std::string topupData, std::string hmac, struct paylid__directAirTimeTopUpResponse &_param_4)
{ struct soap *soap = this;
struct paylid__directAirTimeTopUp soap_tmp_paylid__directAirTimeTopUp;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#checkTransferStatus";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__directAirTimeTopUp.terminalID = terminalID;
soap_tmp_paylid__directAirTimeTopUp.topupData = topupData;
soap_tmp_paylid__directAirTimeTopUp.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__directAirTimeTopUp(soap, &soap_tmp_paylid__directAirTimeTopUp);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__directAirTimeTopUp(soap, &soap_tmp_paylid__directAirTimeTopUp, "paylid:directAirTimeTopUp", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__directAirTimeTopUp(soap, &soap_tmp_paylid__directAirTimeTopUp, "paylid:directAirTimeTopUp", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_4)
return soap_closesock(soap);
soap_default_paylid__directAirTimeTopUpResponse(soap, &_param_4);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__directAirTimeTopUpResponse(soap, &_param_4, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::currentXrate(std::string terminalID, std::string topupData, std::string hmac, struct paylid__currentXrateResponse &_param_5)
{ struct soap *soap = this;
struct paylid__currentXrate soap_tmp_paylid__currentXrate;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#currentXrate";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__currentXrate.terminalID = terminalID;
soap_tmp_paylid__currentXrate.topupData = topupData;
soap_tmp_paylid__currentXrate.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__currentXrate(soap, &soap_tmp_paylid__currentXrate);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__currentXrate(soap, &soap_tmp_paylid__currentXrate, "paylid:currentXrate", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__currentXrate(soap, &soap_tmp_paylid__currentXrate, "paylid:currentXrate", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_5)
return soap_closesock(soap);
soap_default_paylid__currentXrateResponse(soap, &_param_5);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__currentXrateResponse(soap, &_param_5, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::getAccount(std::string terminalID, std::string topupData, std::string hmac, struct paylid__getAccountResponse &_param_6)
{ struct soap *soap = this;
struct paylid__getAccount soap_tmp_paylid__getAccount;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#getAccount";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__getAccount.terminalID = terminalID;
soap_tmp_paylid__getAccount.topupData = topupData;
soap_tmp_paylid__getAccount.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__getAccount(soap, &soap_tmp_paylid__getAccount);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getAccount(soap, &soap_tmp_paylid__getAccount, "paylid:getAccount", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getAccount(soap, &soap_tmp_paylid__getAccount, "paylid:getAccount", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_6)
return soap_closesock(soap);
soap_default_paylid__getAccountResponse(soap, &_param_6);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__getAccountResponse(soap, &_param_6, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::getTrxStatus(std::string terminalID, std::string topupData, std::string hmac, struct paylid__getTrxStatusResponse &_param_7)
{ struct soap *soap = this;
struct paylid__getTrxStatus soap_tmp_paylid__getTrxStatus;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#getTrxStatus";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__getTrxStatus.terminalID = terminalID;
soap_tmp_paylid__getTrxStatus.topupData = topupData;
soap_tmp_paylid__getTrxStatus.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__getTrxStatus(soap, &soap_tmp_paylid__getTrxStatus);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getTrxStatus(soap, &soap_tmp_paylid__getTrxStatus, "paylid:getTrxStatus", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getTrxStatus(soap, &soap_tmp_paylid__getTrxStatus, "paylid:getTrxStatus", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_7)
return soap_closesock(soap);
soap_default_paylid__getTrxStatusResponse(soap, &_param_7);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__getTrxStatusResponse(soap, &_param_7, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::getSupportedBanks(std::string terminalID, std::string topupData, std::string hmac, struct paylid__getSupportedBanksResponse &_param_8)
{ struct soap *soap = this;
struct paylid__getSupportedBanks soap_tmp_paylid__getSupportedBanks;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#getSupportedBanks";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__getSupportedBanks.terminalID = terminalID;
soap_tmp_paylid__getSupportedBanks.topupData = topupData;
soap_tmp_paylid__getSupportedBanks.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__getSupportedBanks(soap, &soap_tmp_paylid__getSupportedBanks);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getSupportedBanks(soap, &soap_tmp_paylid__getSupportedBanks, "paylid:getSupportedBanks", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getSupportedBanks(soap, &soap_tmp_paylid__getSupportedBanks, "paylid:getSupportedBanks", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_8)
return soap_closesock(soap);
soap_default_paylid__getSupportedBanksResponse(soap, &_param_8);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__getSupportedBanksResponse(soap, &_param_8, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
} // namespace paylid
/* End of client proxy code */
@@ -0,0 +1,78 @@
/* paylidpaylidwsdlBindingProxy.h
Generated by gSOAP 2.7.16 from PaylidService.h
Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
This part of the software is released under one of the following licenses:
GPL, the gSOAP public license, or Genivia's license for commercial use.
*/
#ifndef paylidpaylidwsdlBindingProxy_H
#define paylidpaylidwsdlBindingProxy_H
#include "paylidH.h"
namespace paylid {
class SOAP_CMAC paylidwsdlBindingProxy : public soap
{ public:
/// Endpoint URL of service 'paylidwsdlBindingProxy' (change as needed)
const char *soap_endpoint;
/// Constructor
paylidwsdlBindingProxy();
/// Constructor with copy of another engine state
paylidwsdlBindingProxy(const struct soap&);
/// Constructor with engine input+output mode control
paylidwsdlBindingProxy(soap_mode iomode);
/// Constructor with engine input and output mode control
paylidwsdlBindingProxy(soap_mode imode, soap_mode omode);
/// Destructor frees deserialized data
virtual ~paylidwsdlBindingProxy();
/// Initializer used by constructors
virtual void paylidwsdlBindingProxy_init(soap_mode imode, soap_mode omode);
/// Delete all deserialized data (uses soap_destroy and soap_end)
virtual void destroy();
/// Disables and removes SOAP Header from message
virtual void soap_noheader();
/// Get SOAP Fault structure (NULL when absent)
virtual const SOAP_ENV__Fault *soap_fault();
/// Get SOAP Fault string (NULL when absent)
virtual const char *soap_fault_string();
/// Get SOAP Fault detail as string (NULL when absent)
virtual const char *soap_fault_detail();
/// Force close connection (normally automatic, except for send_X ops)
virtual int soap_close_socket();
/// Print fault
virtual void soap_print_fault(FILE*);
#ifndef WITH_LEAN
/// Print fault to stream
virtual void soap_stream_fault(std::ostream&);
/// Put fault into buffer
virtual char *soap_sprint_fault(char *buf, size_t len);
#endif
/// Web service operation 'getAccountBalance' (returns error code or SOAP_OK)
virtual int getAccountBalance(std::string terminalID, std::string hmac, struct paylid__getAccountBalanceResponse &_param_1);
/// Web service operation 'transferFund' (returns error code or SOAP_OK)
virtual int transferFund(std::string terminalID, std::string toDestination, std::string hmac, struct paylid__transferFundResponse &_param_2);
/// Web service operation 'checkTransferStatus' (returns error code or SOAP_OK)
virtual int checkTransferStatus(std::string terminalID, std::string transactionRef, std::string hmac, struct paylid__checkTransferStatusResponse &_param_3);
/// Web service operation 'directAirTimeTopUp' (returns error code or SOAP_OK)
virtual int directAirTimeTopUp(std::string terminalID, std::string topupData, std::string hmac, struct paylid__directAirTimeTopUpResponse &_param_4);
/// Web service operation 'currentXrate' (returns error code or SOAP_OK)
virtual int currentXrate(std::string terminalID, std::string topupData, std::string hmac, struct paylid__currentXrateResponse &_param_5);
/// Web service operation 'getAccount' (returns error code or SOAP_OK)
virtual int getAccount(std::string terminalID, std::string topupData, std::string hmac, struct paylid__getAccountResponse &_param_6);
/// Web service operation 'getTrxStatus' (returns error code or SOAP_OK)
virtual int getTrxStatus(std::string terminalID, std::string topupData, std::string hmac, struct paylid__getTrxStatusResponse &_param_7);
/// Web service operation 'getSupportedBanks' (returns error code or SOAP_OK)
virtual int getSupportedBanks(std::string terminalID, std::string topupData, std::string hmac, struct paylid__getSupportedBanksResponse &_param_8);
};
} // namespace paylid
#endif
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:checkTransferStatus>
<terminalID></terminalID>
<transactionRef></transactionRef>
<hmac></hmac>
</paylid:checkTransferStatus>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:checkTransferStatusResponse>
<Code></Code>
<Data></Data>
<Hmac></Hmac>
</paylid:checkTransferStatusResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:currentXrate>
<terminalID></terminalID>
<topupData></topupData>
<hmac></hmac>
</paylid:currentXrate>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:currentXrateResponse>
<Code></Code>
<Data></Data>
<Hmac></Hmac>
</paylid:currentXrateResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:directAirTimeTopUp>
<terminalID></terminalID>
<topupData></topupData>
<hmac></hmac>
</paylid:directAirTimeTopUp>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:directAirTimeTopUpResponse>
<Code></Code>
<Data></Data>
<Hmac></Hmac>
</paylid:directAirTimeTopUpResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:getAccount>
<terminalID></terminalID>
<topupData></topupData>
<hmac></hmac>
</paylid:getAccount>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:getAccountResponse>
<Code></Code>
<Data></Data>
<Hmac></Hmac>
</paylid:getAccountResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:getAccountBalance>
<terminalID></terminalID>
<hmac></hmac>
</paylid:getAccountBalance>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:getAccountBalanceResponse>
<Code></Code>
<Data></Data>
<Hmac></Hmac>
</paylid:getAccountBalanceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:getSupportedBanks>
<terminalID></terminalID>
<topupData></topupData>
<hmac></hmac>
</paylid:getSupportedBanks>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:getSupportedBanksResponse>
<Code></Code>
<Data></Data>
<Hmac></Hmac>
</paylid:getSupportedBanksResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:getTrxStatus>
<terminalID></terminalID>
<topupData></topupData>
<hmac></hmac>
</paylid:getTrxStatus>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:getTrxStatusResponse>
<Code></Code>
<Data></Data>
<Hmac></Hmac>
</paylid:getTrxStatusResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:transferFund>
<terminalID></terminalID>
<toDestination></toDestination>
<hmac></hmac>
</paylid:transferFund>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:paylid="urn:paylidwsdl">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<paylid:transferFundResponse>
<Code></Code>
<Data></Data>
<Hmac></Hmac>
</paylid:transferFundResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,534 @@
/* paylidpaylidwsdlBindingProxy.cpp
Generated by gSOAP 2.7.16 from PaylidService.h
Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
This part of the software is released under one of the following licenses:
GPL, the gSOAP public license, or Genivia's license for commercial use.
*/
#include "paylidpaylidwsdlBindingProxy.h"
namespace paylid {
paylidwsdlBindingProxy::paylidwsdlBindingProxy()
{ paylidwsdlBindingProxy_init(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT);
}
paylidwsdlBindingProxy::paylidwsdlBindingProxy(const struct soap &_soap) :soap(_soap)
{ }
paylidwsdlBindingProxy::paylidwsdlBindingProxy(soap_mode iomode)
{ paylidwsdlBindingProxy_init(iomode, iomode);
}
paylidwsdlBindingProxy::paylidwsdlBindingProxy(soap_mode imode, soap_mode omode)
{ paylidwsdlBindingProxy_init(imode, omode);
}
void paylidwsdlBindingProxy::paylidwsdlBindingProxy_init(soap_mode imode, soap_mode omode)
{ soap_imode(this, imode);
soap_omode(this, omode);
soap_endpoint = NULL;
static const struct Namespace namespaces[] =
{
{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
{"paylid", "urn:paylidwsdl", NULL, NULL},
{NULL, NULL, NULL, NULL}
};
this->namespaces = namespaces;
}
paylidwsdlBindingProxy::~paylidwsdlBindingProxy()
{ }
void paylidwsdlBindingProxy::destroy()
{ soap_destroy(this);
soap_end(this);
}
void paylidwsdlBindingProxy::soap_noheader()
{ header = NULL;
}
const SOAP_ENV__Fault *paylidwsdlBindingProxy::soap_fault()
{ return (const paylid::SOAP_ENV__Fault*)this->fault;
}
const char *paylidwsdlBindingProxy::soap_fault_string()
{ return *soap_faultstring(this);
}
const char *paylidwsdlBindingProxy::soap_fault_detail()
{ return *soap_faultdetail(this);
}
int paylidwsdlBindingProxy::soap_close_socket()
{ return soap_closesock(this);
}
void paylidwsdlBindingProxy::soap_print_fault(FILE *fd)
{ ::soap_print_fault(this, fd);
}
#ifndef WITH_LEAN
void paylidwsdlBindingProxy::soap_stream_fault(std::ostream& os)
{ ::soap_stream_fault(this, os);
}
char *paylidwsdlBindingProxy::soap_sprint_fault(char *buf, size_t len)
{ return ::soap_sprint_fault(this, buf, len);
}
#endif
int paylidwsdlBindingProxy::getAccountBalance(std::string terminalID, std::string hmac, struct paylid__getAccountBalanceResponse &_param_1)
{ struct soap *soap = this;
struct paylid__getAccountBalance soap_tmp_paylid__getAccountBalance;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#getAccountBalance";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__getAccountBalance.terminalID = terminalID;
soap_tmp_paylid__getAccountBalance.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__getAccountBalance(soap, &soap_tmp_paylid__getAccountBalance);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getAccountBalance(soap, &soap_tmp_paylid__getAccountBalance, "paylid:getAccountBalance", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getAccountBalance(soap, &soap_tmp_paylid__getAccountBalance, "paylid:getAccountBalance", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_1)
return soap_closesock(soap);
soap_default_paylid__getAccountBalanceResponse(soap, &_param_1);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__getAccountBalanceResponse(soap, &_param_1, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::transferFund(std::string terminalID, std::string toDestination, std::string hmac, struct paylid__transferFundResponse &_param_2)
{ struct soap *soap = this;
struct paylid__transferFund soap_tmp_paylid__transferFund;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#transferFund";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__transferFund.terminalID = terminalID;
soap_tmp_paylid__transferFund.toDestination = toDestination;
soap_tmp_paylid__transferFund.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__transferFund(soap, &soap_tmp_paylid__transferFund);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__transferFund(soap, &soap_tmp_paylid__transferFund, "paylid:transferFund", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__transferFund(soap, &soap_tmp_paylid__transferFund, "paylid:transferFund", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_2)
return soap_closesock(soap);
soap_default_paylid__transferFundResponse(soap, &_param_2);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__transferFundResponse(soap, &_param_2, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::checkTransferStatus(std::string terminalID, std::string transactionRef, std::string hmac, struct paylid__checkTransferStatusResponse &_param_3)
{ struct soap *soap = this;
struct paylid__checkTransferStatus soap_tmp_paylid__checkTransferStatus;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#checkTransferStatus";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__checkTransferStatus.terminalID = terminalID;
soap_tmp_paylid__checkTransferStatus.transactionRef = transactionRef;
soap_tmp_paylid__checkTransferStatus.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__checkTransferStatus(soap, &soap_tmp_paylid__checkTransferStatus);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__checkTransferStatus(soap, &soap_tmp_paylid__checkTransferStatus, "paylid:checkTransferStatus", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__checkTransferStatus(soap, &soap_tmp_paylid__checkTransferStatus, "paylid:checkTransferStatus", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_3)
return soap_closesock(soap);
soap_default_paylid__checkTransferStatusResponse(soap, &_param_3);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__checkTransferStatusResponse(soap, &_param_3, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::directAirTimeTopUp(std::string terminalID, std::string topupData, std::string hmac, struct paylid__directAirTimeTopUpResponse &_param_4)
{ struct soap *soap = this;
struct paylid__directAirTimeTopUp soap_tmp_paylid__directAirTimeTopUp;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#checkTransferStatus";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__directAirTimeTopUp.terminalID = terminalID;
soap_tmp_paylid__directAirTimeTopUp.topupData = topupData;
soap_tmp_paylid__directAirTimeTopUp.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__directAirTimeTopUp(soap, &soap_tmp_paylid__directAirTimeTopUp);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__directAirTimeTopUp(soap, &soap_tmp_paylid__directAirTimeTopUp, "paylid:directAirTimeTopUp", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__directAirTimeTopUp(soap, &soap_tmp_paylid__directAirTimeTopUp, "paylid:directAirTimeTopUp", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_4)
return soap_closesock(soap);
soap_default_paylid__directAirTimeTopUpResponse(soap, &_param_4);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__directAirTimeTopUpResponse(soap, &_param_4, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::currentXrate(std::string terminalID, std::string topupData, std::string hmac, struct paylid__currentXrateResponse &_param_5)
{ struct soap *soap = this;
struct paylid__currentXrate soap_tmp_paylid__currentXrate;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#currentXrate";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__currentXrate.terminalID = terminalID;
soap_tmp_paylid__currentXrate.topupData = topupData;
soap_tmp_paylid__currentXrate.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__currentXrate(soap, &soap_tmp_paylid__currentXrate);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__currentXrate(soap, &soap_tmp_paylid__currentXrate, "paylid:currentXrate", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__currentXrate(soap, &soap_tmp_paylid__currentXrate, "paylid:currentXrate", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_5)
return soap_closesock(soap);
soap_default_paylid__currentXrateResponse(soap, &_param_5);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__currentXrateResponse(soap, &_param_5, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::getAccount(std::string terminalID, std::string topupData, std::string hmac, struct paylid__getAccountResponse &_param_6)
{ struct soap *soap = this;
struct paylid__getAccount soap_tmp_paylid__getAccount;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#getAccount";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__getAccount.terminalID = terminalID;
soap_tmp_paylid__getAccount.topupData = topupData;
soap_tmp_paylid__getAccount.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__getAccount(soap, &soap_tmp_paylid__getAccount);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getAccount(soap, &soap_tmp_paylid__getAccount, "paylid:getAccount", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getAccount(soap, &soap_tmp_paylid__getAccount, "paylid:getAccount", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_6)
return soap_closesock(soap);
soap_default_paylid__getAccountResponse(soap, &_param_6);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__getAccountResponse(soap, &_param_6, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::getTrxStatus(std::string terminalID, std::string topupData, std::string hmac, struct paylid__getTrxStatusResponse &_param_7)
{ struct soap *soap = this;
struct paylid__getTrxStatus soap_tmp_paylid__getTrxStatus;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#getTrxStatus";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__getTrxStatus.terminalID = terminalID;
soap_tmp_paylid__getTrxStatus.topupData = topupData;
soap_tmp_paylid__getTrxStatus.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__getTrxStatus(soap, &soap_tmp_paylid__getTrxStatus);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getTrxStatus(soap, &soap_tmp_paylid__getTrxStatus, "paylid:getTrxStatus", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getTrxStatus(soap, &soap_tmp_paylid__getTrxStatus, "paylid:getTrxStatus", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_7)
return soap_closesock(soap);
soap_default_paylid__getTrxStatusResponse(soap, &_param_7);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__getTrxStatusResponse(soap, &_param_7, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
int paylidwsdlBindingProxy::getSupportedBanks(std::string terminalID, std::string topupData, std::string hmac, struct paylid__getSupportedBanksResponse &_param_8)
{ struct soap *soap = this;
struct paylid__getSupportedBanks soap_tmp_paylid__getSupportedBanks;
const char *soap_action = NULL;
if (!soap_endpoint)
soap_endpoint = "https://www.paylid.com:443/rsl/service.php";
soap_action = "urn:paylidwsdl#getSupportedBanks";
soap->encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
soap_tmp_paylid__getSupportedBanks.terminalID = terminalID;
soap_tmp_paylid__getSupportedBanks.topupData = topupData;
soap_tmp_paylid__getSupportedBanks.hmac = hmac;
soap_begin(soap);
soap_serializeheader(soap);
soap_serialize_paylid__getSupportedBanks(soap, &soap_tmp_paylid__getSupportedBanks);
if (soap_begin_count(soap))
return soap->error;
if (soap->mode & SOAP_IO_LENGTH)
{ if (soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getSupportedBanks(soap, &soap_tmp_paylid__getSupportedBanks, "paylid:getSupportedBanks", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap))
return soap->error;
}
if (soap_end_count(soap))
return soap->error;
if (soap_connect(soap, soap_endpoint, soap_action)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| soap_put_paylid__getSupportedBanks(soap, &soap_tmp_paylid__getSupportedBanks, "paylid:getSupportedBanks", NULL)
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap_closesock(soap);
if (!&_param_8)
return soap_closesock(soap);
soap_default_paylid__getSupportedBanksResponse(soap, &_param_8);
if (soap_begin_recv(soap)
|| soap_envelope_begin_in(soap)
|| soap_recv_header(soap)
|| soap_body_begin_in(soap))
return soap_closesock(soap);
if (soap_recv_fault(soap, 1))
return soap->error;
soap_get_paylid__getSupportedBanksResponse(soap, &_param_8, "", "");
if (soap->error)
return soap_recv_fault(soap, 0);
if (soap_body_end_in(soap)
|| soap_envelope_end_in(soap)
|| soap_end_recv(soap))
return soap_closesock(soap);
return soap_closesock(soap);
}
} // namespace paylid
/* End of client proxy code */
@@ -0,0 +1 @@
namespace interswitch {
@@ -0,0 +1,12 @@
#include "interswitchH.h"
SOAP_NMAC struct Namespace interswitch_namespaces[] =
{
{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://schemas.xmlsoap.org/soap/envelope/", NULL},
{"SOAP-ENC", "http://www.w3.org/2003/05/soap-encoding", "http://www.w3.org/2003/05/soap-encoding", NULL},
{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
{"interswitch2", "http://schemas.microsoft.com/2003/10/Serialization/", NULL, NULL},
{"interswitch", "http://services.interswitchng.com/quicktellerservice/", NULL, NULL},
{NULL, NULL, NULL, NULL}
};
@@ -0,0 +1,171 @@
/* interswitchBasicHttpBinding_USCOREQuickTellerServiceProxy.h
Generated by gSOAP 2.7.16 from QuickTellerService.h
Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
This part of the software is released under one of the following licenses:
GPL, the gSOAP public license, or Genivia's license for commercial use.
*/
#ifndef interswitchBasicHttpBinding_USCOREQuickTellerServiceProxy_H
#define interswitchBasicHttpBinding_USCOREQuickTellerServiceProxy_H
#include "interswitchH.h"
namespace interswitch {
class SOAP_CMAC BasicHttpBinding_USCOREQuickTellerServiceProxy : public soap
{ public:
/// Endpoint URL of service 'BasicHttpBinding_USCOREQuickTellerServiceProxy' (change as needed)
const char *soap_endpoint;
/// Constructor
BasicHttpBinding_USCOREQuickTellerServiceProxy();
/// Constructor with copy of another engine state
BasicHttpBinding_USCOREQuickTellerServiceProxy(const struct soap&);
/// Constructor with engine input+output mode control
BasicHttpBinding_USCOREQuickTellerServiceProxy(soap_mode iomode);
/// Constructor with engine input and output mode control
BasicHttpBinding_USCOREQuickTellerServiceProxy(soap_mode imode, soap_mode omode);
/// Destructor frees deserialized data
virtual ~BasicHttpBinding_USCOREQuickTellerServiceProxy();
/// Initializer used by constructors
virtual void BasicHttpBinding_USCOREQuickTellerServiceProxy_init(soap_mode imode, soap_mode omode);
/// Delete all deserialized data (uses soap_destroy and soap_end)
virtual void destroy();
/// Disables and removes SOAP Header from message
virtual void soap_noheader();
/// Get SOAP Fault structure (NULL when absent)
virtual const SOAP_ENV__Fault *soap_fault();
/// Get SOAP Fault string (NULL when absent)
virtual const char *soap_fault_string();
/// Get SOAP Fault detail as string (NULL when absent)
virtual const char *soap_fault_detail();
/// Force close connection (normally automatic, except for send_X ops)
virtual int soap_close_socket();
/// Print fault
virtual void soap_print_fault(FILE*);
#ifndef WITH_LEAN
/// Print fault to stream
virtual void soap_stream_fault(std::ostream&);
/// Put fault into buffer
virtual char *soap_sprint_fault(char *buf, size_t len);
#endif
/// Web service operation 'ValidateCustomer' (returns error code or SOAP_OK)
virtual int ValidateCustomer(_interswitch__ValidateCustomer *interswitch__ValidateCustomer, _interswitch__ValidateCustomerResponse *interswitch__ValidateCustomerResponse);
/// Web service operation 'DoTransfer' (returns error code or SOAP_OK)
virtual int DoTransfer(_interswitch__DoTransfer *interswitch__DoTransfer, _interswitch__DoTransferResponse *interswitch__DoTransferResponse);
/// Web service operation 'CancelTransfer' (returns error code or SOAP_OK)
virtual int CancelTransfer(_interswitch__CancelTransfer *interswitch__CancelTransfer, _interswitch__CancelTransferResponse *interswitch__CancelTransferResponse);
/// Web service operation 'SendSessionKey' (returns error code or SOAP_OK)
virtual int SendSessionKey(_interswitch__SendSessionKey *interswitch__SendSessionKey, _interswitch__SendSessionKeyResponse *interswitch__SendSessionKeyResponse);
/// Web service operation 'QueryTransfer' (returns error code or SOAP_OK)
virtual int QueryTransfer(_interswitch__QueryTransfer *interswitch__QueryTransfer, _interswitch__QueryTransferResponse *interswitch__QueryTransferResponse);
/// Web service operation 'AuthoriseCashOut' (returns error code or SOAP_OK)
virtual int AuthoriseCashOut(_interswitch__AuthoriseCashOut *interswitch__AuthoriseCashOut, _interswitch__AuthoriseCashOutResponse *interswitch__AuthoriseCashOutResponse);
/// Web service operation 'AuthoriseAccountCashOut' (returns error code or SOAP_OK)
virtual int AuthoriseAccountCashOut(_interswitch__AuthoriseAccountCashOut *interswitch__AuthoriseAccountCashOut, _interswitch__AuthoriseAccountCashOutResponse *interswitch__AuthoriseAccountCashOutResponse);
/// Web service operation 'ReverseCashOut' (returns error code or SOAP_OK)
virtual int ReverseCashOut(_interswitch__ReverseCashOut *interswitch__ReverseCashOut, _interswitch__ReverseCashOutResponse *interswitch__ReverseCashOutResponse);
/// Web service operation 'StatusCheck' (returns error code or SOAP_OK)
virtual int StatusCheck(_interswitch__StatusCheck *interswitch__StatusCheck, _interswitch__StatusCheckResponse *interswitch__StatusCheckResponse);
/// Web service operation 'QueryTransaction' (returns error code or SOAP_OK)
virtual int QueryTransaction(_interswitch__QueryTransaction *interswitch__QueryTransaction, _interswitch__QueryTransactionResponse *interswitch__QueryTransactionResponse);
/// Web service operation 'GetSystemSettings' (returns error code or SOAP_OK)
virtual int GetSystemSettings(_interswitch__GetSystemSettings *interswitch__GetSystemSettings, _interswitch__GetSystemSettingsResponse *interswitch__GetSystemSettingsResponse);
/// Web service operation 'CreateUser' (returns error code or SOAP_OK)
virtual int CreateUser(_interswitch__CreateUser *interswitch__CreateUser, _interswitch__CreateUserResponse *interswitch__CreateUserResponse);
/// Web service operation 'ActivateUser' (returns error code or SOAP_OK)
virtual int ActivateUser(_interswitch__ActivateUser *interswitch__ActivateUser, _interswitch__ActivateUserResponse *interswitch__ActivateUserResponse);
/// Web service operation 'UpdateUser' (returns error code or SOAP_OK)
virtual int UpdateUser(_interswitch__UpdateUser *interswitch__UpdateUser, _interswitch__UpdateUserResponse *interswitch__UpdateUserResponse);
/// Web service operation 'ChangePassword' (returns error code or SOAP_OK)
virtual int ChangePassword(_interswitch__ChangePassword *interswitch__ChangePassword, _interswitch__ChangePasswordResponse *interswitch__ChangePasswordResponse);
/// Web service operation 'ResetPassword' (returns error code or SOAP_OK)
virtual int ResetPassword(_interswitch__ResetPassword *interswitch__ResetPassword, _interswitch__ResetPasswordResponse *interswitch__ResetPasswordResponse);
/// Web service operation 'AuthenticateUser' (returns error code or SOAP_OK)
virtual int AuthenticateUser(_interswitch__AuthenticateUser *interswitch__AuthenticateUser, _interswitch__AuthenticateUserResponse *interswitch__AuthenticateUserResponse);
/// Web service operation 'AuthenticateUserSecurityToken' (returns error code or SOAP_OK)
virtual int AuthenticateUserSecurityToken(_interswitch__AuthenticateUserSecurityToken *interswitch__AuthenticateUserSecurityToken, _interswitch__AuthenticateUserSecurityTokenResponse *interswitch__AuthenticateUserSecurityTokenResponse);
/// Web service operation 'GetUser' (returns error code or SOAP_OK)
virtual int GetUser(_interswitch__GetUser *interswitch__GetUser, _interswitch__GetUserResponse *interswitch__GetUserResponse);
/// Web service operation 'GetBillers' (returns error code or SOAP_OK)
virtual int GetBillers(_interswitch__GetBillers *interswitch__GetBillers, _interswitch__GetBillersResponse *interswitch__GetBillersResponse);
/// Web service operation 'GetLatestBillers' (returns error code or SOAP_OK)
virtual int GetLatestBillers(_interswitch__GetLatestBillers *interswitch__GetLatestBillers, _interswitch__GetLatestBillersResponse *interswitch__GetLatestBillersResponse);
/// Web service operation 'GetFeaturedBillers' (returns error code or SOAP_OK)
virtual int GetFeaturedBillers(_interswitch__GetFeaturedBillers *interswitch__GetFeaturedBillers, _interswitch__GetFeaturedBillersResponse *interswitch__GetFeaturedBillersResponse);
/// Web service operation 'GetBillerPaymentItems' (returns error code or SOAP_OK)
virtual int GetBillerPaymentItems(_interswitch__GetBillerPaymentItems *interswitch__GetBillerPaymentItems, _interswitch__GetBillerPaymentItemsResponse *interswitch__GetBillerPaymentItemsResponse);
/// Web service operation 'GetBillerCategories' (returns error code or SOAP_OK)
virtual int GetBillerCategories(_interswitch__GetBillerCategories *interswitch__GetBillerCategories, _interswitch__GetBillerCategoriesResponse *interswitch__GetBillerCategoriesResponse);
/// Web service operation 'DoBillPaymentInquiry' (returns error code or SOAP_OK)
virtual int DoBillPaymentInquiry(_interswitch__DoBillPaymentInquiry *interswitch__DoBillPaymentInquiry, _interswitch__DoBillPaymentInquiryResponse *interswitch__DoBillPaymentInquiryResponse);
/// Web service operation 'AuthenticateCustomer' (returns error code or SOAP_OK)
virtual int AuthenticateCustomer(_interswitch__AuthenticateCustomer *interswitch__AuthenticateCustomer, _interswitch__AuthenticateCustomerResponse *interswitch__AuthenticateCustomerResponse);
/// Web service operation 'SendBillPaymentAdvice' (returns error code or SOAP_OK)
virtual int SendBillPaymentAdvice(_interswitch__SendBillPaymentAdvice *interswitch__SendBillPaymentAdvice, _interswitch__SendBillPaymentAdviceResponse *interswitch__SendBillPaymentAdviceResponse);
/// Web service operation 'SendPayments' (returns error code or SOAP_OK)
virtual int SendPayments(_interswitch__SendPayments *interswitch__SendPayments, _interswitch__SendPaymentsResponse *interswitch__SendPaymentsResponse);
/// Web service operation 'AddCustomerBillerAccount' (returns error code or SOAP_OK)
virtual int AddCustomerBillerAccount(_interswitch__AddCustomerBillerAccount *interswitch__AddCustomerBillerAccount, _interswitch__AddCustomerBillerAccountResponse *interswitch__AddCustomerBillerAccountResponse);
/// Web service operation 'GetCustomerBillerAccounts' (returns error code or SOAP_OK)
virtual int GetCustomerBillerAccounts(_interswitch__GetCustomerBillerAccounts *interswitch__GetCustomerBillerAccounts, _interswitch__GetCustomerBillerAccountsResponse *interswitch__GetCustomerBillerAccountsResponse);
/// Web service operation 'GetCustomerPayments' (returns error code or SOAP_OK)
virtual int GetCustomerPayments(_interswitch__GetCustomerPayments *interswitch__GetCustomerPayments, _interswitch__GetCustomerPaymentsResponse *interswitch__GetCustomerPaymentsResponse);
/// Web service operation 'AddBillerCustomer' (returns error code or SOAP_OK)
virtual int AddBillerCustomer(_interswitch__AddBillerCustomer *interswitch__AddBillerCustomer, _interswitch__AddBillerCustomerResponse *interswitch__AddBillerCustomerResponse);
/// Web service operation 'GetCollectionsAccount' (returns error code or SOAP_OK)
virtual int GetCollectionsAccount(_interswitch__GetCollectionsAccount *interswitch__GetCollectionsAccount, _interswitch__GetCollectionsAccountResponse *interswitch__GetCollectionsAccountResponse);
/// Web service operation 'GetBillersCollectionsAccount' (returns error code or SOAP_OK)
virtual int GetBillersCollectionsAccount(_interswitch__GetBillersCollectionsAccount *interswitch__GetBillersCollectionsAccount, _interswitch__GetBillersCollectionsAccountResponse *interswitch__GetBillersCollectionsAccountResponse);
/// Web service operation 'EditCustomerBillerAccount' (returns error code or SOAP_OK)
virtual int EditCustomerBillerAccount(_interswitch__EditCustomerBillerAccount *interswitch__EditCustomerBillerAccount, _interswitch__EditCustomerBillerAccountResponse *interswitch__EditCustomerBillerAccountResponse);
/// Web service operation 'ResendActivationToken' (returns error code or SOAP_OK)
virtual int ResendActivationToken(_interswitch__ResendActivationToken *interswitch__ResendActivationToken, _interswitch__ResendActivationTokenResponse *interswitch__ResendActivationTokenResponse);
/// Web service operation 'DoCustomProcessing' (returns error code or SOAP_OK)
virtual int DoCustomProcessing(_interswitch__DoCustomProcessing *interswitch__DoCustomProcessing, _interswitch__DoCustomProcessingResponse *interswitch__DoCustomProcessingResponse);
/// Web service operation 'CreateBiller' (returns error code or SOAP_OK)
virtual int CreateBiller(_interswitch__CreateBiller *interswitch__CreateBiller, _interswitch__CreateBillerResponse *interswitch__CreateBillerResponse);
/// Web service operation 'VerifyBiller' (returns error code or SOAP_OK)
virtual int VerifyBiller(_interswitch__VerifyBiller *interswitch__VerifyBiller, _interswitch__VerifyBillerResponse *interswitch__VerifyBillerResponse);
};
} // namespace interswitch
#endif
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+26
View File
@@ -0,0 +1,26 @@
#!/bin/bash
#
touch env.h
soapcpp2 -penv env.h
#wsdl2h -ninterswitch -Ninterswitch -qinterswitch -o QuickTellerService.h https://stageserv.interswitchng.com/uat_quicktellerservice/quickteller.svc?wsdl
#soapcpp2 -n -pinterswitch -qinterswitch -1 -C -i -I/usr/share/gsoap/import/ QuickTellerService.h
LIST="XmlElements.cc XmlParser.cc sha512.cc safestring.cc vars.cc"
echo "*** Compiling SOAP Proxy ***"
for i in $LIST
do
echo "*** Building $i"
g++ -DTEST -Wno-deprecated -I../../include -I../../core -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c ../../core/$i -o `echo $i|sed 's/.cc/.o/'`
done
LIST="interswitch.cc interswitchC.cc interswitchBasicHttpBinding_USCOREQuickTellerServiceProxy.cc"
echo "*** Compiling SOAP Proxy ***"
for i in $LIST
do
echo "*** Building $i"
g++ -DTEST -Wno-deprecated -I../../include -I../../core -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c ../$i -o `echo $i|sed 's/.cc/.o/'`
done
#g++ -DWITH_NONAMESPACES -g -O2 -c stdsoap2.cpp -o stdsoap2.o
g++ -g -O2 -c envC.cpp -o envC.o
g++ -g -O2 -c namespaces.cc -o namespaces.o
echo "*** Linking ***"
g++ -lstdc++ -lgsoapssl++ -lssl -lz -L/usr/lib64 *.o -o test
# -DWITH_NONAMESPACES
@@ -0,0 +1,4 @@
#include <stdsoap2.h>
extern "C" {
SOAP_NMAC struct Namespace namespaces[] = { { NULL, NULL} };
}
+124
View File
@@ -0,0 +1,124 @@
#include <cstdlib>
#include <cstring>
#include "cfg.h"
#include "clog.h"
#include "coregrade_api.h"
#include "input.h"
#include "paylid.h"
#include "storeface.h"
//*****************************************************************************/
long paylid_getAccountBalance(CVars in, CVars &out)
{
logfmt( logINFO, "long paylid_getAccountBalance(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
const int statusSize = 1024;
char status[statusSize];
memset(status,32,statusSize-1);status[statusSize] = '\0'; // Prepare/Clean-up status
long result = 0L;
result = storeface_getAccountBalance(
CfgReadChar("paylid.soap_endpoint"),
CfgReadChar("paylid.terminal_id"),
CfgReadChar("paylid.master_key"),
status);
logfmt(FLOG_MAX, "CHECK INTERRA FUND result= %lu ",result);
if (result==10000L) {
long balance = atol(status);
logfmt (FLOG_MAX, "********** AVAL BALANCE=>%ld", balance);
ret = PHP_API_OK;
} else {
// we failed to get amount status
out["status"] = status;
}
} catch (bad_parameter) {
out["status"] = "Bad parameter";
ret = PHP_API_BAD_PARAM;
} catch (...) {
out["status"] = "Unhandled exception in paylid_getAccountBalance";
ret = PHP_API_BAD_PARAM;
}
logfmt( logINFO, "/long paylid_getAccountBalance(CVars in, CVars &out)");
return ret;
}
//*****************************************************************************/
long paylid_transferFund(CVars in, CVars &out)
{
logfmt( logINFO, "long paylid_transferFund(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
// long storeface_transferFund(const char *endpoint, const char *tid, const char *toDestination, const char *key, char *status);
} catch (bad_parameter) {
out["status"] = "Bad parameter";
ret = PHP_API_BAD_PARAM;
} catch (...) {
out["status"] = "Unhandled exception in paylid_transferFund";
ret = PHP_API_BAD_PARAM;
}
logfmt( logINFO, "/long paylid_transferFund(CVars in, CVars &out)");
return ret;
}
//*****************************************************************************/
long paylid_checkTransferStatus(CVars in, CVars &out)
{
logfmt( logINFO, "long paylid_checkTransferStatus(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
// long storeface_checkTransferStatus(const char *endpoint, const char *tid, const char *transactionRef, const char *key, char *status);
} catch (bad_parameter) {
out["status"] = "Bad parameter";
ret = PHP_API_BAD_PARAM;
} catch (...) {
out["status"] = "Unhandled exception in paylid_checkTransferStatus";
ret = PHP_API_BAD_PARAM;
}
logfmt( logINFO, "/long paylid_checkTransferStatus(CVars in, CVars &out)");
return ret;
}
//*****************************************************************************/
long paylid_directAirTimeTopUp(CVars in, CVars &out)
{
logfmt( logINFO, "long paylid_directAirTimeTopUp(CVars in, CVars &out)");
long ret = PHP_API_BAD_PARAM;
try {
const int statusSize = 1024;
char status[statusSize];
memset(status,32,statusSize-1);status[statusSize] = '\0'; // Prepare/Clean-up status
long result = 0L;
// long storeface_directAirTimeTopUp(const char *endpoint, const char *tid, const char *topupData, const char *key, char *status, long &delivery_status);
/*
result = storeface_directAirTimeTopUp(
CfgReadChar("paylid.soap_endpoint"),
CfgReadChar("paylid.terminal_id"),
CfgReadChar("paylid.master_key"),
...data here...
status,
...address of delivery status...);
*/
logfmt(FLOG_MAX, "CHECK INTERRA FUND result= %lu ",result);
} catch (bad_parameter) {
out["status"] = "Bad parameter";
ret = PHP_API_BAD_PARAM;
} catch (...) {
out["status"] = "Unhandled exception in paylid_directAirTimeTopUp";
ret = PHP_API_BAD_PARAM;
}
logfmt( logINFO, "/long paylid_directAirTimeTopUp(CVars in, CVars &out)");
return ret;
}
//*****************************************************************************/
/*
vi:ts=2
*/
+278
View File
@@ -0,0 +1,278 @@
// Topup management toosl
#include "clog.h"
#include "cgi.h"
#include "input.h"
#include "coregrade_api.h"
#include "topups.h"
#include "email.h"
#include "safestring.h"
#include <string>
#include "pgsql.h"
#include "pgsql_wrapper.h"
#include <curl/curl.h>
#include "interswitch_sendmoney.h"
#include "account.h"
#include "storeface.h"
long CreateBulkTopupBatch(CVars in, CVars &out)
{
long ret = 0;
REQ_STRING( in, "batch_name", 1, 50, "(.*)");
REQ_LONG( in, "customer_id", 1, -1 );
CVars cust;
cust["customer_id"] = in["customer_id"]; cust["customer_id"].set_valid(true);
cust["batch_name"] = in["batch_name"]; cust["batch_name"].set_valid(true);
out["bulk_id"] = insert_db_record( DBS_VALID, "bulktopup_batch", "bulktopup_batch_id_seq", cust );
if (out["bulk_id"].Long() > 0 )
{
ret = out["bulk_id"].Long();
}
return ret;
}
long AddBulkTopupBatchItem(CVars in, CVars &out)
{
long ret = 0;
/*
CREATE TABLE bulktopup_batch_items
(
id serial NOT NULL,
bulk_id INT REFERENCES bulktopup_batch(id),
customer_id INT REFERENCES customer(id),
topup_name VARCHAR(50),
topup_number VARCHAR(15) NOT NULL,
topup_amount INT DEFAULT 0,
topup_network VARCHAR(10),
order_id VARCHAR(25),
deliver_status VARCHAR(15),
status integer DEFAULT 1,
added TIMESTAMP DEFAULT NOW()
);
*/
REQ_STRING( in, "topup_name", 1, 50, "(.*)");
REQ_STRING( in, "topup_number", 1, 15, "(.*)");
REQ_STRING( in, "topup_network", 1, 15, "(.*)");
REQ_LONG( in, "topup_amount", 1, -1 );
REQ_LONG( in, "customer_id", 1, -1 );
REQ_LONG( in, "bulk_id", 1, -1 );
CVars cust;
cust["topup_name"] = in["topup_name"]; cust["topup_name"].set_valid(true);
cust["topup_number"] = in["topup_number"]; cust["topup_number"].set_valid(true);
cust["topup_network"] = in["topup_network"]; cust["topup_network"].set_valid(true);
cust["topup_amount"] = in["topup_amount"]; cust["topup_amount"].set_valid(true);
cust["customer_id"] = in["customer_id"]; cust["customer_id"].set_valid(true);
cust["bulk_id"] = in["bulk_id"]; cust["bulk_id"].set_valid(true);
out["bulk_item_id"] = insert_db_record( DBS_VALID, "bulktopup_batch_items", "bulktopup_batch_items_id_seq", cust );
if (out["bulk_item_id"].Long() > 0 )
{
ret = out["bulk_item_id"].Long();
}
return ret;
}
long UpdateBulkTopupItem(CVars in, CVars &out)
{
long ret =0;
REQ_LONG( in, "bulk_id", 1, -1 );
REQ_LONG( in, "customer_id", 1, -1 );
if ( load_db_record( out, "SELECT id FROM bulktopup_batch WHERE id= %lu AND status <> 5 AND completed IS NULL",in["bulk_id"].Long() ) )
{
pgsql_exec( "UPDATE bulktopup_batch SET status = 2 WHERE completed IS NULL AND status <> 5 AND id=%lu AND customer_id = %lu",in["bulk_id"].Long(),in["customer_id"].Long());
ret = in["bulk_id"].Long();
}
return ret;
}
long DeliverBulkTopupItem(CVars in, CVars &out)
{
CVars xx;
CVars yy;
long ret = 0;
REQ_LONG( in, "bulk_id", 1, -1 );
REQ_LONG( in, "item_id", 1, -1 );
REQ_STRING( in, "payment_code", 1, 50, "(.*)");
if ( load_db_record( out, "SELECT gid AS paymentitemid FROM interswitch_biller_payment_items WHERE paymentcode = '%lu'",in["payment_code"].Long() ) )
{
in["paymentitemid"] = out["paymentitemid"];
xx["paymentitemid"] = out["paymentitemid"];
in["paymentitemid"].set_valid( true );
xx["paymentitemid"].set_valid( true );
}
else
{
return 0;
}
if ( load_db_record( out, "SELECT * FROM bulktopup_batch WHERE id= %lu AND status <> 5 AND completed IS NULL",in["bulk_id"].Long() ) )
{
if ( load_db_record( yy, "SELECT * FROM bulktopup_batch_items WHERE id= %lu AND status <> 5 AND completed IS NULL",in["item_id"].Long() ) )
{
xx["customer_id"]= out["customer_id"]; xx["customer_id"].set_valid( true );
xx["amount"]= yy["topup_amount"]; xx["amount"].set_valid( true );
xx["recipient_no"]= yy["topup_number"]; xx["topup_number"].set_valid( true );
xx["bulk_topup_item_id"] = yy["id"]; xx["bulk_topup_item_id"].set_valid( true );
// pgsql_exec( "UPDATE bulktopup_batch SET status = 2 WHERE completed IS NULL AND status <> 5 AND id=%lu AND customer_id = %lu",in["bulk_id"].Long(),in["customer_id"].Long());
xx["trans_not_id"] =CreateTopupOrder(xx,out);
if ( xx["trans_not_id"].Long() > 0 )
{
pgsql_exec( "UPDATE bulktopup_batch_items SET order_id = '%s', payment_code = '%s' WHERE id = %lu",out["orderid"].c_str(),in["payment_code"].c_str(),in["item_id"].Long() );
xx["customermobile"]=xx["recipient_no"]; xx["customermobile"].set_valid( true );
xx["customerid"]= xx["customer_id"]; xx["customerid"].set_valid( true ); // bad but true
xx["orderid"] =out["orderid"]; xx["orderid"].set_valid( true );
xx["order_id"] =out["orderid"]; xx["order_id"].set_valid( true );
xx["trans_not_id"].set_valid( true );
xx["payment_code"] = in["payment_code"]; xx["payment_code"].set_valid( true );
if ( DeliverTopOrderByBalance(xx,out) == 100 )
{
pgsql_exec( "UPDATE bulktopup_batch_items SET completed=now(),status=5 WHERE id = %lu",in["item_id"].Long() );
}
}
ret = in["bulk_id"].Long();
}
}
return ret;
}
long DeliverTopOrderByBalance(CVars in, CVars &out)
{
long retval=0;
long process_status=0;
// in["amount"] - arrives as niara - send cents/kobo to interswitch
out["route_id"] = "0";
out["route_etisalat"] = "0";
if( load_db_record( out,"SELECT id AS route_id FROM airtime_route WHERE payment_code ='%s'",in["payment_code"].c_str() ) )
{
out["route_etisalat"] = "1";
}else{ }
if ( in["pmode"].Long() == PAY_MODE_BALANCE ) // paying with balance
{
if ( load_db_record( out, "SELECT * FROM customer WHERE id = %lu",in["customer_id"].Long() ) )
{
long amount_in_cents = in["amount"].Long()*100;
if ( out["balance"].Long() < amount_in_cents )
{
out["status"] = "Insufficient Balance for Purchase";
out["status_code"] = "F0004";
}
else
{
in["amount"] = amount_in_cents;
in["amount"].set_valid( true );
//--------------------------------------------------
pgsql_exec( "UPDATE customer SET balance = balance - %lu WHERE id=%lu ",amount_in_cents,in["customer_id"].Long());
//--------------------------------------------------
//retval = INTW_sendBillPaymentAdvice( in, out );
if ( out["route_etisalat"].Long() > 0 && out["route_id"].Long() > 0 )
{
retval = DeliverMobilseEtisalat( in, out );
out["ResponseCode"] = retval;
}
else
{
retval = INTW_sendBillPaymentAdvice( in, out );
}
if (out["ResponseCode"].Long() == 90000L) {
process_status = 100; // completed
out["status"] = "Completed";
out["status_code"] = "A0001";
pgsql_exec( "UPDATE trans_notification SET completed = now() WHERE id=%lu AND customer_id = %lu ",in["trans_not_id"].Long(),in["customer_id"].Long());
out["email_alert"] = "I am sending Email of Success";
//CustomerAirSale( in);
VirtualAirSaleAlert(out);
}
else
{
//--------------------------------------------------
pgsql_exec( "UPDATE customer SET balance = balance + %lu WHERE id=%lu ",amount_in_cents,in["customer_id"].Long());
//--------------------------------------------------
VirtualAirSaleAlert(out);
out["email_alert"] = "I am sending Email of Failure";
out["status"] = "Unable to deliver topup";
out["status_code"] = "F0005";
}
}
}
else
{ // customer not found
out["status"] = "Account not found";
out["status_code"] = "F0003";
}
}
return process_status;
}
long CreateTopupOrder(CVars in, CVars &out)
{
CVars cust;
CVars xx;
char xtid[12];
int r;
long ret =0;
REQ_LONG( in, "amount", 1, -1 );
REQ_STRING( in, "recipient_no", 1, 15, "(.*)");
REQ_LONG( in, "customer_id", 1, -1 );
srand(time(NULL));
r = abs( rand()*10000000);
cust["orderid"] = r;
in["orderid"] = r;
in["orderid"].set_valid(true);
cust["amount"] = in["amount"]; cust["amount"].set_valid(true);
cust["description"] = in["description"]; cust["description"].set_valid(true);
cust["customer_id"] = in["customer_id"]; cust["customer_id"].set_valid(true);
cust["recipient_no"] = in["recipient_no"]; cust["recipient_no"].set_valid(true);
cust["orderid"].set_valid(true);
out=in;
out["order_id"] = insert_db_record( DBS_VALID, "trans_notification", "trans_notification_id_seq", cust );
if (out["order_id"].Long() > 0 )
{
sprintf( xtid, "9%011lu", out["order_id"].Long() );
xx["orderid"] = xtid;
pgsql_exec( "UPDATE trans_notification SET orderid ='%s' WHERE id=%lu AND customer_id = %lu ",xtid,out["order_id"].Long(),in["customer_id"].Long());
out["orderid"] = xtid;
ret = out["order_id"].Long();
}
else
{
out["orderid"]="";
}
return ret;
}