PDA

View Full Version : سوال: مشکل در ارسال پیامک از طریق وب سرویس؟؟؟ (حل شد)



ghasemweb
چهارشنبه 07 فروردین 1392, 11:53 صبح
سلام
من یه پنل ارسال پیامک خریدم و مشکلی هم ندارم باهاش و از طریق لوکال هاست خودم تونسم به درستی باهاش پیامک ارسال کنم و کارهای دیگه.
اما الان مشکل من اینه که وقتی روی هاست آپلود کردم که تست کنم پیامک ارسال میشه اما متن خالی به گوشی میرسه!!!
مشکل کجاست ؟؟؟

aliblue
چهارشنبه 07 فروردین 1392, 12:05 عصر
بدون دیدن کد ها نمیشه گفت مشکل کجاست ولی اکثر شرکت های ارائه دهنده این خدمات اعلام کرده اند که در ایام عید با محدودیت هایی روبرو هستند.

ghasemweb
چهارشنبه 07 فروردین 1392, 12:21 عصر
بدون دیدن کد ها نمیشه گفت مشکل کجاست ولی اکثر شرکت های ارائه دهنده این خدمات اعلام کرده اند که در ایام عید با محدودیت هایی روبرو هستند.

دوست عزیز مشکلی در ارسال از لوکال هاست ندارم تو هاست اینترنتی این مشکل هست.




<?php
// turn off the WSDL cache
ini_set("soap.wsdl_cache_enabled", "0");
try {
$client = new SoapClient("http://www.site.com/post/send.asmx?wsdl");
$parameters['username'] = "username";
$parameters['password'] = "pass";
$parameters['from'] = "10000...";
$parameters['to'] = array("912...");
$parameters['text'] =iconv($encoding, 'UTF-8//TRANSLIT',"تست");
$parameters['isflash'] = false;
$parameters['udh'] = "";
$parameters['recId'] = array(0);
$parameters['status'] = 0x0;

echo $client->SendSms($parameters)->SendSmsResult;

} catch (SoapFault $ex) {
echo $ex->faultstring;
}
?>

ghasemweb
چهارشنبه 07 فروردین 1392, 14:24 عصر
ممنون میشم راهنمایی کنید

reza10wert
چهارشنبه 07 فروردین 1392, 16:15 عصر
سلام
من خودم از این وب سرویس استفاده کرده ام

$parameters['text']
هر چی که دوست داری بنویس و این هایی که خودش نوشته رو پاک کن

ghasemweb
چهارشنبه 07 فروردین 1392, 18:16 عصر
سلام
من خودم از این وب سرویس استفاده کرده ام

$parameters['text']
هر چی که دوست داری بنویس و این هایی که خودش نوشته رو پاک کن

ممنون.اما دقیق نه شما متوجه مشکل من شدید نه من متوجه پاسخ شما!!!!
الان من برای این تکست مقدار دادم اما تو هاست که تست میزنم خالی میره به گوشی مقصد

ghasemweb
چهارشنبه 07 فروردین 1392, 20:51 عصر
کسی نیست بدونه مشکل از تنظیمات سروره یا چیزه دیگه؟؟؟؟

ghasemweb
پنج شنبه 08 فروردین 1392, 01:12 صبح
چه کنیم ما ؟؟؟؟؟؟؟؟

$ M 3 H R D A D $
پنج شنبه 08 فروردین 1392, 01:30 صبح
شما چه متنی مینویسید ؟شاید اون متن فیلتر باشه

ghasemweb
پنج شنبه 08 فروردین 1392, 11:00 صبح
شما چه متنی مینویسید ؟شاید اون متن فیلتر باشه

مرسی از پاسخ شما. نه بابا یه کلمه تست و سلام رو میفرستم خالی میره.بعدشم کی فیلتره میکنه یعنی؟
جالبه متن لاتین ارسال میشه فقط فارسی بودنی اینطوری میشه به نظرم مشکل از تابع iconv باشه که متن فارسی رو خالی میکنه

ghasemweb
پنج شنبه 08 فروردین 1392, 11:18 صبح
فایلی که اسکریپت توش بود رو با utf8 ذخیره کردم و تابع iconv رو برداشتم درست ارسال شد!!!

$ M 3 H R D A D $
پنج شنبه 08 فروردین 1392, 11:29 صبح
من واسه نوشتن یک برنامه hello word اول یک نوتپت باز میکنم بعدش یونیکد و دست میزنم بعد تگ php و باز میکنم !
اینو اول انجام میدادی دیگه !

MMSHFE
پنج شنبه 08 فروردین 1392, 11:30 صبح
این کار شما پاک کردن صورت مسئله است. باید با پشتیبانی تماس بگیرین و بگین iconv رو فعال کنن. ضمناً توی تنظیمات وب سرویس، این موارد رو هم درنظر بگیرین:


$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;

ghasemweb
پنج شنبه 08 فروردین 1392, 17:50 عصر
این کار شما پاک کردن صورت مسئله است. باید با پشتیبانی تماس بگیرین و بگین iconv رو فعال کنن. ضمناً توی تنظیمات وب سرویس، این موارد رو هم درنظر بگیرین:


$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;


ممنون بزرگوار.پس تابع iconv باید توسط هاستینگ به صورت دستی فعال بشه؟

MMSHFE
جمعه 09 فروردین 1392, 07:59 صبح
بله مگه اینکه خودتون اجازه دستکاری تنظیمات یا نصب PHP با تنظیمات سفارشی رو داشته باشین (معمولاً VPSها چنین اجازه ای میدن).

ghasemweb
جمعه 09 فروردین 1392, 16:39 عصر
بازم تشکر.میشه دقیقا در مورد کار تابع iconv توضیح بدید که کارکردش چیه؟
بعدشم یونیکد فایل php چی باشه مناسبتره ؟ چون الان من با یونیکد utf8 کار میکنم دیگه چه نیازی دارم به استفاده از iconv ؟ اگه دلیلی بگید ممنون میشم تا از اشتباه در بیام

MMSHFE
جمعه 09 فروردین 1392, 21:55 عصر
تابع iconv یک رشته رو از یک کدگذاری به کدگذاری دیگه تبدیل میکنه. بهترین کدگذاری برای فایلهای PHP جهت کارکرد صحیح UTF-8 without BOM هست. استفاده از iconv اجباری نیست ولی اگه از کدگذاری دیگری استفاده بشه، با کمک iconv و تنظیم کردن کدگذاری مبدأ بصورت Auto Detect میتونید رشته دریافتی رو از هر کدگذاری که باشه، به کدگذاری Unicode تبدیل کنید.

ghasemweb
شنبه 10 فروردین 1392, 09:12 صبح
تابع iconv یک رشته رو از یک کدگذاری به کدگذاری دیگه تبدیل میکنه. بهترین کدگذاری برای فایلهای PHP جهت کارکرد صحیح UTF-8 without BOM هست. استفاده از iconv اجباری نیست ولی اگه از کدگذاری دیگری استفاده بشه، با کمک iconv و تنظیم کردن کدگذاری مبدأ بصورت Auto Detect میتونید رشته دریافتی رو از هر کدگذاری که باشه، به کدگذاری Unicode تبدیل کنید.

ممنون آقا هر چقدر بیشتر راهنمایی میکنید بیشتر سوال برام پیش میاد که بپرسم و یاد بگیرم.
الان فرق بین UTF-8 without BOM با UTF-8 چیه؟؟ بعدشم یه مثال برای تابع iconv بگید که مبداء رو اتوددکت کنه؟؟

MMSHFE
شنبه 10 فروردین 1392, 09:25 صبح
فرقشون در اینه که اولی، Byte Order Mark توش نیست و درنتیجه خطای معروف Cannot modify headers موقع کار با سشن و تابع header و کوکی و... پیش نخواهد آمد. بحث Auto Detect یکم گسترده است. مثلاً اگه مطمئنید که MultiByte هست، میتونید از کد زیر استفاده کنید تا هر رشته ای رو تبدیل به یونیکد کنه:


function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}

اما اگه مطمئن نیستین، باید کدگذاری رو تشخیص بدین. مثلاً اگه RSS یا یک صفحه HTML رو دارین میخونین ، باید فیلد Content-Type رو بررسی کنید. به مثال زیر دقت کنید که با cURL کار میکنه:


$url = 'http://www.lr-online.de/storage/rss/rss/sport.xml';

$accept = array(
'type' => array('application/rss+xml', 'application/xml', 'application/rdf+xml', 'text/xml'),
'charset' => array_diff(mb_list_encodings(), array('pass', 'auto', 'wchar', 'byte2be', 'byte2le', 'byte4be', 'byte4le', 'BASE64', 'UUENCODE', 'HTML-ENTITIES', 'Quoted-Printable', '7bit', '8bit'))
);
$header = array(
'Accept: '.implode(', ', $accept['type']),
'Accept-Charset: '.implode(', ', $accept['charset']),
);
$encoding = null;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
$response = curl_exec($curl);
if (!$response) {
// error fetching the response
} else {
$offset = strpos($response, "\r\n\r\n");
$header = substr($response, 0, $offset);
if (!$header || !preg_match('/^Content-Type:\s+([^;]+)(?:;\s*charset=(.*))?/im', $header, $match)) {
// error parsing the response
} else {
if (!in_array(strtolower($match[1]), array_map('strtolower', $accept['type']))) {
// type not accepted
}
$encoding = trim($match[2], '"\'');
}
if (!$encoding) {
$body = substr($response, $offset + 4);
if (preg_match('/^<\?xml\s+version=(?:"[^"]*"|\'[^\']*\')\s+encoding=("[^"]*"|\'[^\']*\')/s', $body, $match)) {
$encoding = trim($match[1], '"\'');
}
}
if (!$encoding) {
$encoding = 'utf-8';
} else {
if (!in_array($encoding, array_map('strtolower', $accept['charset']))) {
// encoding not accepted
}
if ($encoding != 'utf-8') {
$body = mb_convert_encoding($body, 'utf-8', $encoding);
}
}
$simpleXML = simplexml_load_string($body, null, LIBXML_NOERROR);
if (!$simpleXML) {
// parse error
} else {
echo $simpleXML->asXML();
}
}

منبع (http://stackoverflow.com/questions/910793/detect-encoding-and-make-everything-utf-8)

ghasemweb
شنبه 10 فروردین 1392, 09:32 صبح
راستی فعال بودن یه تابع مثل iconv میشه با function_exists فهمید درسته؟ الان من چک کردم iconv فعاله

MMSHFE
شنبه 10 فروردین 1392, 09:43 صبح
پس این کد رو تست کنید:


$message = 'تست';
$parameters['text'] = iconv(mb_detect_encoding($message), 'UTF-8//TRANSLIT', $message);
/*
OR
$parameters['text'] = iconv('windows-1256', 'UTF-8//TRANSLIT', $message);
*/

ghasemweb
شنبه 10 فروردین 1392, 10:07 صبح
خیلی خیلی ممنون استاد عزیز مشکل حل شده فعلا