PDA

View Full Version : استفاده از وب سرویس



aliasghar
شنبه 21 مرداد 1391, 18:57 عصر
سلام
من برای ارسال sms توسط نرم افزار در دلفی از وب سرویس استفاده می کنم
با ارسال پیام های لاتیم مشکلی نیست
ولی اگر پیام را بصورت فارسی تایپ کنم دروم موبایل بورت ????????? نوشته میشود
این مشکل زمانی رخ میدهد که من نرم افزار را در ویندوز 7 کامپایل کنم
اگر نرم افزار را در ویندوز xp کامپایل کنم این مشکل را ندارم


ممنون از راهنمایی دوستانه شما

Valadi
شنبه 21 مرداد 1391, 19:14 عصر
شما در ويندوز تان يونيكد را نصب كنيد

BORHAN TEC
یک شنبه 22 مرداد 1391, 00:44 صبح
نسخه دلفی شما چیست؟

aliasghar
یک شنبه 22 مرداد 1391, 08:06 صبح
سلام
من از دلفی 7 و ویندوز 7 نسخه 32 بیتی استفاده می کنم

نمی دونم چطور باید در ویندوز یونیکد را نصب کرد البته ویندوز بطور کامل فارسی شده و من نرم افزارهایم را بصورت فارسی طراحی میکنم

نکته : اگر از همین وب سرویس در #C استفاده کنم پیام بصورت صحیح ارسال می شود

ممنون

mohsen24000
یک شنبه 22 مرداد 1391, 09:06 صبح
یا از دلفی 2009 و به بالا استفاده کن و یا از کامپوننتهای یونیکد مثل TNT روی دلفی 7 تا مشکل یونیکد حل بشه و یا خودت باید کار تبدیل به یونیکد رو انجام بدی...!

aliasghar
یک شنبه 22 مرداد 1391, 11:52 صبح
من از کامپوننتهای TNT هم استفاده کردم ولی باز هم جواب نگرفتم
کسی م تونه با یک تکه کد تبدیل یک رشته معمولی string را به رشته unicode از نوع widestring
را به من بگه
ممنون

arkia
جمعه 07 مهر 1391, 23:12 عصر
دوستان نتیجه چی شد؟ منم همین مشکل رو دارم

BORHAN TEC
شنبه 08 مهر 1391, 08:31 صبح
http://help.multilizer.com/devzone/delphi-cbuilder/localizing-symbols/
http://stackoverflow.com/questions/383195/handling-a-unicode-string-in-delphi-versions-2007

arkia
یک شنبه 09 مهر 1391, 14:11 عصر
http://help.multilizer.com/devzone/delphi-cbuilder/localizing-symbols/
http://stackoverflow.com/questions/383195/handling-a-unicode-string-in-delphi-versions-2007

ممنون ، خوندم اما چیزی سر در نیاوردم ازشون :متفکر: میشه خودتون یه توضیحی بدید؟

BORHAN TEC
سه شنبه 25 مهر 1391, 15:20 عصر
اگه با این کارها مشکلتون حل نشد می تونید از یه راه بهتر استفاده کنید.
شما می توانید آن قسمت از برنامه که مربوط به استفاده از وب سرویس است را در نسخه های جدیدتر دلفی بسازید و در نسخه های قدیمی تر دلفی از آن استفاده کنید. می توانید برای این منظور از dll ها استفاده کنید.

arkia
چهارشنبه 26 مهر 1391, 23:09 عصر
اگه با این کارها مشکلتون حل نشد می تونید از یه راه بهتر استفاده کنید.
شما می توانید آن قسمت از برنامه که مربوط به استفاده از وب سرویس است را در نسخه های جدیدتر دلفی بسازید و در نسخه های قدیمی تر دلفی از آن استفاده کنید. می توانید برای این منظور از dll ها استفاده کنید.

من تو XE مشکلی ندارم اما توی دلفی 7 وب سرویسی که استفاده می کنم کاراکتر های غیر یونیکد یا utf8 رو فیلتر میکنه. توی دلفی xe کامپاننتش رو ساختم اما وقتی تو 7 نصبش کردم بازم فیلترش میکنه حتی با کد های مختلف سعی کردم تبدیل به یونیکد کنم اما نشد که نشد. dll رو امتحان نکردم

BORHAN TEC
چهارشنبه 26 مهر 1391, 23:17 عصر
این به خاطر اینه که Delphi 2009 و نسخه های جدیدتر به صورت کامل از یونیکد پشتیبانی می کنند ولی نسخه های قدیمی تر دلفی از یونیکد پشتیبانی نمی کنند.

arkia
پنج شنبه 27 مهر 1391, 20:36 عصر
این به خاطر اینه که Delphi 2009 و نسخه های جدیدتر به صورت کامل از یونیکد پشتیبانی می کنند ولی نسخه های قدیمی تر دلفی از یونیکد پشتیبانی نمی کنند.

راه حل چیه آقای عشایری؟

Mahbod Rad
دوشنبه 22 آبان 1391, 21:52 عصر
از تابع AnsiToUtf8() برای تبدیل پیام فارسی و ارسال استفاده کنید:چشمک:

arkia
سه شنبه 23 آبان 1391, 02:41 صبح
از تابع AnsiToUtf8() برای تبدیل پیام فارسی و ارسال استفاده کنید:چشمک:

امتحان کردم اما نشد

BORHAN TEC
سه شنبه 23 آبان 1391, 16:17 عصر
امتحان کردم اما نشد
باید اول ببینیم که دلفی شما چطور اینترفیس اون وب سرویس رو generate کرده؟!!! اگر پارامترهای رشته رو به صورت String مشخص کرده باشه باید اونها رو به نوع دیگه ای مثل WideString تغییر بدین. چرا که اگر در نسخه های قدیمی یک متن یونیکد رو در String بریزید اطلاعات گم می شود و در نهایت کاراکتر ها به صورت عجیب و غریب فرستاده می شوند و دلیل آن هم این است که در نسخه های قدیمی String معادل AnsiString است. ولی در نسخه های 2009 تا خود XE3(که تا زمان نوشتن این پست آخرین نسخه است) نوع داده String معادل UnicodeString است.

Mahbod Rad
شنبه 27 آبان 1391, 18:41 عصر
من برنامه ام را با دلفی 7 نوشته ام و تیکه کد زیر قسمتی است که پیام را ارسال میکند
از خدمات شرکت میزبان پایتخت استفاده شده است و البته من از طریق URL اقدام به ارسال پیامک میکنم


var
Snd_Msg,Snd_FullNumber:string;
..
begin
..
FrmSMSProcces.HTTPReqResp1.URL:='http://panel.mizbansms.ir/eapi.aspx?username='+FrmSMSProcces.WebId.Text+
'&password='+FrmSMSProcces.WebPas.Text+
'&api='+FrmSMSProcces.WebApi.Text+
'&text='+AnsiToUtf8(Snd_Msg)+
'&to='+Snd_FullNumber+
'&from='+FrmSMSProcces.WebNumber.Text;
FrmSMSProcces.HTTPReqResp1.Get(Res);
..
end;

arkia
شنبه 27 آبان 1391, 19:03 عصر
من برنامه ام را با دلفی 7 نوشته ام و تیکه کد زیر قسمتی است که پیام را ارسال میکند
از خدمات شرکت میزبان پایتخت استفاده شده است و البته من از طریق URL اقدام به ارسال پیامک میکنم


var
Snd_Msg,Snd_FullNumber:string;
..
begin
..
FrmSMSProcces.HTTPReqResp1.URL:='http://panel.mizbansms.ir/eapi.aspx?username='+FrmSMSProcces.WebId.Text+
'&password='+FrmSMSProcces.WebPas.Text+
'&api='+FrmSMSProcces.WebApi.Text+
'&text='+AnsiToUtf8(Snd_Msg)+
'&to='+Snd_FullNumber+
'&from='+FrmSMSProcces.WebNumber.Text;
FrmSMSProcces.HTTPReqResp1.Get(Res);
..
end;


از چه ورژن دلفی استفاده می کنید؟

BORHAN TEC
شنبه 27 آبان 1391, 20:02 عصر
سلام

از چه ورژن دلفی استفاده می کنید؟
بنده خدا دیگه چطوری بنویسه دلفی 7. خداییش یه بار خط اول پستی که نقل قول کردی رو بخون. :لبخندساده:

Mask
شنبه 27 آبان 1391, 20:22 عصر
خدمات شرکت میزبان پایتخت
دوستان از چه وب سرویس برای ارسال اسمس تا به حال استفاده کردند که هم مطمئن باشه و هم با دلفی بشه باهاش کار کرد و دلیوریشو گرفت؟
این شرکتی که نوشتید سایتش چیه؟

arkia
شنبه 27 آبان 1391, 21:28 عصر
سلام

بنده خدا دیگه چطوری بنویسه دلفی 7. خداییش یه بار خط اول پستی که نقل قول کردی رو بخون. :لبخندساده:

بله شرمنده :خجالت: آخه من خیلی با 7 مشکل دارم حساس شدم! :لبخند:

یوسف زالی
چهارشنبه 08 آذر 1391, 12:30 عصر
سلام. می بخشین میام وسط بحث.
من این مشکل رو برای نرم افزار اس ام اس با دلفی 7 و سون داشتم.
بگزدید دنبال UseUTF8InHeader در شی HTTP.
اون رو به سادگی true کنید.

راستی Gold جان من با AFE کار می کنم. فعلا که خدا رو شکر خوب هست.

arkia
شنبه 25 آذر 1391, 23:48 عصر
سلام. می بخشین میام وسط بحث.
من این مشکل رو برای نرم افزار اس ام اس با دلفی 7 و سون داشتم.
بگزدید دنبال UseUTF8InHeader در شی HTTP.
اون رو به سادگی true کنید.

راستی Gold جان من با AFE کار می کنم. فعلا که خدا رو شکر خوب هست.

من هنوز مشکلم حل نشده این هم امتحان کردم اما جواب نمیده میشه بیشتر توضیح بدی ؟

یوسف زالی
یک شنبه 26 آذر 1391, 16:51 عصر
کدی که می گی امنحان کردی رو بگذار

arkia
چهارشنبه 29 آذر 1391, 13:31 عصر
کدی که می گی امنحان کردی رو بگذار

ممنون دوست عزیز.

این لینک وب سرویس منه


http://ws.smspishkhan.ir/SmsService.asmx?wsdl

این هم کد دلفی 7:

procedure TForm1.Button1Click(Sender: TObject);
var
WS: SmsServiceSoap;
H: AccountCredentials;
E:string;
begin
WS := GetSmsServiceSoap;
try
H := AccountCredentials.Create;
H.username := username.Text;
H.password:=password.Text;
(WS as ISOAPHeaders).Send(H);
E:=WS.SendMessage(lineno.Text,body.Text,recipient. Text,messageclass.ItemIndex,scheduletime.Text).Err orDesc;
ShowMessage(E);
finally
end;
end;


توی دلفی XE این کد کار میکنه اما توی دلفی 7 وقتی با برنامه Fiddler خروجی xml رو نیگاه می کنم میبینم

به جای کد:

<?xml version="1.0" encoding="UTF-8"?>


کد:

<?xml version="1.0"?>


ارسال میشه.

حالا من توی فایلی که Importer درست می کنه این کدی که فرمودید "UseUTF8InHeader " رو اضافه کردم:


function GetSmsServiceSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): SmsServiceSoap;
const
defWSDL = 'http://ws.smspishkhan.ir/SmsService.asmx?wsdl';
defURL = 'http://ws.smspishkhan.ir/SmsService.asmx';
defSvc = 'SmsService';
defPrt = 'SmsServiceSoap';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
begin
RIO := THTTPRIO.Create(nil);
rio.HTTPWebNode.UseUTF8InHeader:=true; // این کد
end
else
RIO := HTTPRIO;
try
Result := (RIO as SmsServiceSoap);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;


اما باز هم مشکل قبل سر جاش باقیه یعنی کاراکتر ها به صورت علامت سوال ارسال میشه.

arkia
چهارشنبه 29 آذر 1391, 13:50 عصر
با این هم جواب نمیده

RIO.Converter.Encoding:='utf-8';


می خوام این هم امتحان کنم اما خطا ی syntax میده

RIO.Converter.Options := [soUTF8InHeader];

یوسف زالی
چهارشنبه 29 آذر 1391, 20:08 عصر
1- لینک WSDL خرابه.
2- به جای روش Get خودتون شی بگیرید.
3- اون متد if داره که شما فقط در یک جاش کد رو گذاشتید.

این روش رو دنبال کنید:
یک شی HTTPRIO روی فرم بگذارید.
در OnCreate فرم بنویسید HTTPRIO1.HTTPWebNode.UseUTF8InHeader := true;
در متد ارسال :
WS := (HTTPRIO1 as SmsServiceSoap); // casting
و در ادامه :
WS.SendSMS..

اگر هیچ کدوم کمکی نکرد یوزر پس موقتی رو برام پیام خصوصی کنید بررسی کنم.

arkia
پنج شنبه 30 آذر 1391, 00:42 صبح
1- لینک WSDL خرابه.
2- به جای روش Get خودتون شی بگیرید.
3- اون متد if داره که شما فقط در یک جاش کد رو گذاشتید.

این روش رو دنبال کنید:
یک شی HTTPRIO روی فرم بگذارید.
در OnCreate فرم بنویسید HTTPRIO1.HTTPWebNode.UseUTF8InHeader := true;
در متد ارسال :
WS := (HTTPRIO1 as SmsServiceSoap); // casting
و در ادامه :
WS.SendSMS..

اگر هیچ کدوم کمکی نکرد یوزر پس موقتی رو برام پیام خصوصی کنید بررسی کنم.

ممنون که پیگیری کردید. لینک درسته اون کاری که گفتید هم انجام دادم اما بازم نشد. یه لطفی بکنید خودتون یه نگاهی بندازید. یوزر پس نمیخواد چون اگر درست ارسال بشه ( علامت سوال نره) پیغام میده که نام کاربری یا کلمه عبور صحیح نیست اما اگر توی یه انکودینگ دیگه ارسال بشه و وب سرویس علامت سوال بگیره پیغام میده که کاربر مورد نظر یافت نشد. میتونید با دلفی xe امتحان کنید اما مشکل من تو دلفی 7 ه .

یوسف زالی
پنج شنبه 30 آذر 1391, 13:02 عصر
یک نکته رو فراموش کردم بگم. در شی HTTPRIO باید WSDL و PORT و Service رو هم تنظیم کنید.
نمی دونم چرا آدرسی که دادید در اینجا (تهران - پارس آنلاین) وجود خارجی نداره!
http://ws.smspishkhan.ir/SmsService.asmx?wsdl
http://ws.smspishkhan.ir/SmsService.asmx
http://ws.smspishkhan.ir/
http://www.smspishkhan.ir/
http://smspishkhan.ir/contactus.aspx
http://www.smspishkhan.ir/AboutUs.aspx

:متفکر:

arkia
پنج شنبه 30 آذر 1391, 16:03 عصر
احتمالا به خاطر اینه که سرورش کرجه اینطوریه نمیدونم اما اینجا باز میشه اینترنت من مال مخابراته. آدرس وب سرویس رو هم میدم بهش پورت هم نیازی به تنظیم نداره (قبلا میخواست اما الان برش داشتن) Service رو نمیدونم چیه اما دیشب که امتحان کردم (با قرار دادن شی روی فرم) وب سرویس پاسخ داد اما هنوز با انکودینگ خودش ارسال میشه

یوسف زالی
پنج شنبه 30 آذر 1391, 18:49 عصر
منظوره از اونها Property های شی HTTPRIO هست. خصوصیات Port و Service بعد از ست کردن WSDLLocation قابل دسترس می شن.
در هر حال اینجا که همه چیز خوبه!
اگر نیاز شدید داشتید خصوصی بنده رو آگاه کنید.