PDA

View Full Version : مشکل با وب سرویس قاصدک



archiver
سه شنبه 08 مرداد 1392, 12:04 عصر
سلام دوستان
من قصد دارم ار وب سرویس قاصدک برای شارژ مستقیم استفاده کنم اما متاسفانه به مشکل خوردم. وقتی از نمونه کد خودشون استفاده می کنم با این خطا روبرو میشم :
Call to a member function GetStatus() on a non-object in ghasedak_charge.php on line 251

که خط 251 این هست :

$getstatus = $this->soap_object->GetStatus();

میشه لطفا کمک کنید.
ممنون

MMSHFE
سه شنبه 08 مرداد 1392, 12:42 عصر
کد کاملتون رو بگذارین. الآن this$ به چی داره اشاره میکنه؟ کد رو توی کلاس نوشتین؟ با این یک خط نمیشه فهمید مشکل چیه.

archiver
سه شنبه 08 مرداد 1392, 13:27 عصر
کد کاملتون رو بگذارین. الآن this$ به چی داره اشاره میکنه؟ کد رو توی کلاس نوشتین؟ با این یک خط نمیشه فهمید مشکل چیه.

فایل رو ضمیمه کردم
ممنون

MMSHFE
سه شنبه 08 مرداد 1392, 17:51 عصر
<?php
class WebService {
private $url = 'http://elkapos.com:81/ghasedaknetws.asmx?wsdl';
private $brucker_id = '';
private $soap_object;
private $transection_number;
private $timer;
private $login_array = array('Username' => '', 'Pass' => '', 'Pos_Id' => '');
private $list_error = array(
'0' => 'عملیات بدون خطا میباشد',
'1' => 'اعتبار ناکافی',
'2' => 'شماره مجازی در سیستم وجود ندارد',
'4' => 'خطا در سیستم یا انجام عملیات',
'5' => 'تاریخ آخرین لاگین نامعتبر',
'7' => 'شارژ درخواستی موجود نیست یا امکان پذیر نمیباشد',
'8' => 'انجام عملیات شارژ ناموفق',
'10' => 'اطلاعات ارسالی نامعتبر',
'12' => 'پوز آی دی نامعتبر',
'13' => 'عملیات شارژ در حال انجام میباشد',
);
private $check_status_returned_result;
private $check_status_string;
public $check_status = array();
public $amount;
public $tellnumber;
public $login_id;
public $message;
// ================================================== ================================================== ==//
// This Method Make New Object of SoapClient and After Make Object Select LoginID from Data base //
// ================================================== ================================================== ==//
public function __construct(){
try {
$this->soap_object = new SoapClient($this->url);
$this->connection();
}
catch(Exception $e) {
$this->message = array('type' => 'error', 'message' => 'مشکلی در ارتباط با وب سرویس به وجود آمده است', 'method' => 'construct');
}
}
// ================================================== ================================================== ==//
// This Method Select LoginID From Database and input that inside login_id property //
// ================================================== ================================================== ==//
private function connection() {
$query = mysql_query('SELECT * FROM `connections` ORDER BY `connections_id` DESC LIMIT 1');
$data = mysql_fetch_assoc($query);
$this->login_id = $data['connections_loginid'];
if(is_null($this->login_id) || empty($this->login_id)) {
$result = $this->login();
}
}
// ================================================== ================================================== ================================================== ========//
// This Method Get New LoginID from Webservice and Insert New LoginID to Database and after That Call $this->Connection(); to Select New Login ID From Database. //
// ================================================== ================================================== ================================================== ========//
private function login() {
try {
$login = $this->soap_object->Login($this->login_array);
$this->check_status_returned_result = 'LoginResult';
$this->check_status_string = $login;
$this->check_status();
if($this->check_status['status'] == 0) {
mysql_query("INSERT INTO `connections` VALUES ('','{$this->check_status['LoginID']}')");
if (mysql_affected_rows() > 0) {
$this->connection();
return true;
}
else {
$this->message = array('type' => 'error', 'message' => 'مشکلی در ذخیره اطلاعات لاگین آی دی در دیتابیس وجود دارد');
return false;
}
}
else {
$this->message = array('type' => 'error', 'message' => $this->list_error[$this->check_status['status']], 'method' => 'login');
return false;
}
}
catch(Exception $e) {
$this->message = array('type' => 'error', 'message' => 'مشکلی در متد لاگین وجود دارد');
return false;
}
}
// ================================================== ================================================== ==//
// This Method For Call charge Method From Webservice to Charge Sim Card //
// ================================================== ================================================== ==//
public function recharge($tell_number,$amount) {
if ($tell_number != '' && $amount != '') {
$recharge_array = array(
'Loginid' => $this->login_id,
'Tell_Number' => $tell_number,
'Amount' => (int) $amount,
'Service_Type' => (int) $_SESSION['amazingcharge'],
'BrokerId' => $this->brucker_id,
'B_ExtTrid' => $_SESSION['tid_holder2']
);
$_SESSION['stell_number'] = $tell_number;
$_SESSION['samount'] = $amount;
try {
$recharge = $this->soap_object->Recharge($recharge_array);
$this->check_status_returned_result = 'RechargeResult';
$this->check_status_string = $recharge;
$this->check_status();
// if login faild do another Login
if($this->check_status['status'] == 5 || $this->check_status['status'] == 10) {
if($this->login()) {
$charge = $this->Recharge($_SESSION['stell_number'], $_SESSION['samount']);
}
else {
mysql_query("UPDATE `transactions` SET `transactions_charge_description`='مشکل در شارژ لاگین آی دی',`transactions_charge_status`='0',`transactio ns_ghasedak_tid`='' WHERE (`transactions_tid`='{$_SESSION['tid_holder2']}')");
return false;
}
}
$this->timer = time();
$charge_result = $this->charge_in_query();
if($charge_result['status'] == 0) {
mysql_query("UPDATE `transactions` SET `transactions_charge_description`='{$this->list_error[$this->check_status['status']]}',`transactions_charge_status`='1',`transactions_ ghasedak_tid`='{$charge_result['TR_ID']}' WHERE (`transactions_tid`='{$_SESSION['tid_holder2']}')");
$this->message = array('type' => 'success', 'message' => 'عملیات شارژ کاملا با موفقیت انجام شد');
return true;
}
else if($charge_result['status'] == 13) {
mysql_query("UPDATE `transactions` SET `transactions_charge_description`='{$this->list_error[$this->check_status['status']]}',`transactions_charge_status`='13',`transactions _ghasedak_tid`='{$charge_result['TR_ID']}' WHERE (`transactions_tid`='{$_SESSION['tid_holder2']}')");
$this->message = array('type' => 'error', 'message' => 'عملیات شارژ در حال انجام می باشد');
return false;
}
else {
mysql_query("UPDATE `transactions` SET `transactions_charge_description`='{$this->list_error[$this->check_status['status']]}',`transactions_charge_status`='0',`transactions_ ghasedak_tid`='{$charge_result['TR_ID']}' WHERE (`transactions_tid`='{$_SESSION['tid_holder2']}')");
$this->message = array('type' => 'error', 'message' => 'مشکلی در عملیات شارژ رخ داده است');
return false;
}
}
catch(Exception $e) {
$this->message = array('type' => 'error', 'message' => 'متاسفانه مشکلی در متد ری شارژ وجود دارد');
}
}
else {
$this->message = array('type' => 'error', 'message' => 'پارامترهای ورودی متد ری شارژ دارای مشکل می باشد');
return false;
}
}
// ================================================== ================================================== ==//
// This Method For Check Charge Result //
// ================================================== ================================================== ==//
private function charge_in_query() {
$charge_in_query_array = array(
'B_EXT_Trid' => $_SESSION['tid_holder2'],
'Loginid' => $this->login_id,
'BrokerId' => $this->brucker_id
);
try {
$charge_in_query = $this->soap_object->BrokerChargeInQuery($charge_in_query_array);
$this->check_status_returned_result = 'BrokerChargeInQueryResult';
$this->check_status_string = $charge_in_query;
$this->check_status();
while($this->check_status['status'] == '13') {
if((time() - $this->timer) > 12) {
break;
}
else {
$this->charge_in_query();
}
}
return $this->check_status;
}
catch(Exception $e) {
$this->message = array('type' => 'error', 'message' => 'متاسفانه مشکلی در متد شارژ این کوئری وجود دارد');
}
}
// ================================================== ================================================== ==//
// This Method For Convert Webservice Result To array For Better Using //
// ================================================== ================================================== ==//
private function check_status(){
$string = $this->check_status_string;
$result = $this->check_status_returned_result;
$check_status = $string;
$login_string = explode(';', $check_status->$result);
$login_params = explode(',', $login_string[0]);
$login_values = explode(',', $login_string[1]);
for($i = 0; $i < count($login_params); $i++) {
$array[$login_params[$i]] = $login_values[$i];
}
$this->check_status = $array;
}
// ================================================== ================================================== ==//
// This Method For Check Credit Of Your Account from Webservice //
// ================================================== ================================================== ==//
public function inquiry_amount() {
try {
$inquiry_amount = $this->soap_object->Inquiry_amount(array('Loginid' => $this->login_id));
$this->check_status_returned_result = 'Inquiry_amountResult';
$this->check_status_string = $inquiry_amount;
$this->check_status();
if($this->check_status['status'] == 0) {
return number_format($this->check_status['Amount']);
}
else {
$this->login();
$this->inquiry_amount();
}
}
catch(Exception $e) {
$this->message = array('type' => 'error', 'message' => 'متاسفانه مشکلی در متد این کوئری وجود دارد');
}
}
// ================================================== ================================================== ==//
// This Method For Check Operator Status //
// ================================================== ================================================== ==//
public function getstatus() {
try {
$getstatus = $this->soap_object->GetStatus();
$this->check_status_returned_result = 'GetStatusResult';
$this->check_status_string = $getstatus;
$this->check_status();
if($this->check_status['status'] == 0) {
$TCI = $this->check_status['TCI'];
$MTN = $this->check_status['MTN'];
$result = array('TCI' => $TCI, 'MTN' => $MTN);
return($result);
}
else {
$this->login();
$this->getstatus();
}
}
catch(Exception $e) {
$this->message = array('type' => 'error', 'message' => 'متاسفانه مشکلی در متد وضعیت اپراتور ها وجود دارد');
}
}
}
?>

یکم کدتون رو بهینه کردم (فقط ازنظر نگارشی و نوع رشته ها و کوئریها) ولی مشکل بوجود آمده گویا ناشس از اینه که شئ SoapClient به درستی ایجاد نشده. یکبار با print_r یا var_dump اون رو نمایش بدین تا ببینیم مشکل از چیه. شاید از کلاس WebService شئ ایجاد نشده باشه.

archiver
سه شنبه 08 مرداد 1392, 21:49 عصر
ممنون از شما
کد خیلی مرتب تر شد ولی همچنان همون مشکل هست. من بعد از تعریف آبجکت webservice و همچنین بعد از آبجکت soap_object طبق گفته شما var_dump گذاشتم و خروجی این شد :


object(WebService)#2 (14) { ["url":"WebService":private]=> string(45) "http://elkapos.com:81/ghasedaknetws.asmx?wsdl" ["brucker_id":"WebService":private]=> string(5) "xxxx" ["soap_object":"WebService":private]=> NULL ["transection_number":"WebService":private]=> NULL ["timer":"WebService":private]=> NULL ["login_array":"WebService":private]=> array(3) { ["Username"]=> string(11) "xxxx" ["Pass"]=> string(10) "xxxx" ["Pos_Id"]=> string(5) "xxxx" } ["list_error":"WebService":private]=> array(10) { [0]=> string(41) "عملیات بدون خطا میباشد" [1]=> string(25) "اعتبار ناکافی" [2]=> string(57) "شماره مجازی در سیستم وجود ندارد" [4]=> string(51) "خطا در سیستم یا انجام عملیات" [5]=> string(47) "تاریخ آخرین لاگین نامعتبر" [7]=> string(85) "شارژ درخواستی موجود نیست یا امکان پذیر نمیباشد" [8]=> string(45) "انجام عملیات شارژ ناموفق" [10]=> string(42) "اطلاعات ارسالی نامعتبر" [12]=> string(31) "پوز آی دی نامعتبر" [13]=> string(57) "عملیات شارژ در حال انجام میباشد" } ["check_status_returned_result":"WebService":private]=> NULL ["check_status_string":"WebService":private]=> NULL ["check_status"]=> array(0) { } ["amount"]=> NULL ["tellnumber"]=> NULL ["login_id"]=> NULL ["message"]=> array(3) { ["type"]=> string(5) "error" ["message"]=> string(79) "مشکلی در ارتباط با وب سرویس به وجود آمده است" ["method"]=> string(9) "construct" } } Fatal error: Call to a member function GetStatus() on a non-object in /home/blocks/domains/blocks.ir/public_html/newcharge/ghasedak_charge.php on line 208 به نظر میرسه به قول شما soap_object ایجاد نمیشه درسته؟ حالا چیکار باید کرد؟
عبارت های xxxx رو خودم گذاشتم

baraye1bar
پنج شنبه 02 آبان 1392, 10:02 صبح
سلام
منم امروز با وب سرویس قاصدک کار کردم به همین مشکل بر خوردم
راه حلی برای این مشکل پیدا نشد دوستان؟؟