java实现在线支付_第1页
java实现在线支付_第2页
java实现在线支付_第3页
java实现在线支付_第4页
java实现在线支付_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java实现在线支付电子商务系统JAVA实现的基本流程如下: 客户在系统内下订单 -> 系统根据订单生成支付宝接口url -> 客户通过url使用支付宝(网上银行)付款 -> 支付宝将客户的付款完成信息发送给电子商务系统 -> 系统收到支付宝信息后确定客户订单已经付款 -> 进行发货等后续流程。在开始下面的内容之前,你要先有一个支付宝账户,如果要集成支付宝接口,你还必须申请开通服务(关于如何开通,可以直接到支付宝网站上申请).在服务开通后,支付宝会给你2个字符串编号:1个partnerId(合作伙伴ID),还有1个securityCode(安全码).当你拿到这2个

2、码的时候就可以开始下面的内容了.(1)如何调用支付宝接口?(将客户的订单信息按照既定的规则生成一个url跳转到支付宝网站) 通过下面方法makeOrderAlipayUrl(HttpServletRequest httpRequest,Order order)的调用得到支付宝的url,然后进行跳转(response.sendRedirect(url);).html view plaincopyprint?/*           * 根据订单生成支付宝接口URL. 

3、          * param httpRequest           * param order 订单实例           * return     

4、60;     * throws Exception           */           public static String makeOrderAlipayUrl(HttpServletRequest httpRequest,Order ord

5、er) throws Exception                 HashMap hm = new HashMap();                hm.put("_input_chars

6、et",httpRequest.getCharacterEncoding();/采用相同的编码方式                hm.put("body","您在上的订单");/填写在跳到支付宝页面上显示的付款内容信息              &

7、#160; hm.put("discount","-5");/填写折扣信息 -5表示抵扣5元                hm.put("logistics_fee","10");/物流费用            &#

8、160;   hm.put("logistics_payment","BUYER_PAY");/物流费用支付人 BUYER_PAY=买家支付物流费用                hm.put("logistics_type","EXPRESS");/物流方式     

9、           hm.put("notify_url","        hm.put("out_trade_no",order.getId();/外部交易号,最好具有唯一性,在获取支付宝发来的付款信息时使用.            

10、    hm.put("partner",partnerId);/partnerId(合作伙伴ID)                hm.put("agent",partnerId);/partnerId(合作伙伴ID)           

11、0;    hm.put("payment_type","1");/支付类型 1=商品购买,2=服务购买,.                hm.put("price","105.30");/订单金额信息         

12、;       hm.put("quantity","1");/订单商品数量,一般都是写1,它是按照整个订单包来计算                hm.put("return_url","        hm.put(

13、"seller_email","alipay");/你的支付宝账户email                hm.put("service","create_direct_pay_by_user");/create_direct_pay_by_user=直接付款,trade_create_by_buyer 担保付款   

14、;              hm.put("subject","的订单");/填写在跳到支付宝页面上显示的付款标题信息                String payGateway = "  &

15、#160;     return makeUrl(hm,securityCode,httpRequest.getCharacterEncoding(),payGateway);/securityCode(安全码)                         /*  

16、         * 根据传入的参数生成alipay的支付URL           * param hm 参数值           * param securityCode 安全码   

17、        * param charset 编码           * param payGateway 支付宝gateway           * return     

18、      */           public static String makeUrl(HashMap hm,String securityCode,String charset,String payGateway) throws Exception       

19、;         List keys = new ArrayList(hm.keySet();                Collections.sort(keys);/支付宝要求参数必须按字母排序         

20、;       StringBuffer content = new StringBuffer();                for (int i = 0; i < keys.size(); i+)   &#

21、160;                 content.append(String) keys.get(i);                    content.append("=");

22、0;                   content.append(String) hm.get(String) keys.get(i);                    if&#

23、160;(i != keys.size() - 1)                         content.append("&");           

24、0;                                        content.append(securityCode);     

25、;           String sign = md5(content.toString(),charset);                content.delete(0,content.length();       

26、         content.append(payGateway);                for (int i = 0; i < keys.size(); i+)       &#

27、160;             content.append(keys.get(i);                    content.append("=");       

28、;             content.append(URLEncoder.encode(String) hm.get(keys.get(i), charset);                    content.append("

29、&");                                content.append("&sign_type=MD5");        

30、        keys.clear();                keys = null;                return content.toStr

31、ing();                        /*           * 生成md5编码字符串.          

32、0;* param str 源字符串           * param charset 编码方式           * return           *   &#

33、160;       */           public static String md5(String str,String charset)                 if 

34、(str = null)                    return null;                char hexDigits =  '0&

35、#39;, '1', '2', '3', '4', '5', '6', '7', '8', '9',                      &

36、#160; 'a', 'b', 'c', 'd', 'e', 'f'                 MessageDigest md5MessageDigest = null;     

37、60;          byte md5Bytes = null;                char md5Chars = null;           

38、60;    byte strBytes = null;                try                     strBytes

39、0;= str.getBytes(charset);                    md5MessageDigest = MessageDigest.getInstance("MD5");             

40、;       md5MessageDigest.update(strBytes);                    md5Bytes = md5MessageDigest.digest();         &#

41、160;          int j = md5Bytes.length;                    md5Chars = new charj * 2;    

42、60;               int k = 0;                    for (int i = 0; i < j;&#

43、160;i+)                         byte md5Byte = md5Bytes;                 &#

44、160;      md5Charsk+ = hexDigitsmd5Byte >>> 4 & 0xf;                        md5Charsk+ = hexDigit

45、smd5Byte & 0xf;                                        return new String(md5

46、Chars);                 catch (NoSuchAlgorithmException e)                     /Log.output(e.toStrin

47、g(), Log.STD_ERR);                    return null;                 catch (UnsupportedEncodingExcepti

48、on e)                     /Log.output(e.toString(), Log.STD_ERR);                    

49、return null;                 finally                     md5MessageDigest = null;  &#

50、160;                 strBytes = null;                    md5Bytes = null;   

51、0;                            /* * 根据订单生成支付宝接口URL. * param httpRequest * param order 订单实例 * return * throws Exception */ public static String makeOrderAlipayUrl

52、(HttpServletRequest httpRequest,Order order) throws Exception HashMap hm = new HashMap(); hm.put("_input_charset",httpRequest.getCharacterEncoding();/采用相同的编码方式 hm.put("body","您在上的订单");/填写在跳到支付宝页面上显示的付款内容信息 hm.put("discount","-5");/填写折扣信息 -5表示抵扣5元 hm.

53、put("logistics_fee","10");/物流费用 hm.put("logistics_payment","BUYER_PAY");/物流费用支付人 BUYER_PAY=买家支付物流费用 hm.put("logistics_type","EXPRESS");/物流方式 hm.put("notify_url"," hm.put("out_trade_no",order.getId();/外部交易号,最好具有唯一性,在

54、获取支付宝发来的付款信息时使用. hm.put("partner",partnerId);/partnerId(合作伙伴ID) hm.put("agent",partnerId);/partnerId(合作伙伴ID) hm.put("payment_type","1");/支付类型 1=商品购买,2=服务购买,. hm.put("price","105.30");/订单金额信息 hm.put("quantity","1");/订单商品数

55、量,一般都是写1,它是按照整个订单包来计算 hm.put("return_url"," hm.put("seller_email","alipay");/你的支付宝账户email hm.put("service","create_direct_pay_by_user");/create_direct_pay_by_user=直接付款,trade_create_by_buyer 担保付款 hm.put("subject","的订单");/填写在跳到

56、支付宝页面上显示的付款标题信息 String payGateway = " return makeUrl(hm,securityCode,httpRequest.getCharacterEncoding(),payGateway);/securityCode(安全码) /* * 根据传入的参数生成alipay的支付URL * param hm 参数值 * param securityCode 安全码 * param charset 编码 * param payGateway 支付宝gateway * return */ public static String makeUrl(Has

57、hMap hm,String securityCode,String charset,String payGateway) throws Exception List keys = new ArrayList(hm.keySet(); Collections.sort(keys);/支付宝要求参数必须按字母排序 StringBuffer content = new StringBuffer(); for (int i = 0; i < keys.size(); i+) content.append(String) keys.get(i); content.append("=&q

58、uot;); content.append(String) hm.get(String) keys.get(i); if (i != keys.size() - 1) content.append("&"); content.append(securityCode); String sign = md5(content.toString(),charset); content.delete(0,content.length(); content.append(payGateway); for (int i = 0; i < keys.size(); i+) c

59、ontent.append(keys.get(i); content.append("="); content.append(URLEncoder.encode(String) hm.get(keys.get(i), charset); content.append("&"); content.append("&sign_type=MD5"); keys.clear(); keys = null; return content.toString(); /* * 生成md5编码字符串. * param str 源字符串

60、* param charset 编码方式 * return * */ public static String md5(String str,String charset) if (str = null) return null; char hexDigits = '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c'

61、, 'd', 'e', 'f' ; MessageDigest md5MessageDigest = null; byte md5Bytes = null; char md5Chars = null; byte strBytes = null; try strBytes = str.getBytes(charset); md5MessageDigest = MessageDigest.getInstance("MD5"); md5MessageDigest.update(strBytes); md5Bytes = md5Mes

62、sageDigest.digest(); int j = md5Bytes.length; md5Chars = new charj * 2; int k = 0; for (int i = 0; i < j; i+) byte md5Byte = md5Bytes; md5Charsk+ = hexDigitsmd5Byte >>> 4 & 0xf; md5Charsk+ = hexDigitsmd5Byte & 0xf; return new String(md5Chars); catch (NoSuchAlgorithmException e) /

63、Log.output(e.toString(), Log.STD_ERR); return null; catch (UnsupportedEncodingException e) /Log.output(e.toString(), Log.STD_ERR); return null; finally md5MessageDigest = null; strBytes = null; md5Bytes = null; 当客户通过接口url付款后,支付宝会自动的去调用前面提供的notify_url参数中的url. (2)支付宝将付款信息返回给系统 当客户付款后,支付宝就会自动调用上面表单提供的n

64、otify_url,下面是一个notifyurl.jsp的一个例子:html view plaincopyprint?<% page contentType="text/html;charset=UTF-8"%><% page import="com.soft4j.AlipayMgr"%><%            String ret =

65、0;AlipayMgr.insert(request);            if(ret=null)                out.print("success");/成功接收支付宝发来的付款信息       

66、0;    else                out.print("fail");/出错                    %>  <%

67、page contentType="text/html;charset=UTF-8"%><% page import="com.soft4j.AlipayMgr"%><% String ret = AlipayMgr.insert(request); if(ret=null) out.print("success");/成功接收支付宝发来的付款信息 else out.print("fail");/出错 %>如果确认收到支付宝发来的客户付款信息,则返回"success"

68、;,这样子支付宝就知道系统已经收到信息了;否则返回"fail",这样支付宝会过一段时间后再次发来。其实,只有当支付宝收到"success"的返回信息后才会停止发送付款信息,否则会自动的每隔一段时间就调用上面 的notify_url通信接口。 (3)系统处理支付宝发来的付款信息 java view plaincopyprint?/*      * Created on 2005-6-12      *

69、0;Author stephen      * Email zhoujianqiang AT gmail DOT com      * CopyRight(C)2005-2008 , All rights reserved.      */     

70、  package com.soft4j;        import java.sql.Connection;        import java.sql.SQLException;        import java.util.Enumeration;   &#

71、160;    import java.util.Vector;        import javax.servlet.http.HttpServletRequest;        /*      * 支付宝付款通知接口.      * 

72、;      * author stephen      * version 1.0.0      */       public final class NotifyUrlMgr        &#

73、160;    public static String insert(HttpServletRequest httpRequest)                 /定义变量和进行必要的初始化工作            

74、60;   Enumeration parameterNames = null;                String parameterName = null;               &

75、#160;String parameterValue = null;                int count = 0;                Vector params = 

76、;null;                Vector vParameterName = new Vector();                Vector vParameterValue = new&#

77、160;Vector();                try                     String orderId = httpRequest.getParameter("

78、;out_trade_no");/订单号                    if(orderId=null|"".equals(orderId) orderId="-1"              

79、;      parameterNames = httpRequest.getParameterNames();                    boolean isPrint = false;       

80、60;            while (parameterNames.hasMoreElements() /循环收取支付宝发来的所有参数信息                        parameterName&

81、#160;= (String) parameterNames.nextElement();                        parameterValue = httpRequest.getParameter(parameterName);     

82、0;                  if(parameterValue=null) parameterValue=""                       &#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论