View Full Version : پروسه خرید با E-card
diosa000
پنج شنبه 15 آذر 1386, 14:42 عصر
سلام دوستان خسته نباشید
من یه سایت ساده دارم که با jsp نوشتم . اگه بخوام سیستم خرید با E-card ها رو در سایتم پیاده سازی کنم - آیا برای پروسه تجاری و سیستم های امنیتی باید از ejb ها استفاده کنم یا گزینه های دیگری هم هست ؟
ممنون میشم اگر در این زمینه بیشتر راهنمایم کنید.
pooyanm
پنج شنبه 15 آذر 1386, 21:59 عصر
جسارتا می پرسم آپلود هم کردید؟ با هاست چند تومنی؟
diosa000
شنبه 17 آذر 1386, 09:28 صبح
نه هنوز این کار رو نکردم . فعلا با local کار میکنم . اتفاقا در این زمینه هم مشکل دارم.
saeed_Z_F
یک شنبه 18 آذر 1386, 13:20 عصر
سلام
میخواهید سیستم E-card واقعی پیاده سازی کنید (مثلا خرید با استفاده از کارتهای عضو شتاب) یا اینکه یک سیستم فرضی.
mohammad_ms_ms
جمعه 10 دی 1389, 11:37 صبح
سلام
میخواهید سیستم E-card واقعی پیاده سازی کنید (مثلا خرید با استفاده از کارتهای عضو شتاب) یا اینکه یک سیستم فرضی.
سلام
چقدر سوال می کنی. خوب معلومه چی می خواد. نمی خوتد کار بیخود بکنه که . حتما برای پرداخت پول برای سایتش می خواد . اگه بلدی بگو خوب . سیستم فرضی دیگه چه صیغه ایه ؟:متعجب:
javaphantom
جمعه 10 دی 1389, 13:19 عصر
تا اونجا که من فهمیدم شما می خواهید client ها تو سایت شما بتونند بصورت واقعی خرید internet ی بکنند.
راه حل شما اینه که بری سراغ بحث شیرینه web service ها. بانکها همشون یک سری سرویس به مشتریانی مثل شما می دهند برای گرفتن این سرویس از بانکها باید اول با او شعبه بانک مخصوص درخواست بدی اونا بهت نمونه کد هم حتی می دن بعد این ور یعنی سمت شما باید web service ی بیاری بالا تا با بانک صحبت رد و بدل کنه
javaphantom
جمعه 10 دی 1389, 13:24 عصر
برای بالا آوردن web service نیازی نیست که حتما از ejb استفاده کنی شما می تونی برای مثال با Apache CXF یا هر چی که java باشه
mazdadoost
یک شنبه 12 دی 1389, 10:56 صبح
دوست عزیز :
بانک های عضو شتاب معمولا یک API شبهه REST دارند که میتونید به مراکز بانکداری الکترونیک اون بانکها مراجعه کنید و با طی مراحل قانونی علاوه بر API و مستندات اطلاعات ورود به سیستم رو هم بگیرید . تا الان که به نظر بانک سامان در این زمینه خوب عمل میکنه مخصوصا Failed transaction پایینی داره و این شما رو از ددردسر مشتریانی که پول از حسابشون پریده تا حدی آسوده میکنه . API این بانک PHP دوست هست . اما با مشورت میتونید در Java هم ازش استفاده کنید.
کلا بهتره برای پرداخت اینترنتی از سایت های واسطه استفاده کنید.
موفق باشید.
jmajid
سه شنبه 17 اسفند 1389, 13:48 عصر
میشه بیشتر راهنمایی کنید که web service چی هست و چطور ازش باید استفاده کرد
من هم همین مشکل رو دارم
پروسه های مورد نیاز رو روی وب سایتم راه انداختم اما نمیتونم با بانک از طریق کدی که بانک داده چطوری کار کنم
javaphantom
سه شنبه 17 اسفند 1389, 14:53 عصر
میشه بیشتر راهنمایی کنید که web service چی هست و چطور ازش باید استفاده کرد
من هم همین مشکل رو دارم
پروسه های مورد نیاز رو روی وب سایتم راه انداختم اما نمیتونم با بانک از طریق کدی که بانک داده چطوری کار کنم
بحث SOA یا Service Oriented Architecture یا همان معماری سرویس گرای خودمون بحثی هست بسیار مفصل و شرکتهای مختلف راه کارها و تکنولوژی های مختلفی رو برای پیاده سازی این بحث و عملیاتی کردن اون ارائه کرده اند.
Java هم برای حل این مسئله راه کرد و ابزارها و الگوی استفاده از این ابزارها رو بصورت خیلی مفصل توضیح و آماده کرده که بشه ازش استفاده کرد.
برای اینکه بحث رو به خارج از سوال شما نکشونم و جواب سوال شما رو بصورت خیلی ساده داده باشم با یک مثل بسیار ساده شروع می کنم.
تمام برنامه های تحت وب یا غیر تحت وبی که می نویسیم عمدتا همگی بر روی یک پلت فرم ساخته می شه. مثلا همشون از پلت فرم .net یا همشون با پلت فرم .not نوشته می شه. بیایم اینطور در نظر بگیریم که اگر برای رسید به هدف قبول کنیم که روشهای مختلف وجود داره و نتجه برای ما مهم هست نه راه حل یا روش پس چرا از روشهای پیاده سازی شده و موجود استفاده نکنیم. حالا توضیحاتم رو با یک مثال عملی نشون می دم.
فرض کنید بانک ملت یک شرکتی رو بکار می گیره که براش برنامه بنویسن که از تکنولوژی java استفاده می کنند. یعنی مثل یک کلاسی نوشتن که وقتی شماره حساب و رمز رو بحش می دی و متدود مقدار موجودی رو فراخوان می کنی میره حالا فرض کن jdbc می زنه مقدار رو که مربوط به او شماره حساب هست بر می گردونه.
تا اینجا کلی کار کرده برای کسانی که این محصول رو ازش می خرن مثلا همون بانک ملی و شعبش. اما خوب این ابزار بازم محدودیت ایجاد کرده. هرکی بخواد موجودی بگیره باید بره بانک بعد اون کاربر بانک که بهش teller میگن اون پشت کار کنه.
حالا اومدن یک دستگاهی آوردن به نام ATM یا همون Automate Teller Machine. این بابا کار همون Teller بانک که یک آدم هست رو انجام می ده ولی خوب ماشین هست و باید براش برنامه بنویسی. شرکتی که روی این ATM ها برنامه نویسی می کنه با تکنولوژی .net کار می کنه و اصلا با جاوا سنخیتی نداره. تکلیف چی هست. تو خود بانک خیلی کار ساده بود چون همه از یک جنس بودن یعنی همه از یک پلت فرم استفاده شده بود کار ساده بود تازه اگرم باز از بیرون با همون پلت فرم یعنی java نوشته شده بود بازم کاری نداشت اما الان کار بد شده طرف زبون .net هست. حالا کار از این وحشت ناک تر می شه که شما یک سایت با زبان php نوشتی و تصحیلاتی به کاربر دادی که بتونه بصورت آنلاین مجودی حسابش رو بگیره. حلا کنارش دستگاهایی مثل موبایل و کارت خون و و و رو بزار که هرکدوم با یک تکنلوژی خاصی پیاده سازی شدن. راه حل چیه؟ بانک بیاد برای گرفتن موجودی 20 تا شرکت دیگه با 20 تکنلوژی متفاوت پول بده تا براش موجودی گرفتن رو پیاده سازی کنن.؟
اینجاست که بحصث Service Oriented پیش می یاد.
شما اگر بتونید protocol ی پیدا کنید که بشه این تکنلوژی ها از شون استفاده کنند و سر راه این تکنلوژی ها یکسری Interface یا همون واسط بزارید که این protocol رو قابل فهم برای اون پلت فرم کنن شما تونسید وارد دنیای Service Oriented یا سرویس گرا بشید.
یکی از روشهای معمول و کارآمد دنیای ارتباط بین service ها xml فایل ها هستند. اینکه برای صحبت و یا گرفتن و یا دادن سرویس بصورت xmlی با پلت فرم و تکنولوژی های دیگه بشه صحبت کرد بسیار راه حل خوبی هست. امروزه تبدیل کردن اطلاعات به xml و فرستادن اونها به سمت دیگر پلت فرم و تبدیل گردن این اطلاعات از صورت xml به data قابل فهم برای دیگر پلت فرم که همگی string هستند متداول هست. بازم می گم یکی از روشهای کار با service گرایی هست. رواشهای دیگه ای هم از جمله messaging وجود داره که وارد این بحث نمی شم.
بانک یک سری interface به تو داده که بتونی از طریق اون interface ها xml فایلتو براش بفرسی اونم اون پشت روی data ها مانور بده و نتیجه هم بصورت یک xml فایل برگردونه
با این مقدمه دلم می خواد باقیشو خودت و باقی دوستان کمک کنند تا بشه یک کاریش کرد
jmajid
پنج شنبه 19 اسفند 1389, 11:05 صبح
متشکرم از پاسختون
بانک دقيقا اون واسطي که گفته بودید بوديد رو فرستاده به عنوان یک فایل jar که از اینجا میتونید دانلود کنید 67310
ويه سمپل داده که چطوري ازش استفاده کنيم
کدي که بانک به عنوان نمونه داده دقيقا اينه
import refpayclient.*;
public class useit
{
public static void main( String[] args ){
RefClient myclient = new RefClient("https://modern.enbank.net/ref-payment/ws/ReferencePayment","Full Path Of the .jks file",".jks password");
double res ;
res = myclient.verifyTransaction("Reference Code", "Your MTID" );
if( res < 0 ) {
System.out.println("verify failed "+res); }
else {
System.out.println("verify succeded, amount is:");
System.out.println(res);
} }
}
در اين کد
Reference Code و Your MTID
توسط بانک داده شده
ويک آدرس فايل xml داره که فکر کنم هموني هست که شما گفته بوديد
یک فایل jks و پسووردش هم در این کد هست که نمیدنم چی هست ؟؟؟
javaphantom
پنج شنبه 19 اسفند 1389, 15:53 عصر
من برای اینکه بیشتر مسئله روشن بشه یک مثال تهیه کردم برات که شاید بدرد بخوره.
فرض کن من یک سرویسی در اختیار کاربران می زارم که دو عمل اصلی جمع و تفریق رو انجام می ده و قرار که از بیرون با هر تکنولوژی به این سرویس دسترسی پیدا کنند و از این دو متدود استفاده کنند.
قبل از هر چیز من به چند نکته باید اشاره کنم.
نکته اول : مخاطب من مدیران و مسئولانی هستند که قدرت اجرایی دارند.
اینکه جاوا امروزه بسیار پر طرفدار و کاربردی هست و از اونجایی که شرکتهای مختلف برای کاستن پیچیدگیها و مفاهیم در جاوا و برای تسریع کردن در امر توسعه نرم افزار فریم ورکهای متعددی به بازار دادن که این فریم ورک ها چه استاندارد و پیشنهاد خود سان اراکل و چه فریم ورکهای مردمی یا عمومی یا محبوب برای امر توسعه نرم افزار چه در ایران و در خارج از ایران بسیار پر طرفدار و کاربردی شده اند لذا خواهشمند هستم که در این بخش قسمتی مجزا ولی در همین قسمت فروم جاوا اتاقهای تخصصی مربوط به این فریم ورکها ایجاد شود تا بلکه مخاطبان و دوستاران تجربیات و دانشهای خودشون رو در این اتاقها یا همان تالارها بصورت تخصصی به اجرا یا کست دانش کنند.
یکی از این فریم ورکهای پرطرفدار چه در .net , چه در java فریم ورک spring هست. امروزه اکثر پروژهای بزرگ با این فریم ورک که الان خودشت تبدیل به یک platform شده در ایران انجام می شه. این فریم ورک بسیار کاربردی و محبوب و متن باز می باشد.
لطفا یک تالار یا یک اتقاق برای این قسمت در نظر بگیرد متشکرم.
نکته ۲- در این مثال از فریم ورک spring و از apache service frame ورک برای ایجاد web service همچنین برای صدا کردن و استفاده از سرویس نوشته استفاده شده است. برای اطلاعات بیشتر به سایت http://cxf.apache.org
مراجعه کنید.
همانطور که در پست قبلی هم گفتم این هست که قصد داریم با تکنلوژیهای مختلف ارتباط برقرار کنیم و از سرویسهایی که اونا بهمون می دن استفاده کنیم. برای تولید و استفاده از این سرویس ها نیاز به استفاده از یک سری ابزار داریم که من در این مثال از cxf استفاده کردم.
خوب داستان کار خیلی سادست من یک interface دارم که این دروازه ای هست برای ورود و استفاده از سرویسهایی که می خوام به بیرون بدم. خیلی ساده یک پروزه web رو در نظر بگیرید. این پروژه مثل باقی پروژه های وبی جاوایی هست که یک servlet container مثل tomcat داره با این تغییر که ما یک ابزار به اون اضافه می کنیم که عملیات ساختن وباز کردن xml فایلها و در اختیار گذاشتن این اطلاعات که بصورت string هست رو محیا می کنه.
تولید interface
package com.babak.business;
import javax.jws.WebService;
/**
* Created by IntelliJ IDEA.
* User: Babak
* Date: 3/10/11
* Time: 1:20 PM
* To change this template use File | Settings | File Templates.
*/
@WebService
public interface CalculatorBiz {
public double add(double a, double b);
public double subtraction(double a, double b);
}
نکته: interface ما یک interface استاندارد جاویی هست به اضافه یک metadata یا همان annotation که این annotation استاندارد هست. یعنی اینکه مربوط به کتابخانه جاوا هست. با این توضیح که وقتی از این annotation داریم استفاده می کنیم باید مطمعن باشیم که ابزار یا فریم ورکی که داره برامون web service ایجاد می کنه این annotation رو پیاده سازی کرده باشه. خوشبختانه cxf این کار رو کرده پس ما هم استفاده می کنیم. اگر از فریم ورک دیگری استفاده می کنید برای ایجاد webservice مطمئن باشید که این annotation رو پیاده سازی کرده در غیر این صورت خودتون رو سرکار گذاشتین.
این annotation داره می گه که بابا این یک واسطی هست بین server و client ها که شامل دو متدود هم هست یکی برای جمع و دیگری برای تفریق.
حالا نوبت اینه که این متدود ها پیاده سازی شوند
package com.babak.business;
import javax.jws.WebMethod;
import javax.jws.WebService;
/**
* Created by IntelliJ IDEA.
* User: Babak
* Date: 3/10/11
* Time: 1:23 PM
* To change this template use File | Settings | File Templates.
*/
@WebService(endpointInterface = "com.babak.business.CalculatorBiz")
public class CalculatorBizImpl implements CalculatorBiz {
@WebMethod(operationName = "add")
public double add(double a, double b) {
return a + b;
}
@WebMethod(operationName = "subtraction")
public double subtraction(double a, double b) {
return a - b;
}
}
کلاس فوق interface ما رو پیاده سازی کرده با این تفاسیر که اولش معرفی کرده که این کلاس دروازه و کلا نقطه نهایی که واسط هست بین client ها و خودش کدوم هست. همان interfaceی که اول داشتیم.
نکته: WebMethod@ اختیاری هست. تمام متدود های public بصورت default همگی webmethod حساب می شوند.
چرا پس نوشتم. دوست داشتم.
خوب کار تمام شد. حالا باید بریم اون فریم ورک wev service را بی اندازمون رو config و آتیش کنیم.
کجا این کار رو می کنیم. توی web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring-context-config.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListe ner
</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
</web-app>
در قسمت context اومدیم به این tomcat گفتیم ببن دایی ما یک xml فایلی داریم در قسمت web-inf به نام spring-context-config که توی اون فایل یک سری داستان داره که فقط حواست باشه که توی context خودت نگرش داری. بدرد می خوره.
در مورد این فایل بعدا صحبت می کنم. این فایل مربوط می شه به spring که جلوتر می گیم چی کار می کنه.
نکته : CXFServlet مربوط می شه به فریم ورک cxf که از اون موقع بالا اومدن tomcat یک instance می گیره.
در قسمت mapping که داره می گه تمام سرویس های من تو شاخه webservice هستند.
حال بریم سراغ داستان spring-context-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<bean id="calculatorBizImpl" class="com.babak.business.CalculatorBizImpl"/>
<jaxws:endpoint id="calculate" implementor="#calculatorBizImpl" address="/cal"/>
</beans>
حال این چی می گه و چی کار می کنه بر می گرده به spring که به امید خدا مدیران زحمت کشِ، زخمت قسمت spring رو در آینده می کشن و بیشتر توضیح می دیم.
ولی در کل در دوخط پایین ما اومدیم گفتیم که از کلاس CalculatorBizImpl با نام calculatorBizImpl یک instnace بگیر
در قسمت پایین هم که مربوط می شه به cxf و spring باهم گفتیم که بابا این سرویس با نام cal شناخته می شه که کلاسی که اینو implement کرده تو خط بالا ازش instance گرفتیم و اسمشم که بهش دادیم.
تمام شد. حالا ما مثل قبل برنامه web رو deploy میکینم تو tomcat تو حالشو می بریم.
وقتی برنامه شما خیلی خوب و تمیز بیاد بالا باید همون اولش وقتی داره tomcat خودشو setUp می کنه این پیغام رو ببینید
INFO: Creating Service {http://business.babak.com/}CalculatorBizImplService from class com.babak.business.CalculatorBiz
Mar 10, 2011 2:04:19 PM org.apache.cxf.endpoint.ServerImpl initDestination
INFO: Setting the server's publish address to be /cal
خوب حالا وقتشه که بریم ببینم چه جوری این سرویس رو صدا کنیم.
نکته: برای صدا کردن راههای مختلفی وجود داره اما همین cxf که امکان درست کردن web service رو میده می تونه امکان صدا کردن web service روهم بده.
نکته شما می تونید بصورت تک هم در پروزه تون استفاده کنید. مثلا فقط برای ساختن یا فقط برای صدا زدن یا هر دو
اگر browser رو باز کنید و او بالا آدرس مستقیم رو بدین یعنی مستقیم web service رو از طریق address bar ی که browser تون داره صدا کنید
http://localhost:8080/myweb/webservice/cal?wsdl
شاهد همچین چیز ناراحتی می شید. همون xml فایل است که در پست قبلی بهش اشاره کردم
<wsdl:definitions name="CalculatorBizImplService" targetNamespace="http://business.babak.com/">
−
<wsdl:types>
−
<xs:schema elementFormDefault="unqualified" targetNamespace="http://business.babak.com/" version="1.0">
<xs:element name="add" type="tns:add"/>
<xs:element name="addResponse" type="tns:addResponse"/>
<xs:element name="subtraction" type="tns:subtraction"/>
<xs:element name="subtractionResponse" type="tns:subtractionResponse"/>
−
<xs:complexType name="subtraction">
−
<xs:sequence>
<xs:element name="arg0" type="xs:double"/>
<xs:element name="arg1" type="xs:double"/>
</xs:sequence>
</xs:complexType>
−
<xs:complexType name="subtractionResponse">
−
<xs:sequence>
<xs:element name="return" type="xs:double"/>
</xs:sequence>
</xs:complexType>
−
<xs:complexType name="add">
−
<xs:sequence>
<xs:element name="arg0" type="xs:double"/>
<xs:element name="arg1" type="xs:double"/>
</xs:sequence>
</xs:complexType>
−
<xs:complexType name="addResponse">
−
<xs:sequence>
<xs:element name="return" type="xs:double"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
−
<wsdl:message name="subtractionResponse">
<wsdl:part element="tns:subtractionResponse" name="parameters">
</wsdl:part>
</wsdl:message>
−
<wsdl:message name="subtraction">
<wsdl:part element="tns:subtraction" name="parameters">
</wsdl:part>
</wsdl:message>
−
<wsdl:message name="add">
<wsdl:part element="tns:add" name="parameters">
</wsdl:part>
</wsdl:message>
−
<wsdl:message name="addResponse">
<wsdl:part element="tns:addResponse" name="parameters">
</wsdl:part>
</wsdl:message>
−
<wsdl:portType name="CalculatorBiz">
−
<wsdl:operation name="subtraction">
<wsdl:input message="tns:subtraction" name="subtraction">
</wsdl:input>
<wsdl:output message="tns:subtractionResponse" name="subtractionResponse">
</wsdl:output>
</wsdl:operation>
−
<wsdl:operation name="add">
<wsdl:input message="tns:add" name="add">
</wsdl:input>
<wsdl:output message="tns:addResponse" name="addResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
−
<wsdl:binding name="CalculatorBizImplServiceSoapBinding" type="tns:CalculatorBiz">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
−
<wsdl:operation name="subtraction">
<soap:operation soapAction="" style="document"/>
−
<wsdl:input name="subtraction">
<soap:body use="literal"/>
</wsdl:input>
−
<wsdl:output name="subtractionResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
−
<wsdl:operation name="add">
<soap:operation soapAction="" style="document"/>
−
<wsdl:input name="add">
<soap:body use="literal"/>
</wsdl:input>
−
<wsdl:output name="addResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
−
<wsdl:service name="CalculatorBizImplService">
−
<wsdl:port binding="tns:CalculatorBizImplServiceSoapBinding" name="CalculatorBizImplPort">
<soap:address location="http://localhost:8080/myweb/webservice/cal"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
این یعنی اینکه داره کار می کنه.
حالا می ریم سراغ قسمت client. این client می تونه servlet باشه می تونه asp باشه می تونه php باشه حتی یک کلاس فایل ساده توی کامپیوتر خونتون باشه.
به این کد توجه کنید
client side
package com;
import com.babak.business.CalculatorBiz;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import javax.naming.NamingException;
/**
* Created by IntelliJ IDEA.
* User: Babak
* Date: 3/10/11
* Time: 2:53 PM
* To change this template use File | Settings | File Templates.
*/
public class Main {
public static void main(String[] s) throws NamingException {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(com.babak.business.Calcula torBiz.class);
factory.setAddress("http://localhost:8080/myweb/webservice/cal");
CalculatorBiz biz = (CalculatorBiz) factory.create();
double addResult = biz.add(10, 10);
System.out.println("addResult = " + addResult);
double subtractionResult = biz.subtraction(20,10);
System.out.println(subtractionResult);
}
}
نکته : interface باید سمت client باشه.
نکته : برای اینکه تمام library فایلها رو داشته باشین و به project تون add کنید کافی هست که به این سایت برید و download کیند
http://www.apache.org/dyn/closer.cgi?path=/cxf/2.3.3/apache-cxf-2.3.3.zip
تمام شد.
jmajid
پنج شنبه 19 اسفند 1389, 18:40 عصر
فایل های Lib رو پیدا کردم ولی باز هم این پیغام رو میده
javax.xml.ws.WebServiceException: Could not find wsdl:binding operation info for web method verifyTransaction.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWs ClientProxy.java:113)
at $Proxy17.verifyTransaction(Unknown Source)
javaphantom
جمعه 20 اسفند 1389, 17:05 عصر
فایل های Lib رو پیدا کردم ولی باز هم این پیغام رو میده
javax.xml.ws.WebServiceException: Could not find wsdl:binding operation info for web method verifyTransaction.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWs ClientProxy.java:113)
at $Proxy17.verifyTransaction(Unknown Source)
من با اضافه کردن javaee.jar، client.jar به اضافه همون آدرس دانلود cxf که بهت دادم با jar فایلهای اون به classpath پروژه ام و نوشتن این کد برنامه کار کرد.
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import refpayclient.ReferencePayment;
import javax.naming.NamingException;
/**
* Created by IntelliJ IDEA.
* User: Babak
* Date: 3/10/11
* Time: 2:53 PM
* To change this template use File | Settings | File Templates.
*/
public class Main {
public static void main(String[] s) throws NamingException {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(ReferencePayment.class);
factory.setAddress("https://modern.enbank.net/ref-payment/ws/ReferencePayment");
ReferencePayment biz = (ReferencePayment) factory.create();
System.out.println("biz = " + biz);
}
}
jmajid
یک شنبه 22 اسفند 1389, 20:57 عصر
این کد امروز صبح کار میکرد
ولی الان کار نمیکنه !!!!
ServiceFactory serviceFactory = ServiceFactory.newInstance();
URL WsdlUrl = new URL("https://modern.enbank.net/ref-payment/ws/ReferencePayment?WSDL");
Service helloService = serviceFactory.createService(WsdlUrl, new QName("urn:Foo", "ReferencePayment"));
System.out.println(helloService.hashCode());
PaymentIF pif = (PaymentIF) helloService.getPort(new QName("urn:Foo", "PaymentIFPort"), refpayclient.PaymentIF.class);
System.out.println(pif.hashCode());
double addResult = pif.verifyTransaction("kpuZaF4Oqx/brvqD8+2T", "00109807-129085");
System.out.println(addResult);
این هم پیغام خطاش ار خط
Service helloService = serviceFactory.createService(WsdlUrl, new QName("urn:Foo", "ReferencePayment"));
javax.xml.rpc.ServiceException: modeler error: failed to parse document at "https://modern.enbank.net/ref-payment/ws/ReferencePayment?WSDL": javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderE xception: unable to find valid certification path to requested target
at com.sun.xml.rpc.client.dii.ConfiguredService.<init>(ConfiguredService.java:81)
at com.sun.xml.rpc.client.dii.ConfiguredService.<init>(ConfiguredService.java:65)
at com.sun.xml.rpc.client.ServiceFactoryImpl.createSe rvice(ServiceFactoryImpl.java:58)
)
L u k e
یک شنبه 22 اسفند 1389, 21:49 عصر
خیلی مفید بود
اگه می شه بزاریدش توی یه تاپیک دیگه تا بقیه دوستان هم استفاده کنند
javaphantom
دوشنبه 23 اسفند 1389, 08:55 صبح
این کد امروز صبح کار میکرد
ولی الان کار نمیکنه !!!!
ServiceFactory serviceFactory = ServiceFactory.newInstance();
URL WsdlUrl = new URL("https://modern.enbank.net/ref-payment/ws/ReferencePayment?WSDL");
Service helloService = serviceFactory.createService(WsdlUrl, new QName("urn:Foo", "ReferencePayment"));
System.out.println(helloService.hashCode());
PaymentIF pif = (PaymentIF) helloService.getPort(new QName("urn:Foo", "PaymentIFPort"), refpayclient.PaymentIF.class);
System.out.println(pif.hashCode());
double addResult = pif.verifyTransaction("kpuZaF4Oqx/brvqD8+2T", "00109807-129085");
System.out.println(addResult);
این هم پیغام خطاش ار خط
Service helloService = serviceFactory.createService(WsdlUrl, new QName("urn:Foo", "ReferencePayment"));
javax.xml.rpc.ServiceException: modeler error: failed to parse document at "https://modern.enbank.net/ref-payment/ws/ReferencePayment?WSDL": javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderE xception: unable to find valid certification path to requested target
at com.sun.xml.rpc.client.dii.ConfiguredService.<init>(ConfiguredService.java:81)
at com.sun.xml.rpc.client.dii.ConfiguredService.<init>(ConfiguredService.java:65)
at com.sun.xml.rpc.client.ServiceFactoryImpl.createSe rvice(ServiceFactoryImpl.java:58)
)
همانطور که قبلا بهت گفتم این کد درست هست و بدون مشکل کار می کنه
javaphantom
دوشنبه 23 اسفند 1389, 12:13 عصر
این کد امروز صبح کار میکرد
ولی الان کار نمیکنه !!!!
ServiceFactory serviceFactory = ServiceFactory.newInstance();
URL WsdlUrl = new URL("https://modern.enbank.net/ref-payment/ws/ReferencePayment?WSDL");
Service helloService = serviceFactory.createService(WsdlUrl, new QName("urn:Foo", "ReferencePayment"));
System.out.println(helloService.hashCode());
PaymentIF pif = (PaymentIF) helloService.getPort(new QName("urn:Foo", "PaymentIFPort"), refpayclient.PaymentIF.class);
System.out.println(pif.hashCode());
double addResult = pif.verifyTransaction("kpuZaF4Oqx/brvqD8+2T", "00109807-129085");
System.out.println(addResult);
این هم پیغام خطاش ار خط
Service helloService = serviceFactory.createService(WsdlUrl, new QName("urn:Foo", "ReferencePayment"));
javax.xml.rpc.ServiceException: modeler error: failed to parse document at "https://modern.enbank.net/ref-payment/ws/ReferencePayment?WSDL": javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderE xception: unable to find valid certification path to requested target
at com.sun.xml.rpc.client.dii.ConfiguredService.<init>(ConfiguredService.java:81)
at com.sun.xml.rpc.client.dii.ConfiguredService.<init>(ConfiguredService.java:65)
at com.sun.xml.rpc.client.ServiceFactoryImpl.createSe rvice(ServiceFactoryImpl.java:58)
)
http://blogs.sun.com/andreas/entry/no_more_unable_to_find
jmajid
شنبه 07 خرداد 1390, 22:06 عصر
با کد زیر باید یک فایل jssecacerts بسازید و در دیرکتوری جاواتون کپی کنید مثلا این آدرس توی لینوکس /usr/java/jdk1.6.0_06/jre/lib/security/
import java.io.*;
import java.security.*;
import java.security.cert.*;
import javax.net.ssl.*;
public class InstallCert {
public static void main(String[] args) throws Exception {
args = new String[]{"modern.enbank.net"};
String host;
int port;
char[] passphrase;
if ((args.length == 1) || (args.length == 2)) {
String[] c = args[0].split(":");
host = c[0];
port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
String p = (args.length == 1) ? "changeit" : args[1];
passphrase = p.toCharArray();
} else {
System.out.println("Usage: java InstallCert <host>[:port] [passphrase]");
return;
}
File file = new File("jssecacerts");
if (file.isFile() == false) {
char SEP = File.separatorChar;
File dir = new File(System.getProperty("java.home") + SEP + "lib" + SEP + "security");
file = new File(dir, "jssecacerts");
if (file.isFile() == false) {
file = new File(dir, "cacerts");
}
}
System.out.println("Loading KeyStore " + file + "...");
InputStream in = new FileInputStream(file);
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(in, passphrase);
in.close();
SSLContext context = SSLContext.getInstance("TLS");
TrustManagerFactory tmf =
TrustManagerFactory.getInstance(TrustManagerFactor y.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
context.init(null, new TrustManager[]{tm}, null);
SSLSocketFactory factory = context.getSocketFactory();
System.out.println("Opening connection to " + host + ":" + port + "...");
SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
socket.setSoTimeout(10000);
try {
System.out.println("Starting SSL handshake...");
socket.startHandshake();
socket.close();
System.out.println();
System.out.println("No errors, certificate is already trusted");
} catch (SSLException e) {
System.out.println();
e.printStackTrace(System.out);
}
X509Certificate[] chain = tm.chain;
if (chain == null) {
System.out.println("Could not obtain server certificate chain");
return;
}
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
System.out.println();
System.out.println("Server sent " + chain.length + " certificate(s):");
System.out.println();
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
MessageDigest md5 = MessageDigest.getInstance("MD5");
for (int i = 0; i < chain.length; i++) {
X509Certificate cert = chain[i];
System.out.println(" " + (i + 1) + " Subject " + cert.getSubjectDN());
System.out.println(" Issuer " + cert.getIssuerDN());
sha1.update(cert.getEncoded());
System.out.println(" sha1 " + toHexString(sha1.digest()));
md5.update(cert.getEncoded());
System.out.println(" md5 " + toHexString(md5.digest()));
System.out.println();
}
System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
String line = reader.readLine().trim();
int k;
try {
k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
} catch (NumberFormatException e) {
System.out.println("KeyStore not changed");
return;
}
X509Certificate cert = chain[k];
String alias = host + "-" + (k + 1);
ks.setCertificateEntry(alias, cert);
OutputStream out = new FileOutputStream("jssecacerts");
ks.store(out, passphrase);
out.close();
System.out.println();
System.out.println(cert);
System.out.println();
System.out.println("Added certificate to keystore 'jssecacerts' using alias '" + alias + "'");
}
private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();
private static String toHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 3);
for (int b : bytes) {
b &= 0xff;
sb.append(HEXDIGITS[b >> 4]);
sb.append(HEXDIGITS[b & 15]);
sb.append(' ');
}
return sb.toString();
}
private static class SavingTrustManager implements X509TrustManager {
private final X509TrustManager tm;
private X509Certificate[] chain;
SavingTrustManager(X509TrustManager tm) {
this.tm = tm;
}
public X509Certificate[] getAcceptedIssuers() {
throw new UnsupportedOperationException();
}
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
throw new UnsupportedOperationException();
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
this.chain = chain;
tm.checkServerTrusted(chain, authType);
}
}
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.