fix
This commit is contained in:
@@ -142,27 +142,27 @@ long SessionCheck(long uid, const char *sessionid, int create) {
|
||||
return -1L; // Invalif parameters
|
||||
}
|
||||
// Clean old sessions
|
||||
pgsql_exec("DELETE FROM members_session WHERE uid=%ld AND updated < (now() - interval '15 minutes')", uid);
|
||||
pgsql_exec("DELETE FROM members_session WHERE member_id=%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) {
|
||||
if (create == 0 && pgsql_exec("UPDATE members_session SET updated=NOW() WHERE member_id=%ld AND session='%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);
|
||||
const PGresult *res = pgsql_query("SELECT * FROM members_session WHERE member_id=%ld AND session<>'%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);
|
||||
if (load_db_record(sess, "SELECT * FROM members_session WHERE member_id=%lu AND session='%s'", uid, sessionid) > 0) {
|
||||
pgsql_exec("UPDATE members_session SET updated=NOW() WHERE member_id=%ld AND session='%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);
|
||||
sess["member_id"] = uid;
|
||||
sess["member_id"].set_valid(true);
|
||||
sess["session"] = sessionid;
|
||||
sess["session"].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
|
||||
@@ -180,10 +180,12 @@ long LoginCoreGradeAccount(CVars in, CVars &out) {
|
||||
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());
|
||||
ret = load_db_record(out, "SELECT UPPER( md5( now()::text ) ) AS sessionid, *,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) {
|
||||
if (SessionCheck(out["member_id"].Long(), out["sessionid"].c_str(), 1) > 0) {
|
||||
out["stauts"] = "OK";
|
||||
ret = PHP_API_OK;
|
||||
} else {
|
||||
@@ -203,21 +205,24 @@ long CreateCoreGradeAccountPending(CVars in, CVars &out) {
|
||||
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);
|
||||
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, "(.*)");
|
||||
@@ -225,6 +230,9 @@ ADD CONSTRAINT members_pending_id_key UNIQUE (id);
|
||||
OPTIONAL(in, "phone") REQ_STRING(in, "phone", 3, 15, "(.*)");
|
||||
OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)");
|
||||
|
||||
out["pending_id"] = "0";
|
||||
out["status_message"] = "Pending";
|
||||
|
||||
int r1, r2, r3;
|
||||
char verify_link[100];
|
||||
srand(time(NULL));
|
||||
@@ -238,32 +246,45 @@ ADD CONSTRAINT members_pending_id_key UNIQUE (id);
|
||||
|
||||
const char *loc = getenv("REMOTE_ADDR");
|
||||
|
||||
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"] = 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) {
|
||||
pgsql_query("UPDATE members SET password = md5('%s') WHERE id = %lu", in["password"].c_str(), ret);
|
||||
out["pending_id"] = ret;
|
||||
out["pending_id"].set_valid(true);
|
||||
x["pending_id"] = ret;
|
||||
x["pending_id"].set_valid(true);
|
||||
AccountPendingMail(x);
|
||||
const PGresult *res = pgsql_query("SELECT * FROM members WHERE LOWER(username) = LOWER('%s') ", in["username"].c_str());
|
||||
|
||||
if (res != NULL && pgsql_num_rows(res) > 0) {
|
||||
out["status_message"] = "Unable to create account, try another username or reset password";
|
||||
} else {
|
||||
// dulpicate condition satisfied
|
||||
|
||||
|
||||
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"] = 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) {
|
||||
pgsql_query("UPDATE members_pending SET password = md5('%s') WHERE id = %lu", in["password"].c_str(), ret);
|
||||
out["pending_id"] = ret;
|
||||
out["pending_id"].set_valid(true);
|
||||
x["pending_id"] = ret;
|
||||
x["pending_id"].set_valid(true);
|
||||
AccountPendingMail(x);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
//******************************************************************************
|
||||
@@ -272,9 +293,9 @@ 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, "(.*)");
|
||||
// REQ_STRING(in, "pass1", 3, 15, "(.*)");
|
||||
OPTIONAL(in, "loc") REQ_STRING(in, "loc", 3, 15, "(.*)");
|
||||
const char *loc = getenv("REMOTE_ADDR");
|
||||
const char *loc = getenv("REMOTE_ADDR");
|
||||
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) {
|
||||
@@ -292,7 +313,7 @@ long CreateCoreGradeAccount(CVars in, CVars &out) {
|
||||
x["phone"].set_valid(true);
|
||||
x["loc"] = loc;
|
||||
x["loc"].set_valid(true);
|
||||
x["password"] = out["password"];;
|
||||
x["password"] = out["password"];
|
||||
x["password"].set_valid(true);
|
||||
|
||||
ret = insert_db_record(DBS_VALID, "members", "members_id_seq", x);
|
||||
@@ -302,10 +323,10 @@ long CreateCoreGradeAccount(CVars in, CVars &out) {
|
||||
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());
|
||||
// pgsql_query("UPDATE members SET password = md5('%s') WHERE id = %lu", in["pass1"].c_str(), ret);
|
||||
pgsql_query("UPDATE members_pending SET status = 5,verified=now() WHERE id = %lu", out["pending_id"].Long());
|
||||
|
||||
AccountPendingMail(x);
|
||||
// AccountPendingMail(x); welcome email
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -12,119 +12,104 @@
|
||||
#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) {
|
||||
|
||||
|
||||
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_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;
|
||||
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;
|
||||
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 );
|
||||
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, "(.*)");
|
||||
|
||||
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;
|
||||
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 );
|
||||
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, "(.*)");
|
||||
|
||||
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;
|
||||
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);
|
||||
|
||||
*/
|
||||
|
||||
|
||||
+218
-244
@@ -16,263 +16,237 @@
|
||||
#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();
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
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();
|
||||
}
|
||||
long AddBulkTopupBatchItem(CVars in, CVars &out) {
|
||||
long ret = 0;
|
||||
|
||||
}
|
||||
return ret;
|
||||
|
||||
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 DeliverTopOrderByBalance(CVars in, CVars &out)
|
||||
{
|
||||
long retval=0;
|
||||
long process_status=0;
|
||||
// in["amount"] - arrives as niara - send cents/kobo to interswitch
|
||||
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();
|
||||
}
|
||||
|
||||
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;
|
||||
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, "(.*)");
|
||||
|
||||
long CreateTopupOrder(CVars in, CVars &out)
|
||||
{
|
||||
CVars cust;
|
||||
CVars xx;
|
||||
char xtid[12];
|
||||
int r;
|
||||
long ret =0;
|
||||
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;
|
||||
}
|
||||
|
||||
REQ_LONG( in, "amount", 1, -1 );
|
||||
REQ_STRING( in, "recipient_no", 1, 15, "(.*)");
|
||||
REQ_LONG( in, "customer_id", 1, -1 );
|
||||
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) {
|
||||
|
||||
|
||||
srand(time(NULL));
|
||||
r = abs( rand()*10000000);
|
||||
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);
|
||||
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user