这个支付的流程是前端H5(APP等)需要支付时调用后台的接口拿到我们加密的签名去调起支付宝的支付界面(支付宝APP)进行支付操作,并且前端在支付成功后,支付宝后台会回调一个我们在签名时写入的一个接口地址进行支付结果的异步通知。

前置准备

  • 1、在整个编写过程中使用到的变量主要有私钥、公钥以及你的APPID(H5支付不需要),这些都是你在蚂蚁金服注册之后拿到的。
  • 2、使用到的jar包:

    • alipay-sdk-java*.jar—————————支付宝SDK编译文件jar
    • alipay-sdk-java*-source.jar——————支付宝SDK源码文件jar
    • commons-logging-1.1.1.jar——————SDK依赖的日志jar
    • commons-logging-1.1.1-sources.jar———SDK依赖的日志源码jar

      支付宝的SDK的jar包没有在maven repository里注册,因此要自己去官网上下载生成jar包并打进maven仓库里,懒得写的同学可以点击这里直接下载。

代码

获取签名的接口

@ResponseBody
@RequestMapping(value="/alipaySign",method=RequestMethod.POST)
public JSONObject signprams(Double totalAmount,String userId,String out_trade_no){
String subject = "Your Subject"; //主题
String body = "Your Body"; //主题内容
String CHARSET = "utf-8"; /**
* 实例化客户端
*/
AlipayClient alipayClient = new DefaultAlipayClient
(PayConstants.Ali_Open_Api_Domain,PayConstants.Ali_AppId,
PayConstants.ALI_PRIVATE_KEY,"json",CHARSET,PayConstants.ALI_PUBLIC_KEY,"RSA2");
//实例化具体API对应的request类,类名称和接口名称对应
AlipayTradeAppPayRequest alirequest = new AlipayTradeAppPayRequest();
//sdk中的model入参
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setPassbackParams(body); //描述信息,添加附加数据
model.setSubject(subject); //商品标题
model.setOutTradeNo(out_trade_no); //订单号
model.setTimeoutExpress("30m"); //超时关闭该订单时间
model.setTotalAmount(Double.toString(totalAmount)); //将double数值转换成String类
model.setProductCode(PayConstants.Ali_ProductCode);
alirequest.setBizModel(model);
alirequest.setNotifyUrl(PayConstants.Ali_Notify_Url); //回调地址 String orderStr = "";
try {
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(alirequest);
orderStr = response.getBody();
} catch (AlipayApiException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} String sign = DigestUtils.md5Hex(out_trade_no).toUpperCase(); /////////////////处理你自己的逻辑///////////////////////// JSONObject resObj = new JSONObject();
resObj.put("code", "SUCCESS");
resObj.put("out_trade_no", out_trade_no);
resObj.put("sign", sign);
resObj.put("orderStr",orderStr);
System.out.println(resObj.toJSONString());
System.out.println(resObj.toString());
return resObj;
}

回调的接口

回调的地址一定要保证是外网的地址,内网开发地址因为防火墙的限制不一定能访问到。

@ResponseBody
@RequestMapping(value="/alipayNotify",method=RequestMethod.POST)
public String getNotify(HttpServletRequest request){
Map requestParams = request.getParameterMap();
logger.info("支付宝支付结果通知:"+requestParams.toString());
//获取支付宝POST过来反馈信息
Map<String,String> params = new HashMap<String,String>(); 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] + ",";
logger.info(valueStr);
//乱码解决,这段代码在出现乱码时使用。
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
} ///////////////////处理自己的逻辑////////////////////// try {
boolean flag = AlipaySignature.rsaCheckV1
(params, PayConstants.ALI_PUBLIC_KEY, "UTF-8", "RSA2");
if(flag){
if("TRADE_SUCCESS".equals(params.get("trade_status"))) }
} catch (AlipayApiException e) {
e.printStackTrace();
}
return "SUCCESS";
}

支付宝支付Java后台总结的更多相关文章

  1. 支付宝app支付java后台流程、原理分析(含nei wang chuan tou)

    java版支付宝app支付流程及原理分析 本实例是基于springmvc框架编写     一.流程步骤         1.执行流程           当手机端app(就是你公司开发的app)在支付 ...

  2. 手把手教你完成App支付JAVA后台-支付宝支付JAVA

    接着上一篇博客,我们暂时完成了手机端的部分支付代码,接下来,我们继续写后台的代码. 后台基本需要到以下几个参数,我都将他们写在了properties文件中: 支付宝参数 AliPay.payURL = ...

  3. 微信app支付java后台流程、原理分析及nei网穿透

    一.流程步骤 本实例是基于springmvc框架编写 1.执行流程           当手机端app(就是你公司开发的app)在支付页面时,调起服务端(后台第1个创建订单接口)接口,后台把需要调起微 ...

  4. 支付宝支付Java代码

    支付宝调用流程 开发前的准备工作 配置应用网关 应用网关里面填写的值就是商户后台的异步回调地址.也就是在支付宝付完款之后,由支付宝调用商户,便于商户验证订单各信息和更新订单状态 授权回调地址 授权回调 ...

  5. app支付宝支付java服务端代码

    app支付java服务端生成支付单文档 public String aliPay(String amount,Map<String,Object> body){ //实例化客户端 Alip ...

  6. 微信支付与支付宝支付java开发注意事项

    说明:这里只涉及到微信支付和淘宝支付 以官网的接口为准,主要关注[网关].[接口].[参数][加密方式][签名][回调] 第一步,了解自己的项目要集成的支付方式 常见的有扫码支付.网页支付.APP支付 ...

  7. 微信小程序-统一下单、微信支付(Java后台)

    1.首先分享 微信统一下单接口: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1   微信接口 签名 对比网址: https: ...

  8. APP微信支付Java后台的实现(springmvc)

    第一次做微信支付,阅读完开发文档后,下了个官方demo,摸索了好久,期间也出现了好多问题,终于是实现生成预支付订单以及支付成功后接收微信服务器通知,不多说了,直接上代码: 一.工具类 Constant ...

  9. 【原创】微信小程序支付java后台案例(公众号支付同适用)(签名错误问题)

    前言 1.微信小程序支付官方接口文档:[点击查看微信开放平台api开发文档]2.遇到的坑:预支付统一下单签名结果返回[签名错误]失败,建议用官方[签名验证工具]检查签名是否存在问题.3.遇到的坑:签名 ...

随机推荐

  1. 正则表达式 Tricks

    *:0 或 多个 ?:任意一个 [list]:a[xyz]b,a 与 b 之间必须也只能有一个字符,但只能是 x/y/z,也即:axb, ayb, azb [!list]:匹配除 list 中的任意单 ...

  2. 关于jacob支持BSTR类型的经验总结

    作者:朱金灿 来源:http://blog.csdn.net/clever101 jacob是实现Java和COM之间互操作的一个开源中间件.网上大多的程序示例基本上是使用jacob调用微软的offi ...

  3. Cisco交换机解决网络蠕虫病毒入侵问题

    Cisco交换机解决网络蠕虫病毒入侵问题          今年来网络蠕虫泛滥给ISP和企业都造成了巨大损失,截至目前已发现近百万种病毒及木马.受感染的网络基础设施遭到破坏,以Sql Slammer为 ...

  4. tensorflow学习之路-----简单卷积神经网路

    import tensorflow as tf#取数据,目的是辨别数字from tensorflow.examples.tutorials.mnist import input_data'''手动添加 ...

  5. Metro界面的真正意义

    昨天去客户那给安装防火墙和交换机,因为客户和我们公司签订了维保的合同,然后我们公司两个人去了客户那跟客户沟通也去顺路去做巡检. 客户之前跟我们公司采购了一台DELL的PC服务器,预装了win serv ...

  6. PHP和js判断访问终端是否是微信浏览器

    http://www.sucaihuo.com/php/813.html http://www.thinkphp.cn/extend/767.html http://blog.csdn.net/gf7 ...

  7. leetcode第一刷_Scramble String

    字符串的好题. 题干解释的很复杂.一下让人不知所措了. 这道题究竟是什么意思呢?终于的结果是把一个字符串中字母的顺序打乱了,让你推断一个字符串能不能由还有一个字符串打乱得到.那打乱这个过程是怎么做的呢 ...

  8. Java Security安全系列文档翻译笔记————KeyStore、密钥、证书、命令行实战

    发送方任务: 1.将文档.源代码打包到jar包(这样才干够签名) 2.在keystore中生成相应的Private key和Public key 3.用Private Key对jar包进行签名,这是j ...

  9. PHP开发常规安全问题总结

    文章来源:PHP开发学习门户 地址:http://www.phpthinking.com/archives/575 php给了开发人员极大的灵活性,可是这也为安全问题带来了潜在的隐患,最近须要总结一下 ...

  10. PHP的模板引擎smarty原理是什么(整理)

    PHP的模板引擎smarty原理是什么(整理) 一.总结 一句话总结:其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者混合为一个ph ...