依赖:

 <!--        alipay-sdk-java 注意一下版本-->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.4.49.ALL</version>
</dependency>

配置类:

 package com.sdk.pay.alipay;

 public class AlipayConfig {
// 商户appid
public static String APPID = "2016102100729846";
// 私钥 pkcs8格式的
public static String RSA_PRIVATE_KEY =
"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDHiiREGifXUNV4" +
"2QJixj0NEq4DgOBhjA3lTdQxCrJBeOBz7UUPXQfKw39LGKhoyrgPmJKzYwWosfIl" +
"mFk4qvGGsxbvuIGW8aUpxwFR9PmUetgoLroko/6mddnCA1+pSkBVA2vZhKO7MgZc" +
"onfJN305izNcGMSbYm20W0mAnmRCZgux5nZpFq6kUYP45WAmyMUoXVQOrUOb6Ec0" +
"6+CPuTpeV32IWpW6Sr/Ukvxt6BNw+XMhwM7vrIYsN8RW50aMsOlTwACQ19G5EOKe" +
"vA07urMxwdeEoDxggYFG0o4As6IxzlUdd4eYWKOuX1l0/zZpOCxQiMrXrv+eRZFa" +
"lBPvN++3AgMBAAECggEAEt73qxEmL3DPn4w2c4z3/SKFHoOztMYAEm2X4cN3NEXw" +
"REZuP5O2xvBSO5Hra22wlpkBVsHIqTmbAv8zgO55xRlu0+EJMHNOAXN2pn+akvZD" +
"NxmkNQ7laGzA2V5kT6hcCS43puyqZ2vFukELPxZmW2jUxKL7BQ77/RCdFPLl3HmL" +
"QEJsOITqf7+q8pMWaaKF3mesqzz8AGzD0LC/pQwCh7h6ur0ojle6hDslHMK7UkEY" +
"QUTK+Kz6ZGgXJWIc3xsE0oG6O/+QgAgssoaKgDPFmzfOt4yq4cfCzx8xlDCBDmC6" +
"hdqdegwICxqxmbKlp9cRnLnEOv3Q5gUB0YlorM3e8QKBgQD1eIeUJkyM2v1Gobtm" +
"eOFdtblc2E5cy2P5DGC5nawCtpK3kIGDxDM8Np5xasRkwsaSovQkH1bJ5ocStwLX" +
"rDOj57oENrdieIGEHP8ffpAVsa7SgTYUjwdyA79FsMEZWX1PanbqF7J3NS2coneg" +
"HVkdPQXRkmXMuJ/l96ZSMxGfJQKBgQDQGT/4B8LSCv62WaQHMnMyNdxCbg/135ov" +
"suMymgGre13onOblCyUb3SnvOAO1vnSHWNbmj5Knz5/cRYzxBAPXaJ0gYVJkMxEy" +
"nQelWCBhPRqfRIjeHTN9F98g2fsTArPy1zhR+NzwSdRx4aL08beDOwYIMPZuTGod" +
"xmt58L96qwKBgGQDXcog6KOjPfqfPsl7iucxeXq4rwTj4bHBN0+pTEI2vQSJnhtf" +
"vzhTUK8JP0eGjH2GY06sbiIJCRO4+TGCee/YJFQ/LuyyCKMZZWEhofcU1BP0jWJG" +
"/FOZ7z6ny6VWbtYCnLy4NwCW7CSblX3pNzvQdyRyL4P/3TZHdr6bDBz5AoGBAJQW" +
"w+0QKNYsuOKvnAj7H/tFVP95L6Z7f1Aeb4xdCH8uBcA5mB669aeElgkExa8aX/bJ" +
"g/UDiwwctticLhZ+EvXCHr8iQu3HYZ+xG/XQZwqL31wj+3qFMVT+He1U8lWvALv5" +
"6Lx8602cXLDGL588PKoI4NwHa/dGLeYOhAF9D+aNAoGBAK6geTKYSbdh/0IEBxSx" +
"kMVx4D1pYKUOgTEqGuw7IYeNrwwE/F/SVhgkpAvz3ppYUM+bsPHbofEu7W/uanP8" +
"2Akf8D0dpTcQju+6MuQmCPcLmJSq2pqVNHG4gUnzz5CZoi+IrK/VMTXfU2O+i+H0" +
"rGQXtgvpSTBHlrcRklSvYjaC";
// 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://28k6010n77.wicp.vip/callback.html";
// 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址
public static String return_url = "http://28k6010n77.wicp.vip/return.html";
// 请求网关地址
public static String URL = "https://openapi.alipaydev.com/gateway.do";
// 编码
public static String CHARSET = "UTF-8";
// 返回格式
public static String FORMAT = "json";
// 支付宝公钥
public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAov3L35qUSYI2E5iDZmjXgJJs4cWKW2LhaddgKw5D7UgFYOcOv/ZYf5SdiWVk4tjhhJxFy1iDRxB+V5d0KD0cOc0PHBA0jQ6UfEu1BSV6rNL+ipgF1xLDudwT+iuVyKg2EEkFWb14Mm1D06qqen7yQyftzCU4TQ/gOUBzHcrQ5HJ1TxqgP0kHRUwe44utEwAMYNgJk9hxZ01ULVBQVAVxjGirju47OSIjnOCIfhk1fMrHIZreZFPp5uhzluJnIUHRugw+w7MunWy3iAOpNM47FKs4RuV/YHqeEdc1jFflAmeJhXT84ySuQZc6ZkwpY3JJc4ObGIchSj3SOqy1iSN9BwIDAQAB";
// 日志记录目录
public static String log_path = "/log";
// RSA2
public static String SIGNTYPE = "RSA2";
}

controller:

 package com.sdk.pay.controller;

 import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradeWapPayRequest; import com.sdk.pay.alipay.AlipayConfig;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; @Controller
public class AliPayController {
@RequestMapping("ali.html")
public String page() {
return "alipay";
} @RequestMapping("alipay.html")
public void order(HttpServletRequest request, HttpServletResponse response, Integer amount) throws Exception {
// 商户订单号,商户网站订单系统中唯一订单号,必填
String out_trade_no = System.currentTimeMillis() + "";
// 订单名称,必填
String subject = "测试";
System.out.println(subject);
// 付款金额,必填
String total_amount = amount.toString();
// 超时时间 可空
String timeout_express = "2m";
// 销售产品码 必填
String product_code = "QUICK_WAP_WAY";
/**********************/
// SDK 公共请求类,包含公共请求参数,以及封装了签名与验签,开发者无需关注签名与验签
//调用RSA签名方式
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
AlipayTradeWapPayRequest alipay_request = new AlipayTradeWapPayRequest(); // 封装请求支付信息
AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
model.setOutTradeNo(out_trade_no);
model.setSubject(subject);
model.setTotalAmount(total_amount);
// model.setBody(body);
model.setTimeoutExpress(timeout_express);
model.setProductCode(product_code);
alipay_request.setBizModel(model);
// 设置异步通知地址
alipay_request.setNotifyUrl(AlipayConfig.notify_url);
// 设置同步地址
alipay_request.setReturnUrl(AlipayConfig.return_url); // form表单生产
String form = "";
try {
// 调用SDK生成表单
form = client.pageExecute(alipay_request).getBody();
System.out.println(form);
response.setContentType("text/html;charset=" + AlipayConfig.CHARSET);
response.getWriter().write(form);//直接将完整的表单html输出到页面
response.getWriter().flush();
response.getWriter().close();
} catch (AlipayApiException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} @RequestMapping("callback.html")//以回调方法为准
public void callback(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("支付回调============callback.html==================================");
PrintWriter out = response.getWriter();
//获取支付宝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"); //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
//计算得出通知验证结果
//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
boolean verify_result = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, "RSA2"); if (verify_result) {//验证成功
//////////////////////////////////////////////////////////////////////////////////////////
//请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— if (trade_status.equals("TRADE_FINISHED")) {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序 //注意:
//如果签约的是可退款协议,退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
//如果没有签约可退款协议,那么付款完成后,支付宝系统发送该交易状态通知。
} else if (trade_status.equals("TRADE_SUCCESS")) {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//如果签约的是可退款协议,那么付款完成后,支付宝系统发送该交易状态通知。
//更新订单
System.out.println("商户订单号:" + out_trade_no);
System.out.println("支付宝订单号:" + trade_no);
System.out.println("支付宝金额:" + request.getParameter("total_amount"));
} //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
out.println("success"); //请不要修改或删除 //////////////////////////////////////////////////////////////////////////////////////////
} else {//验证失败
out.println("fail");
}
out.close();
} @RequestMapping("return.html")//只给用户一个提示
public void success(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("return.html======只给用户一个提示========================================");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=" + AlipayConfig.CHARSET);
PrintWriter out = response.getWriter();
//获取支付宝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");
System.out.println(valueStr);
params.put(name, valueStr);
}
System.out.println(params);
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
//商户订单号 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"); //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
//计算得出通知验证结果
//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
boolean verify_result = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.SIGNTYPE); if (verify_result) {//验证成功
//////////////////////////////////////////////////////////////////////////////////////////
//请在这里加上商户的业务逻辑程序代码
//该页面可做页面美工编辑
out.flush();
out.println("验证成功<br />");
//——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— //////////////////////////////////////////////////////////////////////////////////////////
} else {
//该页面可做页面美工编辑
out.flush();
out.println("验证失败");
}
out.close();
}
}

html:

 <!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="alipay.html" method="post">
金额<input name="amount"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>

调用支付宝接口的简单demo的更多相关文章

  1. android应用程序如何调用支付宝接口

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

  2. android应用程序如何调用支付宝接口(转)

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

  3. Android 开发之Android 应用程序如何调用支付宝接口

    1.到支付宝官网,下载支付宝集成开发包 由于android设备一般用的都是无线支付,所以我们申请的就是支付宝无线快捷支付接口.下面是申请的地址以及下载接口开发包的网址:https://b.alipay ...

  4. Android之应用程序怎样调用支付宝接口

    http://blog.csdn.net/lilidejing/article/details/19483717 近期在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口.由于用的人比 ...

  5. 调用支付宝接口Android客户端没有支付宝APP的情况下解决无法调用支付宝页面的问题

    这几天一直研究支付宝接口调用,因为当前应用中需要调用支付宝接口作移动支付. 遇到一个问题困扰几天,就是当我们的手机端未安装支付宝APP的时候,需要在自己应用中调用支付宝的登陆网页进行支付.我是Andr ...

  6. Django 调用支付宝接口

    目录 一  支付宝接口 二  视图函数 支付宝支付 正式环境:用营业执照,申请商户号,appid 测试环境:沙箱环境:https://openhome.alipay.com/platform/appD ...

  7. 在线支付接口之PHP支付宝接口开发简单介绍

    php100:92:在线支付接口之PHP支付宝接口开发 支付接口一般是第三方提供的代收款.付款的平台,可以通过支付接口帮助企业或个人利用一切可以使用的支付方式.常见支付平台:支付宝.快钱.云网支付.财 ...

  8. C# 如何创建接口以及使用接口的简单Demo(转载!)

    //No:1  首先,我们要封装一个接口,接口中不要实现具体的方法(说白了这就是一个架子而已!) using System;using System.Collections.Generic;using ...

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

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

随机推荐

  1. eclipse启动tomcat访问localhost:8080报404

    直接双击tomcat\bin目录下面的startup.bat启动 是没问题 的 但是eclipse启动tomcat访问localhost:8080报404 解决方案如下: 双击红色圈里面的tomcat ...

  2. 《方方格子》(WPS版) _v3.6.6.0

    <方方格子>(WPS版) 下载地址(b2a7) SHA1:35AE4D99B77613D9E2BAF912477DC74C5C2B8389 版本信息    发行版本 3.6.6.0    ...

  3. 74.Python中ORM聚合函数详解:Max,Min

    Max和Min:获取指定对象的最大值和最小值. 1. 比如:想要获取Author表中的最大的年龄和最小的年龄.示例代码如下: from django.http import HttpResponse ...

  4. 133-PHP子类无法重写父类private同名函数

    <?php class father{ //定义father类 //定义protected成员方法 protected function cook(){ return 'protected co ...

  5. Bean 注解(Annotation)配置(2)- Bean作用域与生命周期回调方法配置

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  6. OpenPose 开源库安装

    一.下载openpose下载openpose 使用Git直接下载openpose git clone https://github.com/CMU-Perceptual-Computing-Lab/o ...

  7. Codeforces 392 C Unfair Poll(模拟)

    题意:老师点名顺序规则如下:第1排,第2排,……,第n-1排,第n排,第n-1排,……,第2排,第1排,第2排,……,第n-1排,第n排,……对于每排都是从左到右依次点名,问点名k个人后,所有人中最多 ...

  8. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring AOP(面向切面编程)

    面向切面编程(AOP)和面向对象编程(OOP)类似,也是一种编程模式.Spring AOP 是基于 AOP 编程模式的一个框架,它的使用有效减少了系统间的重复代码,达到了模块间的松耦合目的. AOP ...

  9. idea以yarn-client 提交任务到yarn

    鉴于很多小白经常问我如何用idea提交任务到yarn,这样测试的时候不用频繁打包. 昨天,晚上健身回来录了一个小视频,说是小视频但是耗时也比较长,将近40min.可能是健身脱水太多,忘了补充盐分,无力 ...

  10. C#高级编程(第9版) 第11章 LINQ 笔记

    概述语言集成查询(Language Integrated Query, LINQ)在C#编程语言中集成了查询语法,可以用相同的语法访问不同的数据源.LINQ提供了不同数据源的抽象层,所以可以使用相同的 ...