j2ee集成支付宝即时到账(Demo解析)
2014-02-13 23:00
363 查看
今天困扰我许久的支付宝即时到账终于再项目中调试通了。
赶快记录一下...
先分析一下支付宝官方给的demo
网上也有一些教程是自己写的,我觉得有些麻烦,我大部分都直接用的官方给的demo里的文件.
alipay.jsp(一些不变的数据)
alipayConfig.java(基础配置类)
<%
//获取支付宝POST过来反馈信息
Map<String,String> params = new HashMap<String,String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
params.put(name, valueStr);
}
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
//商户订单号
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//支付宝交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//交易状态
String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
if(AlipayNotify.verify(params)){//验证成功
if(trade_status.equals("TRADE_FINISHED")){
/*逻辑代码*/
} else if (trade_status.equals("TRADE_SUCCESS")){
/*逻辑代码*/
}
out.println("success"); //在页面上输出success,注意页面上只能有success异步通知是通过这个判断的,只有监测到success才停止发送请求
}else{//验证失败
out.println("fail");
}
%>
return_url.jsp(同步通知页面)
其实这个也可以写在后台验证,只要按照下面的代码一样把参数获取过来,然后验证跳转到你想要的页面就行了
<%
//获取支付宝GET过来反馈信息
Map<String,String> params = new HashMap<String,String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
//商户订单号
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//支付宝交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//交易状态
String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
//计算得出通知验证结果
boolean verify_result = AlipayNotify.verify(params);
if(verify_result){//验证成功
if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){
}
out.println("验证成功<br />");
}else{
out.println("验证失败");
}
%>
至此,一次完整的支付宝即时到账交易就完成了
下一篇博客会介绍如何用j2ee在spring mvc项目中完成
Zemo手打,转载请标明出处:http://blog.csdn.net/zemochen/article/details/19175733
支付宝即时到账demo下载:http://download.alipay.com/public/api/base/alipaydirect.zip
赶快记录一下...
先分析一下支付宝官方给的demo
网上也有一些教程是自己写的,我觉得有些麻烦,我大部分都直接用的官方给的demo里的文件.
支付请求
index.jsp(需要提供的部分参数)<form name=alipayment action=alipayapi.jsp method=post target="_blank"> <!--将表单里的数据提交到了alipay.jsp(只列出了必填) --> <div id="body" style="clear: left"> <dl class="content"> <dt>卖家支付宝帐户:</dt> <dd> <span class="null-star">*</span> <input size="30" name="WIDseller_email" /> <span>必填 </span> </dd> <dt>商户订单号:</dt> <dd> <span class="null-star">*</span> <input size="30" name="WIDout_trade_no" /> <span>商户网站订单系统中唯一订单号,必填 </span> </dd> <dt>订单名称:</dt> <dd> <span class="null-star">*</span> <input size="30" name="WIDsubject" /> <span>必填 </span> </dd> <dt>付款金额:</dt> <dd> <span class="null-star">*</span> <input size="30" name="WIDtotal_fee" /> <span>必填 </span> </dd> <dd> <span class="new-btn-login-sp"> <button class="new-btn-login" type="submit" style="text-align: center;">确 认</button> </span> </dd> </dl> </div> </form>
alipay.jsp(一些不变的数据)
<% //支付类型 String payment_type = "1"; //必填,不能修改 //服务器异步通知页面路径 String notify_url = "http://127.0.0.1:8080/create_direct_pay_by_user-JAVA-UTF-8/notify_url.jsp"; //需http://格式的完整路径,不能加?id=123这类自定义参数 //页面跳转同步通知页面路径 String return_url = "http://127.0.0.1:8080/create_direct_pay_by_user-JAVA-UTF-8/return_url.jsp"; //需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/ //卖家支付宝帐户(这里也可以用seller_email,把seller_id换成seller_email就行了,当然下面sParaTemp.put也要换) String seller_id = new String(request.getParameter("WIDseller_email").getBytes("ISO-8859-1"),"UTF-8"); //必填 //商户订单号 String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8"); //商户网站订单系统中唯一订单号,必填 //订单名称 String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8"); //必填 //付款金额 String total_fee = new String(request.getParameter("WIDtotal_fee").getBytes("ISO-8859-1"),"UTF-8"); //必填 //把请求参数打包成数组 Map<String, String> sParaTemp = new HashMap<String, String>(); sParaTemp.put("service", "create_direct_pay_by_user"); sParaTemp.put("partner", AlipayConfig.partner); sParaTemp.put("_input_charset", AlipayConfig.input_charset); sParaTemp.put("payment_type", payment_type); sParaTemp.put("notify_url", notify_url); sParaTemp.put("return_url", return_url); sParaTemp.put("seller_id", seller_id); sParaTemp.put("out_trade_no", out_trade_no); sParaTemp.put("subject", subject); sParaTemp.put("total_fee", total_fee); sParaTemp.put("body", body); sParaTemp.put("show_url", show_url); sParaTemp.put("anti_phishing_key", anti_phishing_key); sParaTemp.put("exter_invoke_ip", exter_invoke_ip); //建立请求 String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","确认");//这里将上面的数据通过buildRequest生成了Html代码 out.println(sHtmlText); %>
alipayConfig.java(基础配置类)
public class AlipayConfig { // 合作身份者ID,以2088开头由16位纯数字组成的字符串 public static String partner = "20xxxxxxxxx3"; // 商户的私钥 public static String key = "7rd4xxxxxxxxxxxxxxxxxpb"; // 调试用,创建TXT日志文件夹路径 public static String log_path = "/home/zemo/alipay/"; // 字符编码格式 目前支持 gbk 或 utf-8 public static String input_charset = "utf-8"; // 签名方式 不需修改 public static String sign_type = "MD5"; }以上三部分基本就可以完成支付了,当然还有一些辅助加密之类的方法,不用去懂只需要会调用就行了
回调与跳转:
notify_url.jsp(异步请求页面)<%
//获取支付宝POST过来反馈信息
Map<String,String> params = new HashMap<String,String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
params.put(name, valueStr);
}
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
//商户订单号
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//支付宝交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//交易状态
String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
if(AlipayNotify.verify(params)){//验证成功
if(trade_status.equals("TRADE_FINISHED")){
/*逻辑代码*/
} else if (trade_status.equals("TRADE_SUCCESS")){
/*逻辑代码*/
}
out.println("success"); //在页面上输出success,注意页面上只能有success异步通知是通过这个判断的,只有监测到success才停止发送请求
}else{//验证失败
out.println("fail");
}
%>
return_url.jsp(同步通知页面)
其实这个也可以写在后台验证,只要按照下面的代码一样把参数获取过来,然后验证跳转到你想要的页面就行了
<%
//获取支付宝GET过来反馈信息
Map<String,String> params = new HashMap<String,String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
//商户订单号
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//支付宝交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//交易状态
String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
//计算得出通知验证结果
boolean verify_result = AlipayNotify.verify(params);
if(verify_result){//验证成功
if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){
}
out.println("验证成功<br />");
}else{
out.println("验证失败");
}
%>
至此,一次完整的支付宝即时到账交易就完成了
下一篇博客会介绍如何用j2ee在spring mvc项目中完成
Zemo手打,转载请标明出处:http://blog.csdn.net/zemochen/article/details/19175733
支付宝即时到账demo下载:http://download.alipay.com/public/api/base/alipaydirect.zip
相关文章推荐
- ASP.NET集成支付宝支付功能---即时支付
- iOS 支付宝和微信支付方式集成详解+(demo)
- 支付宝集成过程详解——运行DEMO
- 支付宝集成过程详解——运行DEMO
- 再问:支付宝即时到账集成接口!
- ANDROID集成支付宝SDK_APP应用支付宝开发DEMO
- 支付宝集成过程详解——运行DEMO
- 支付宝即时到账接口集成
- CI集成支付宝即时到账支付接口
- 网站上集成支付宝接口(一、申请合作者ID和key,下载Demo)
- 支付宝即时到账接口开发 - DEMO讲解
- 支付宝集成过程详解——运行DEMO
- 支付宝集成过程详解——运行DEMO (2016.01)
- 支付宝集成过程详解——运行DEMO
- 支付宝集成过程详解——运行DEMO
- 支付宝即时到账接口的集成和使用
- 支付宝集成过程详解——运行DEMO
- 支付宝集成过程详解——运行DEMO
- iOS支付宝集成前的Demo调试
- 支付宝集成过程详解——运行DEMO