【JAVA WEB】j2ee集成支付宝及时到账

支付请求

index.jsp(需要提供的部分参数)

  1. <form name=alipayment action=alipayapi.jsp method=post target="_blank"> <!--将表单里的数据提交到了alipay.jsp(只列出了必填) -->  
  2.             <div id="body" style="clear: left">  
  3.                 <dl class="content">  
  4.                     <dt>卖家支付宝帐户:</dt>  
  5.                     <dd>  
  6.                         <span class="null-star">*</span> <input size="30"  
  7.                             name="WIDseller_email" /> <span>必填 </span>  
  8.                     </dd>  
  9.                     <dt>商户订单号:</dt>  
  10.                     <dd>  
  11.                         <span class="null-star">*</span> <input size="30"  
  12.                             name="WIDout_trade_no" /> <span>商户网站订单系统中唯一订单号,必填 </span>  
  13.                     </dd>  
  14.                     <dt>订单名称:</dt>  
  15.                     <dd>  
  16.                         <span class="null-star">*</span> <input size="30"  
  17.                             name="WIDsubject" /> <span>必填 </span>  
  18.                     </dd>  
  19.                     <dt>付款金额:</dt>  
  20.                     <dd>  
  21.                         <span class="null-star">*</span> <input size="30"  
  22.                             name="WIDtotal_fee" /> <span>必填 </span>  
  23.                     </dd>  
  24.                     <dd>  
  25.                         <span class="new-btn-login-sp">  
  26.                             <button class="new-btn-login" type="submit"  
  27.                                 style="text-align: center;">确 认</button>  
  28.                         </span>  
  29.                     </dd>  
  30.                 </dl>  
  31.             </div>  
  32.         </form>  



alipay.jsp(一些不变的数据)
[javascript] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <%  
  2.         //支付类型  
  3.         String payment_type = "1";  
  4.         //必填,不能修改  
  5.         //服务器异步通知页面路径  
  6.         String notify_url = "http://127.0.0.1:8080/create_direct_pay_by_user-JAVA-UTF-8/notify_url.jsp";  
  7.         //需http://格式的完整路径,不能加?id=123这类自定义参数  
  8.         //页面跳转同步通知页面路径  
  9.         String return_url = "http://127.0.0.1:8080/create_direct_pay_by_user-JAVA-UTF-8/return_url.jsp";  
  10.         //需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/  
  11.         //卖家支付宝帐户(这里也可以用seller_email,把seller_id换成<span style="font-family: Arial, Helvetica, sans-serif;">seller_email就行了,当然下面sParaTemp.put也要换</span>)  
  12.         String seller_id = new String(request.getParameter("WIDseller_email").getBytes("ISO-8859-1"),"UTF-8");  
  13.         //必填  
  14.         //商户订单号  
  15.         String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");  
  16.         //商户网站订单系统中唯一订单号,必填  
  17.         //订单名称  
  18.         String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");  
  19.         //必填  
  20.         //付款金额  
  21.         String total_fee = new String(request.getParameter("WIDtotal_fee").getBytes("ISO-8859-1"),"UTF-8");  
  22.         //必填  
  23.           
  24.           
  25.         //把请求参数打包成数组  
  26.         Map<String, String> sParaTemp = new HashMap<String, String>();  
  27.         sParaTemp.put("service""create_direct_pay_by_user");<span style="font-family: Arial, Helvetica, sans-serif;"> </span>  
  28.                 sParaTemp.put("partner", AlipayConfig.partner);  
  29.                 sParaTemp.put("_input_charset", AlipayConfig.input_charset);  
  30.         sParaTemp.put("payment_type", payment_type);  
  31.         sParaTemp.put("notify_url", notify_url);  
  32.         sParaTemp.put("return_url", return_url);  
  33.         sParaTemp.put("seller_id", seller_id);  
  34.         sParaTemp.put("out_trade_no", out_trade_no);  
  35.         sParaTemp.put("subject", subject);  
  36.         sParaTemp.put("total_fee", total_fee);  
  37.         sParaTemp.put("body", body);  
  38.         sParaTemp.put("show_url", show_url);  
  39.         sParaTemp.put("anti_phishing_key", anti_phishing_key);  
  40.         sParaTemp.put("exter_invoke_ip", exter_invoke_ip);  
  41.           
  42.         //建立请求  
  43.         String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","确认");//这里将上面的数据通过buildRequest生成了Html代码  
  44.         out.println(sHtmlText);  
  45.     %>  

alipayConfig.java(基础配置类)
  1. public class AlipayConfig {  
  2.     // 合作身份者ID,以2088开头由16位纯数字组成的字符串  
  3.     public static String partner = "20xxxxxxxxx3";  
  4.     // 商户的私钥  
  5.     public static String key = "7rd4xxxxxxxxxxxxxxxxxpb";  
  6.     // 调试用,创建TXT日志文件夹路径  
  7.     public static String log_path = "/home/zemo/alipay/";  
  8.     // 字符编码格式 目前支持 gbk 或 utf-8  
  9.     public static String input_charset = "utf-8";  
  10.     // 签名方式 不需修改  
  11.     public static String sign_type = "MD5";  
  12. }  
以上三部分基本就可以完成支付了,当然还有一些辅助加密之类的方法,不用去懂只需要会调用就行了

回调与跳转:

notify_url.jsp(异步请求页面)

[javascript] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <%  
  2.     //获取支付宝POST过来反馈信息  
  3.     Map<String,String> params = new HashMap<String,String>();  
  4.     Map requestParams = request.getParameterMap();  
  5.     for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {  
  6.         String name = (String) iter.next();  
  7.         String[] values = (String[]) requestParams.get(name);  
  8.         String valueStr = "";  
  9.         for (int i = 0; i < values.length; i++) {  
  10.             valueStr = (i == values.length - 1) ? valueStr + values[i]  
  11.                     : valueStr + values[i] + ",";  
  12.         }  
  13.         //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化  
  14.         //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");  
  15.         params.put(name, valueStr);  
  16.     }     
  17.     //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//  
  18.     //商户订单号  
  19.     String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");  
  20.     //支付宝交易号  
  21.     String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");  
  22.     //交易状态  
  23.     String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");  
  24.     //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//  
  25.     if(AlipayNotify.verify(params)){//验证成功  
  26.   
  27.         if(trade_status.equals("TRADE_FINISHED")){  
  28.                 /*逻辑代码*/  
  29.         } else if (trade_status.equals("TRADE_SUCCESS")){  
  30.                   
  31.                     /*逻辑代码*/  
  32.         }  
  33.         out.println("success"); //在页面上输出success,注意页面上只能有success异步通知是通过这个判断的,只有监测到success才停止发送请求  
  34.     }else{//验证失败  
  35.         out.println("fail");  
  36.     }  
  37. %>  

return_url.jsp(同步通知页面)
其实这个也可以写在后台验证,只要按照下面的代码一样把参数获取过来,然后验证跳转到你想要的页面就行了
[javascript] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <%  
  2.     //获取支付宝GET过来反馈信息  
  3.     Map<String,String> params = new HashMap<String,String>();  
  4.     Map requestParams = request.getParameterMap();  
  5.     for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {  
  6.         String name = (String) iter.next();  
  7.         String[] values = (String[]) requestParams.get(name);  
  8.         String valueStr = "";  
  9.         for (int i = 0; i < values.length; i++) {  
  10.             valueStr = (i == values.length - 1) ? valueStr + values[i]  
  11.                     : valueStr + values[i] + ",";  
  12.         }  
  13.         //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化  
  14.         valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");  
  15.         params.put(name, valueStr);  
  16.     }  
  17.       
  18.     //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//  
  19.     //商户订单号  
  20.     String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");  
  21.     //支付宝交易号  
  22.     String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");  
  23.     //交易状态  
  24.     String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");  
  25.     //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//     
  26.     //计算得出通知验证结果  
  27.     boolean verify_result = AlipayNotify.verify(params);      
  28.     if(verify_result){//验证成功  
  29.         if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){  
  30.   
  31.         }  
  32.         out.println("验证成功<br />");  
  33.   
  34.     }else{  
  35.   
  36.         out.println("验证失败");  
  37.     }  
  38. %>  

至此,一次完整的支付宝即时到账交易就完成了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值