Beispiel #1
0
void EventHandler::processPaymentAddDiamondResponse(EventCmd &e, vector<string> &check_cmd)
{
    if(check_cmd.size()!=7)return;
    int succ = 0;
    bool check = safeAtoi(check_cmd[1], succ);
    if(check == false) return;
    uid_type uid;
    string tran_id;
    check = safeAtoll(check_cmd[2], uid);
    if(check == false) return;
    tran_id = check_cmd[4];
    string product_id = check_cmd[3];
    int diamond = 0;
    check = safeAtoi(check_cmd[5], diamond);
    if(check == false) return;
    int dst_fd = 0;
    check = safeAtoi(check_cmd[6], dst_fd);
    if(check == false) return;
    
    PaymentInfo *pi = NULL;
    check = dh_->loadPayment(tran_id, pi);
    if(check == false){
        sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    if(pi == NULL){
        sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME);
        return;
    }else{
        if(uid != pi->uid_ || product_id != pi->product_id_ || tran_id != pi->tran_id_){
            delete pi;
            //sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH);
            sendErrorResponseFroPayment(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH, tran_id);
            return;
        }
        if(succ != 0){
            delete pi;
            check = dh_->savePaymentStatus(tran_id, PAYMENT_STATUS_VERIFY_SUCC);
            if(check == false){
                sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
                return;
            }else{
                sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME);
                return;
            }
        }else{
            check = dh_->savePaymentStatus(tran_id, PAYMENT_STATUS_ADDCMD_SUCC);
            if(check ==false){
                sendErrorResponse(dst_fd, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
                return;
            }else{
                string res = buildPaymentVerifyReceivedResponse(uid,product_id,tran_id,diamond);
                nh_->sendString(dst_fd, res);
                return;
            }
        }
    }
    return;
}
Beispiel #2
0
void EventHandler::processSessionVerify(EventCmd &e, vector<string> &check_cmd)
{
    if(check_cmd.size()!=5)return;
    uid_type uid;
    int status;
    bool check = safeAtoll(check_cmd[1], uid);
    if(check == false) return;
    check = safeAtoi(check_cmd[2], status);
    if(check == false) return;
    if(status != 1){
        sendErrorResponse(e.fd_, CMD_LOGIN, ERROR_SESSIONID_ERROR);
        return;
    }
    User * user = safeGetUser(uid, CMD_LOGIN, e.fd_);
    if(user == NULL) {
        sendErrorResponse(e.fd_, CMD_LOGIN, ERROR_USER_DONOT_EXIST);
        return;
    }
    //user->nick_name_ = check_cmd[3];
    user->eqid_ = check_cmd[4];
    check = dh_->saveUserSInfo(user);
    if(check == false){
        sendErrorResponse(e.fd_, CMD_LOGIN, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    LOG4CXX_INFO(logger_, "login;"<<user->uid_);
    long long now = time(NULL);
    long long reaccess_check = now/86400 - user->create_time_/86400;
    if((reaccess_check>=1 && reaccess_check<=6)||reaccess_check == 13 || reaccess_check == 29 || reaccess_check == 59 || reaccess_check == 89){
        LOG4CXX_INFO(logger_, "reaccess;"<<reaccess_check<<";"<<user->uid_);
    }
    string res = buildSessionVerifyResponse();
    nh_->sendString(e.fd_, res);
    return;
}
Beispiel #3
0
/*void * paymentAdd(void * args)
{
    struct NewPaymentAdd * npa = (NewPaymentAdd *) args;
    char recvbuf[1024] = {0};
    int count = 0 ;
    int local_product_id = npa->local_product_id;
    string tran_id = *(npa->tran_id);
    
    bool check = true;
    while(1){
        int server_id = npa->server_id;
        sconfig * sc = game_config.getSconfig(server_id);
        if(sc == NULL){
            check = false;
            break;
        }
        
        int sock;
        struct sockaddr_in toAddr;
        memset(&toAddr,0,sizeof(toAddr));
        toAddr.sin_addr.s_addr = inet_addr(sc->ip_addr.c_str());
        toAddr.sin_port = htons(sc->port);
        sock = socket(AF_INET,SOCK_STREAM,0);
        if(sock == -1){
            check = false;
            break;
        }
        
        int timeout = 30000;
        setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));
        int ret = connect(sock,(struct sockaddr *) &toAddr,sizeof(toAddr));
        if(ret != 0){
            close(sock);
            check = false;
            break;
        }
        
        char cmd[1024] = {0};
        count = snprintf(cmd, 1024, "%s;%lld;%d;%s;%d",cmd_list[CMD_PAYMENT_ADD_DIAMOND_REQUEST].c_str(),npa->uid,local_product_id,tran_id.c_str(),npa->fd_);
        ret = send(sock,cmd,count+1,0);
        if(ret < 0){
            close(sock);
            shutdown(sock,SHUT_RDWR);
            check = false;
            break;
        }
        count = recv(sock,recvbuf,1024,0);
        if(count <= 0){
            close(sock);
            shutdown(sock,SHUT_RDWR);
            check = false;
            break;
        }
        close(sock);
        shutdown(sock,SHUT_RDWR);
        break;
    }
    if(check == true){
        string resp = string(recvbuf,count);
        npa->eq->pushCmd(npa->fd_, npa->uid, resp);
    }else{
        string res= buildPaymentAddDiamondResponseCmd(1, npa->uid, npa->local_product_id,tran_id,0,npa->fd_);
        npa->eq->pushCmd(npa->fd_,npa->uid,res);
    }
    if(npa->tran_id != NULL) delete npa->tran_id;
    if(npa!= NULL) delete npa;
    return NULL;
}*/
void * sessionVerify(void * args)
{
    struct sessionVerifyInfo * sv;
    sv = (struct sessionVerifyInfo *)args;
    uid_type uid = sv->uid;
    string nickname = *(sv->nickname);
    delete sv->nickname;
    string eqid = *(sv->eqid);
    delete sv->eqid;
    string sign = *(sv->sign);
    delete sv->sign;
    
    string readBuffer = "";
    
    CURL * easy_handle = curl_easy_init();
    curl_easy_setopt(easy_handle, CURLOPT_URL,sign.c_str());
    //curl_easy_setopt(easy_handle, CURLOPT_URL,"https://sandbox.itunes.apple.com/verifyReceipt");
    //curl_easy_setopt(easy_handle, CURLOPT_POSTFIELDS,msg.c_str());
    //curl_easy_setopt(easy_handle, CURLOPT_HTTPGET,sign.c_str());
    curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, writeDataCurl);
    curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA,&readBuffer);
    curl_easy_setopt(easy_handle, CURLOPT_TIMEOUT,30);
    curl_easy_setopt(easy_handle, CURLOPT_CONNECTTIMEOUT,30);
    curl_easy_perform(easy_handle);
    curl_easy_cleanup(easy_handle);
    
    int status = 0;
    if(readBuffer.length()==0 || readBuffer[0] == '<'){
    }else{
        Json::Reader reader;
        Json::Value root;
        if(reader.parse(readBuffer, root)){
            string code = root["ErrorCode"].asString();
            bool check = safeAtoi(code, status);
            if(check == false){
                delete sv ;
                return NULL;
            }
        }
    }
    
    string res = buildSessionVerifyCmd(sv->uid,status,nickname,eqid);
    sv->eq->pushCmd(sv->fd_, sv->uid, res);
    
    delete sv;
    
    return NULL;
    
}
Beispiel #4
0
void EventHandler::processCreateUser(EventCmd &e, vector<string> &check_cmd)
{
    if(check_cmd.size()!=5)return;
    uid_type uid;
    bool check = safeAtoll(check_cmd[1], uid);
    if(check == false) return;
    if(check_cmd[3].size() == 0 || check_cmd[3].size()>32) return;
    if(checkString(check_cmd[3]) == false) return;
    int authorize_code;
    check = safeAtoi(check_cmd[4], authorize_code);
    if(check == false) return;
    if(authorize_code != getAuthorizeCode(uid)){
        sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_AUTHORIZE_CODE_WRONG);
        return;
    }
    User * user = dh_->getUser(uid);
    if(dh_->db_error_ != 0){
        sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    if(user != NULL){
        sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_USER_ALREADY_REGISTERED);
        delete user;
        return;
    }
    /*check = dh_->checkNick(check_cmd[3]);
    if(dh_->db_error_ != 0){
        sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    if(check == false){
        sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_NICKNAME_USED);
        return;
    }*/
    check = dh_->createUser(uid,check_cmd);
    if(dh_->db_error_ != 0){
        sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    if(check == false){
        sendErrorResponse(e.fd_, CMD_CREATEUSER, ERROR_CREATE_USER_FAIL);
        return;
    }
    string res = buildCreateUserResponse();
    nh_->sendString(e.fd_, res);
    return;
}
Beispiel #5
0
void EventHandler::processPaymentAddDiamondRequest(EventCmd &e, vector<string> &check_cmd)
{
    if(check_cmd.size()!=5)return;
    cout<<"cmd received!"<<endl;
    uid_type uid;
    string tran_id;
    bool check = safeAtoll(check_cmd[1], uid);
    if(check == false) return;
    tran_id = check_cmd[3];
    string product_id = check_cmd[2];
    int dst_fd = 0;
    check = safeAtoi(check_cmd[4], dst_fd);
    if(check == false) return;
    
    string erret = buildPaymentAddDiamondResponseCmd(1, uid, product_id, tran_id,0,dst_fd);
    
    User * user = safeGetUser(uid, CMD_PAYMENT_ADD_DIAMOND_RESPONSE, e.fd_);
    PaymentConfig * pc = game_config.getPaymentConfig(product_id);
    if(pc == NULL){
        nh_->sendString(e.fd_, erret);
        return;
    }
    
    user->diamond_ += pc->amount_;
    user->pay_count_ ++;
    ActConfig * ac = game_config.getActConfig(ACT_1);
    if(ac != NULL){
        act_1(user,pc->amount_);
    }

    check = dh_->saveUser(user);
    if(check == false) {
        nh_->sendString(e.fd_, erret);
        return;
    }
    string res = buildPaymentAddDiamondResponseCmd(0, uid, product_id, tran_id,user->diamond_,dst_fd);
    nh_->sendString(e.fd_, res);
    return;
    
}
Beispiel #6
0
void EventHandler::processAuthorize(EventCmd &e, vector<string> &check_cmd)
{
    if(check_cmd.size()!=4) return;
    if(check_cmd[1].size() == 0 || check_cmd[2].size() == 0) return;
    if(check_cmd[1].size()>32 || check_cmd[2].size()>32) return;
    if(checkString(check_cmd[2])==false){
        LOG4CXX_WARN(logger_, "check string false:"<<check_cmd[2]);
    }
    uid_type uid ;
    bool check = safeAtoll(check_cmd[1], uid);
    if(check == false) return;
    int authorize_code;
    check = safeAtoi(check_cmd[3], authorize_code);
    if(check == false) return;
    User * user = dh_->getUser(uid);
    if(dh_->db_error_ != 0){
        sendErrorResponse(e.fd_, CMD_AUTHORIZE,ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    if(user == NULL){
        sendErrorResponse(e.fd_, CMD_AUTHORIZE,ERROR_USER_DONOT_EXIST);
        return;
    }
    if(authorize_code != getAuthorizeCode(uid)){
        sendErrorResponse(e.fd_, CMD_AUTHORIZE, ERROR_AUTHORIZE_CODE_WRONG);
        return;
    }
    user->eqid_ = check_cmd[2];
    user->dirty_ = true;
    check = dh_->saveEquipmentId(user);
    if(dh_->db_error_ != 0 || check == false){
        sendErrorResponse(e.fd_, CMD_AUTHORIZE,ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    string res = buildAuthorizeResponse();
    nh_->sendString(e.fd_, res);
    return;
}
Beispiel #7
0
int parseUserRewardsContent(vector <StageReward>& strewards, const string &contents) {

    strewards.clear();

    int ret = 0;
    vector <string> tokens;
    string delims=";";
    tokenize(contents,tokens, delims);
    if (tokens.size() > 0 && safeAtoi(tokens[0], ret)) {
        strewards.resize(ret);    
        delims = ",";
        for (size_t i = 1; i < tokens.size(); i++) {
            vector <int> subitems;
            numtokenize(tokens[i], subitems, delims); 
            if (subitems.size() == 4) {
                strewards[i-1].type = subitems[0];
                strewards[i-1].subtype = subitems[1];
                strewards[i-1].param_1 = subitems[2];
                strewards[i-1].param_2 = subitems[3];
            }
        }
    }
    return ret;
}
Beispiel #8
0
void EventHandler::processPaymentVerifyComplete(EventCmd &e, vector<string> &check_cmd)
{
    if(check_cmd.size()!=6) return;
    uid_type uid;
    int status = 0;
    int server_id = 0;
    bool check = safeAtoll(check_cmd[1], uid);
    if(check == false) return;
    check = safeAtoi(check_cmd[2], status);
    if(check == false) return;
    string * tran_id = new string(check_cmd[4]);
    string * product_id = new string(check_cmd[3]);
    check = safeAtoi(check_cmd[5], server_id);
    if(check == false) return;
    
    PaymentInfo * pi = NULL;
    check = dh_->loadPayment(*tran_id, pi);
    if(check == false){
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    
    if(pi == NULL){
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME);
        return;
    }else{
        server_id = pi->server_id_;
        if(uid != pi->uid_ || *product_id != pi->product_id_){
            delete pi;
            sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH);
            return;
        }
        if(pi!=NULL)
            delete pi;
        if(status != 0){
            check = dh_->savePaymentStatus(*tran_id, PAYMENT_STATUS_REQUEST_RECEIVED);
            if(check == false){
                sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
                return;
            }else{
                sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME);
                return;
            }
        }else{
            check = dh_->savePaymentStatus(*tran_id, PAYMENT_STATUS_ADDCMD_SEND);
            if(check == false){
                sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
                return;
            }else{
                pthread_t tid;
                struct PaymentAdd *pa;
                pa = (struct PaymentAdd *) malloc (sizeof(PaymentAdd));
                if(pa == NULL) {
                    sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
                    return;
                }
                pa->eq = this->eq_;
                pa->fd_ = e.fd_;
                pa->product_id = product_id;
                pa->server_id = server_id;
                pa->tran_id = tran_id;
                pa->uid = uid;
                pthread_create(&tid,NULL,paymentAdd,(void *)pa);
            }
        }
    }
    return;
}
Beispiel #9
0
void EventHandler::processPaymentVerify(EventCmd &e,vector<string> &check_cmd)
{
    //if(check_cmd.size()!=4) return;
    /*    uid_type uid;
     bool check = safeAtoll(check_cmd[1], uid);
     if(check == false) return;
     User * user = safeGetUser(uid, CMD_PAYMENTVERIFY, e.fd_, check_cmd[2]);
     if(user == NULL) return;
     string input = e.cmd_.substr(e.cmd_.find('{'));
     if(input.size()>=3000){
     sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
     return;
     }
     char * outputc = (char * ) malloc (4*((input.length()+2)/3));
     if(outputc == NULL){
     sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
     return;
     }
     base64_encode((unsigned char * )input.c_str(), (int)input.length(),
     (unsigned char  *)outputc, (int)4*((input.length()+2)/3));
     string output = string(outputc,(int)4*((input.length()+2)/3));
     free(outputc);
     string * test = new string("{\"receipt-data\":\"" + output + "\"}");
     //pp->verify_info = &check_cmd[3];
     pp->verify_info = test;
     pthread_create(&tid,NULL,verify,(void *)pp);
     */
    
    //read params
    uid_type uid;
    int server_id;
    string product_id;
    bool check = safeAtoll(check_cmd[1], uid);
    if(check == false)return;
    if(check_cmd[3].size()>64 ||check_cmd[3].size()<=0||check_cmd[5].size()>64 ||check_cmd[5].size()<=0) return;
    //string tran_id = check_cmd[3];
    string * tran_id = new string(check_cmd[3]);
    check = safeAtoi(check_cmd[4], server_id);
    if(check == false) return;
    product_id = check_cmd[5];
    
    sconfig * sc = game_config.getSconfig(server_id);
    if(sc == NULL){
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_INFO_ERROR);
        return;
    }
    if(game_config.payment_.find(product_id) == game_config.payment_.end()){
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_INFO_ERROR);
        return;
    }
    
    //try to load
    PaymentInfo *pi = NULL;
    check = dh_->loadPayment(*tran_id, pi);
    if(check == false){
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    
    string input = e.cmd_.substr(e.cmd_.find('{'));
    if(input.size()>=3000){
        //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    char * outputc = (char *) malloc (4*((input.length()+2)/3));
    if(outputc == NULL){
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    base64_encode((unsigned char * )input.c_str(), (int)input.length(),
                  (unsigned char  *)outputc, (int)4*((input.length()+2)/3));
    string output = string(outputc,(int)4*((input.length()+2)/3));
    free(outputc);
    //string * test = new string("{\"receipt-data\":\"" + output + "\"}");
    
    //check
    string checkcode = MDString(output.c_str());
    if(pi == NULL){
        pi = new PaymentInfo(*tran_id,product_id,checkcode);
        if(pi == NULL){
            sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
            return;
        }
        //pi->tran_id_ = tran_id;
        pi->uid_ = uid;
        pi->pay_time_ = time(NULL);
        //pi->product_id_ = product_id;
        pi->server_id_ = server_id;
        pi->status_ = PAYMENT_STATUS_REQUEST_RECEIVED;
        pi->status_ = PAYMENT_STATUS_VERIFY_SEND;
        //pi->check_info_ = checkcode;
        
        check = dh_->addNewPayment(pi);
        if(check == false || dh_->db_error_ != 0){
            delete pi;
            sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
            return;
        }
        
    }else{
        if(uid != pi->uid_ || server_id_ != pi->server_id_ || product_id != pi->product_id_ || checkcode != pi->check_info_){
            delete pi;
            //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH);
            sendErrorResponseFroPayment(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH, (*tran_id));
            return;
        }
        if(pi->status_ == PAYMENT_STATUS_REQUEST_RECEIVED || pi->status_ == PAYMENT_STATUS_VERIFY_SUCC){
        }else if(pi->status_ == PAYMENT_STATUS_VERIFY_SEND
                 || pi->status_ == PAYMENT_STATUS_ADDCMD_SEND){
            delete pi;
            sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME);
            return;
        }else if(pi->status_ == PAYMENT_STATUS_REQUEST_REFUSED || pi->status_ == PAYMENT_STATUS_ADDCMD_SUCC){
            delete  pi;
            //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_TRADE_COMPLETE);
            sendErrorResponseFroPayment(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_TRADE_COMPLETE, (*tran_id));
            return;
        }
    }
    if(pi!=NULL){
        delete pi;
    }
    string * test = new string("{\"receipt-data\":\"" + output + "\"}");
    pthread_t tid;
    struct PaymentParam *pp;
    pp = (struct PaymentParam *) malloc (sizeof(PaymentParam));
    if(pp == NULL) {
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    pp->uid = uid;
    pp->tran_id = tran_id;
    pp->eq = eq_;
    pp->fd_ = e.fd_;
    pp->verify_info = test;
    pp->server_id = server_id;
    pthread_create(&tid,NULL,verify,(void *)pp);
    return;
}
Beispiel #10
0
int config_getInt(char* name){
	char *value = config_get(name);
	return value == NULL ? 0 : safeAtoi(value);
}
Beispiel #11
0
/*void EventHandler::processNewPaymentverify(EventCmd &e, vector<string> &check_cmd)
{
    if(check_cmd.size()!=6) return;
    uid_type uid;
    int server_id;
    string tran_id = check_cmd[4];
    string product_id = check_cmd[5];
    bool check = safeAtoll(check_cmd[1], uid);
    if(check == false) return;
    check = safeAtoi(check_cmd[3], server_id);
    if(check == false) return;
    if(tran_id.size()==0||tran_id.size() >32) return;
    NewPaymentInfo * npi = dh_->loadNewPaymentInfo(tran_id);
    if(npi == NULL){
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_NOT_RECEIVED_YET);
        sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_NOT_RECEIVED_YET,tran_id);
        return;
    }
    
    if(uid!=npi->uid_ || product_id != npi->product_id_ || server_id != npi->server_id_){
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH);
        sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH,tran_id);
        return;
    }
    PaymentConfig * pc = game_config.getPaymentConfig(product_id);
    if(pc == NULL){
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_CONFIG_ERROR);
        sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_CONFIG_ERROR,tran_id);
        return;
    }
    if(pc->price_ != npi->order_money_){
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH);
        sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH,tran_id);
        return;
    }
    if(npi->order_status_ == NEW_PAYMENT_SENDDING){
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_WRONG_TIME);
        sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_WRONG_TIME,tran_id);
        return;
    }
    if(npi->order_status_ == NEW_PAYMENT_COMPLETE){
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_TRADE_COMPLETE);
        sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_TRADE_COMPLETE,tran_id);
        return;
    }
    npi->order_status_ = NEW_PAYMENT_SENDDING;
    check = dh_->saveNewPaymentStatus(npi->tran_id_, npi->order_status_);
    if(check == false){
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_SYSTEM_CRITICAL_ERROR);
        sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_SYSTEM_CRITICAL_ERROR,tran_id);
        return;
    }
    
    int local_product_id = pc->local_id_;
    
    delete npi;
    npi = NULL;
    
    pthread_t tid;
    struct NewPaymentAdd *npa;
    npa = (struct NewPaymentAdd *) malloc (sizeof(NewPaymentAdd));
    if(npa == NULL) {
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_SYSTEM_CRITICAL_ERROR);
        sendErrorResponseFroPayment(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_SYSTEM_CRITICAL_ERROR,tran_id);
        return;
    }
    npa->eq = this->eq_;
    npa->fd_ = e.fd_;
    npa->local_product_id = local_product_id;
    npa->server_id = server_id;
    npa->uid = uid;
    npa->tran_id = new string(tran_id);
    pthread_create(&tid,NULL,paymentAdd,(void *)npa);
    return;
    
}*/
void EventHandler::processPBak(EventCmd &e, vector<string> &check_cmd)
{
    if(check_cmd.size()!=6) return;
    uid_type uid;
    int server_id;
    string tran_id = check_cmd[4];
    string product_id = check_cmd[5];
    bool check = safeAtoll(check_cmd[1], uid);
    if(check == false) return;
    check = safeAtoi(check_cmd[3], server_id);
    if(check == false) return;
    if(tran_id.size()==0||tran_id.size() >32) return;
    User * user =safeGetUser(uid, CMD_PBAK,e.fd_,check_cmd[2]);
    if(user == NULL) return;
    LOG4CXX_INFO(logger_, "pbak;"<<uid);
    NewPaymentInfo * npi = dh_->loadNewPaymentInfoBak(tran_id);
    if(npi == NULL){
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_NOT_RECEIVED_YET);
        sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_PAYMENT_NOT_RECEIVED_YET,tran_id);
        return;
    }
    
    if(uid!=npi->uid_ || product_id != npi->product_id_ || server_id != npi->server_id_){
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH);
        sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH,tran_id);
        return;
    }
    if(server_id != this->server_id_){
        sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH,tran_id);
        return;
    }
    PaymentConfig * pc = game_config.getPaymentConfig(product_id);
    if(pc == NULL){
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_CONFIG_ERROR);
        sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_CONFIG_ERROR,tran_id);
        return;
    }
    if(pc->price_ != npi->order_money_){
        //sendErrorResponse(e.fd_, CMD_NEWPAYMENTVERIFY, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH);
        sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH,tran_id);
        return;
    }
    if(npi->order_status_ != NEW_PAYMENT_RECEIVED){
        sendErrorResponseFroPayment(e.fd_, CMD_PBAK, ERROR_PAYMENT_TRADE_COMPLETE,tran_id);
        return;
    }
    npi->order_status_ = NEW_PAYMENT_COMPLETE;
    check = dh_->saveNewPaymentStatusBak(npi->tran_id_, npi->order_status_);
    user->diamond_ += pc->amount_;
    user->pay_count_ ++;
    ActConfig * ac = game_config.getActConfig(ACT_1);
    if(ac != NULL){
        act_1(user,pc->amount_);
    }
    check = dh_->saveUser(user);
    if(check == false){
        sendErrorResponse(e.fd_, CMD_PBAK,ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    
    LOG4CXX_INFO(logger_, "pbaksucc;"<<uid<<";"<<user->diamond_);
    
    string res = buildPBakResponse(user, npi);
    nh_->sendString(e.fd_, res);
    
    if(npi!= NULL){
        delete npi;
        npi = NULL;
    }
    return;
}