网上关于Java支付宝接口的文章很多,都大同小异,但是具体到代码中,还是不太一样,对于以前没有调试的新手来说还是很费解的,这是通过调试认为比较有用的版本,贴在这里供大家参考。

1、从本站提交到支付宝:

/**
* 将订单提交支付宝进行网上支付
*/
public ActionForward submitAlipayUrl(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String orderNo = request.getParameter("orderNo");//订单编号
HashMap hm = new HashMap();
hm.put("_input_charset", "utf-8");// 采用相同的编码方式
hm.put("body", "企鹅个性化图书订单,订单号:" + orderNo);// 填写在跳到支付宝页面上显示的付款内容信息
hm.put("notify_url", "http://127.0.0.1:8888/mypenguin/orders.do?method=AlipayNotify");// 客户付款后,支付宝调用的页面
hm.put("out_trade_no", orderNo);// 外部交易号,最好具有唯一性,在获取支付宝发来的付款信息时使用.
hm.put("partner", "2088002302055380");// partnerId(合作伙伴ID)
//hm.put("agent", "2088002302055380");// partnerId(合作伙伴ID)
hm.put("payment_type", "1");// 支付类型 1=商品购买,2=服务购买,...
//hm.put("price", "178.00");// 订单金额信息
hm.put("total_fee", "178.00");// 订单金额和信息
//hm.put("quantity", "1");// 订单商品数量,一般都是写1,它是按照整个订单包来计算
hm.put("return_url", "http://127.0.0.1:8888/mypenguin/orders.do?method=AlipayReturn");// 客户付款成功后,显示给客户的页面
hm.put("show_url", "http://127.0.0.1:8888/mypenguin/books.do?method=list&kindId=1");//展示地址,即在支付页面时,商品名称旁边的“详情”的链接地址。
hm.put("seller_email", "monicali_7766@sina.com");// 你的支付宝账户email
hm.put("service", "create_direct_pay_by_user");// create_direct_pay_by_user=直接付款,trade_create_by_buyer=担保付款
hm.put("subject", "企鹅个性化图书订单号:" + orderNo);// 填写在跳到支付宝页面上显示的付款标题信息
String payGateway = "https://www.alipay.com/cooperate/gateway.do";// 跳转到支付宝的url头
String securityCode="7nj9sczcnfc4n8366j46mrzsbqjksmzn";//securityCode(安全码);
String sign = makeUrl(hm,securityCode,"utf-8",payGateway);//securityCode(安全码);
hm.put("sign", sign);
hm.put("sign_type", "MD5");
PrintWriter out = response.getWriter();

out.println("<form name='alipaysubmit' method='post' action='https://www.alipay.com/cooperate/gateway.do?_input_charset=utf-8' >");
out.println("<input type='hidden' name='service' value='" + hm.get("service") + "'>");
out.println("<input type='hidden' name='partner' value='" + hm.get("partner") + "'>");
out.println("<input type='hidden' name='seller_email' value='" + hm.get("seller_email") + "'>");
out.println("<input type='hidden' name='out_trade_no' value='" + hm.get("out_trade_no") + "'>");
out.println("<input type='hidden' name='subject' value='" + hm.get("subject") + "'>");
out.println("<input type='hidden' name='body' value='" + hm.get("body") + "'>");
out.println("<input type='hidden' name='total_fee' value='" + hm.get("total_fee") + "'>");
out.println("<input type='hidden' name='show_url' value='" + hm.get("show_url") + "'>");
out.println("<input type='hidden' name='return_url' value='" + hm.get("return_url") + "'>");
out.println("<input type='hidden' name='notify_url' value='" + hm.get("notify_url") + "'>");
out.println("<input type='hidden' name='payment_type' value='1'>");
out.println("<input type='hidden' name='sign' value='" + hm.get("sign") + "'>");
out.println("<input type='hidden' name='sign_type' value='" + hm.get("sign_type") + "'>");
out.println("</form>");
out.println("<script>");
out.println(" document.alipaysubmit.submit()");
out.println("</script>");
return null;
}

/**
* 根据传入的参数生成Alipay的支付URL
* @param hm 参数值
* @param securityCode 安全码
* @param charset 编码
* @param payGateway 支付宝gateway
* @return
*/
public static String makeUrl(HashMap 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("=");
content.append((String) hm.get((String) keys.get(i)));
if (i != keys.size() - 1) {
content.append("&");
}
}
content.append(securityCode);
String sign = DataUtil.MD5Encode(content.toString(), charSet); //MD5加密
return sign;
}

2、return_url的内容:
/**
* 支付宝支付完成以后,当前窗口会从支付宝的页面跳转回这个页面。该页面称作“返回页”,
* 是同步被支付宝服务器所调用,可当作是支付完成后的提示信息页,如“您的某某某订单,多少金额已支付成功”。
*/
public ActionForward AlipayReturn(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String alipayNotifyURL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
//String alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?";//此路径是在上面链接地址无法起作用时替换使用。
alipayNotifyURL = alipayNotifyURL+ "&partner=2088002302055380&notify_id="+ request.getParameter("notify_id");
// 获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
String responseTxt = check(alipayNotifyURL);
// 获得POST 过来参数设置到新的requestParams中
Map requestParams = request.getParameterMap();
List keys = new ArrayList(requestParams.keySet());
Collections.sort(keys);
StringBuffer content = new StringBuffer();
for (int i = 0; i < keys.size(); i++) {
String key=(String) keys.get(i);
if(!key.equals("")&&!key.equals("sign")&&!key.equals("sign_type")){
content.append((String) keys.get(i));
content.append("=");
content.append((String)requestParams.get((String) keys.get(i)));
if (i != keys.size() - 1) {
content.append("&");
}
}
}
String securityCode="7nj9sczcnfc4n8366j46mrzsbqjksmzn";//securityCode(安全码);
content.append(securityCode);
String mysign = DataUtil.MD5Encode(content.toString(), "utf-8");
System.out.println("--------------------------content="+content);
System.out.println("--------------------------mysign="+mysign);
System.out.println("--------------------------sign="+request.getParameter("sign"));
if (mysign.equals(request.getParameter("sign")) && responseTxt.equals("true") ){
if (request.getParameter("trade_status").equalsIgnoreCase("TRADE_FINISHED")){
// 可以做重定向,也可以用来虚拟物品发货
}
return mapping.findForward("payOK");//交易成功
}else{
return mapping.findForward("payFail");//交易失败
}
}

3、notify_url的内容:
/**
* 通知返回URL,仅适用于异步返回处理结果的接口。有些服务是无法立即返回处理结果的,那么需要通过这个URL将处理结果异步返回给合作伙伴
*/
public ActionForward AlipayNotify(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String alipayNotifyURL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
//String alipayNotifyURL = "http://notify.alipay.com/trade/notify_query.do?";//此路径是在上面链接地址无法起作用时替换使用。
alipayNotifyURL = alipayNotifyURL+ "&partner=2088002302055380&notify_id="+ request.getParameter("notify_id");
// 获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
String responseTxt = check(alipayNotifyURL);
// 获得POST 过来参数设置到新的requestParams中
Map requestParams = request.getParameterMap();
List keys = new ArrayList(requestParams.keySet());
Collections.sort(keys);
StringBuffer content = new StringBuffer();
for (int i = 0; i < keys.size(); i++) {
String key=(String) keys.get(i);
if(!key.equals("")&&!key.equals("sign")&&!key.equals("sign_type")){
content.append((String) keys.get(i));
content.append("=");
content.append((String)requestParams.get((String) keys.get(i)));
if (i != keys.size() - 1) {
content.append("&");
}
}
}
String securityCode="7nj9sczcnfc4n8366j46mrzsbqjksmzn";//securityCode(安全码);
content.append(securityCode);
String mysign = DataUtil.MD5Encode(content.toString(), "utf-8");
System.out.println("--------------------------content="+content);
System.out.println("--------------------------mysign="+mysign);
System.out.println("--------------------------sign="+request.getParameter("sign"));
if (mysign.equals(request.getParameter("sign")) && responseTxt.equals("true") ){
if (request.getParameter("trade_status").equalsIgnoreCase("TRADE_FINISHED")){
// 可以做重定向,也可以用来虚拟物品发货
}
return mapping.findForward("payOK");
}else{
return mapping.findForward("payFail");
}
}

/**
* @param myUrl
*
* @param url
*
* @return 获取url内容
*/
public static String check(String urlvalue ) {

String inputLine = "";
try
{
URL url = new URL(urlvalue);

HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();

BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));

String stTemp = "";
while((stTemp = in.readLine()) != null)
{
System.out.println(stTemp);
inputLine = inputLine + stTemp;
}
}
catch(Exception e)
{
e.printStackTrace();
}
return inputLine;
}

阿里支付宝java接口的更多相关文章

  1. 微信退款和支付宝退款接口调用(java版)

    项目中需要使用到微信和支付宝的退款功能,在这两天研究了一下这两个平台的退款,有很多坑,在开发中需要留意 1.微信退款接口 相对来说我感觉微信的退款接口还是比较好调用的,直接发送httppost请求即可 ...

  2. Android开发---支付宝功能接口(支付功能)(转载!)

    最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...

  3. 调用支付宝第三方接口(沙箱环境) SpringMVC+Maven

    一.蚂蚁金服开放平台的操作 网址:https://open.alipay.com/platform/home.htm 支付宝扫码登陆

  4. 通过AccessKey调用阿里云CDN接口刷新CDN资源案例

    通过AccessKey远程调用阿里云CDN接口,快速实现自动化集成部署. CdnService.java package com.nfky.cdn; import com.aliyuncs.Defau ...

  5. python调用支付宝支付接口

    python调用支付宝支付接口详细示例—附带Django demo代码   项目演示: 一.输入金额 二.跳转到支付宝付款 三.支付成功 四.跳转回自己网站 在使用支付宝接口的前期准备: 1.支付宝公 ...

  6. python调用支付宝支付接口详细示例—附带Django demo代码

    项目演示: 一.输入金额 二.跳转到支付宝付款 三.支付成功 四.跳转回自己网站 在使用支付宝接口的前期准备: 1.支付宝公钥 2.应用公钥 3.应用私钥 4.APPID 5.Django 1.11. ...

  7. Django 支付宝付款接口的使用

    我们在开发的过程中经常会碰到调用微信或者支付宝接口进行付款,付款完成之后,如果用户绑定了我的账号,我只要有活动了,就要给这个关注我的用户推动消息,让用户知道,比如说,我们经常会关注一些公众号,然后这些 ...

  8. java接口调用——webservice就是一个RPC而已

    很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...

  9. java 接口的作用和好处

    1.java 接口的作用 http://blog.csdn.net/hack_bug/article/details/7634737 2.一位Java大牛的回答 很多JAVA初级程序员对于接口存在的意 ...

随机推荐

  1. HBase核心知识点总结

    一.HBase介绍 1.基本概念 HBase是一种Hadoop数据库,经常被描述为一种稀疏的,分布式的,持久化的,多维有序映射,它基于行键.列键和时间戳建立索引,是一个可以随机访问的存储和检索数据的平 ...

  2. PHP微信公众号开发之基本配置

    (提示:需要有服务器或云虚拟机) 一开始不明白公众号不是可以这样管理吗?                那么为什么用开发平台进行公众号开发,官方文档是这样说的 为了识别用户,每个用户针对每个公众号会产 ...

  3. Django之用户认证auth模块

    一 Django中的auth模块: 我们在使用模块之前要先导入模块: from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介 ...

  4. 在Django中运行脚本文件以及打印出SQL语句。

    Django终端打印SQL语句 在Django项目的settings.py文件中,在最后复制粘贴如下代码: LOGGING = { 'version': 1, 'disable_existing_lo ...

  5. oracle查看和替换含不可见字符(空白)

    select lengthb('1397256'), dump('1397256') from dual; select ascii('') from dual; ), '') from dua ...

  6. MySQL C API(23)

    C API 提供了对 MySQL c/s 模型的底层访问.C API 代码在 mysqlclient 库中实现.可以从该库中引用到的变量及含义: 环境变量 含义 MYSQL_UNIX_PORT 本地连 ...

  7. 【Python】python3 正则爬取网页输出中文乱码解决

    爬取网页时候print输出的时候有中文输出乱码 例如: \\xe4\\xb8\\xad\\xe5\\x8d\\x8e\\xe4\\xb9\\xa6\\xe5\\xb1\\x80 #爬取https:// ...

  8. ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - ROSMapModify - ROS地图修改

    ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - 2 - MapModify地图修改 We can use gmapping model to genera ...

  9. Java URLEncoder URLDecoder

    URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之间的相互转换 URLDecoder类包含一 ...

  10. Java,Hello World,《算法》环境搭建中的问题,用 cmd 和 IntelliJ Idea 分别编译和运行 Java 程序

    ▶ IntelliJ idea 下载和安装(http://www.jetbrains.com/idea/) ▶ 新建项目(如图),注意选择 SDK 类型和位置 ● 在 src 目录中新建一个 Pack ...