美文网首页
java服务器端集成支付宝

java服务器端集成支付宝

作者: 4fb9b877fd61 | 来源:发表于2018-09-26 17:03 被阅读12次

1.支付宝已经更新添加了封装好的签名方法,可以在自己的项目中直接调用进行签名,减少了自己手动签名产生的问题,主要是在进行方法调用时注意传参的要求,尤其是公钥使用的是支付宝的公钥,而不是APP的公钥

支付宝鼓励使用SDK进行签名,一般调用RSA2 进行签名,并将返回的值直接传递给前端,调用支付宝支付,举个例子:

组装参数:

AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody("支付宝支付");
model.setSubject("App支付测试Java");
model.setOutTradeNo(order.getOrderNumber());
model.setTimeoutExpress("30m");
model.setTotalAmount(String.valueOf(order.getPrice()));
model.setProductCode("QUICK_MSECURITY_PAY");
tring sign = creatAliPaySign(model);//调用生成签名的方法

调用签名方法,将组装好的参数传递给签名方法:

if(model!=null){
    AlipayClient alipayClient = new DefaultAlipayClient( ALIPAY_URL, APP_ID,
        APP_PRIVATE_KEY,ALIPAY_FORMAT, ALIPAY_CHARSET,ALIPAY_PUBLIC_KEY, SIGN_TYPE);
    //实例化具体API对应的request类,类名称和接口名称对应
    //当前调用接口名称:alipay.trade.app.pay
    AlipayTradeAppPayRequest aliRequest = new AlipayTradeAppPayRequest();
    //SDK已经封装掉了公共参数,这里只需要传入业务参数。
    //以下方法为sdk的model入参方式(model和biz_content同时存在的取biz_content)。
    aliRequest.setBizModel(model);
    aliRequest.setNotifyUrl(NOTIFY_URL);
    //这里和普通的接口调用不同,使用的是sdkExecute
    try {
      AlipayTradeAppPayResponse aliResponse = alipayClient.sdkExecute(aliRequest);
       String sign = aliResponse.getBody();
       return sign;
    } catch (AlipayApiException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
       return null;
    }
}

将生成的sign值直接返回给客户端即可

2.关于异步通知:
  异步通知为支付宝支付完成后,对服务器端发送的通知,客户端返回的为同步通知,我们对订单的处理需要以服务器端的信息为准.异步调用的接口需要参与签名,并通过客户端传递个支付宝,必须为无参的方法.对其发送的异步通知,需要进行验签,已确定支付的唯一性.
  可以通过request 获得支付宝异步通知返回的内容:

//获取支付宝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] + ",";
  }
  //乱码解决,这段代码在出现乱码时使用。
// try {
//   valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
// } catch (UnsupportedEncodingException e) {
//   // TODO Auto-generated catch block
//    e.printStackTrace();
//}
  params.put(name, valueStr);
}
boolean flag = AlipaySignature.rsaCheckV1(params, getAliPayPublicKey(), "UTF-8","RSA2");
//flag=true 则为验签通过,用户可以添加自己的业务逻辑处理,并返回给支付宝服务器端success来通知其已经验签通过

3.支付宝公钥和私钥的生成,这不能算是一个坑,只因自己对此不了解,产生了误解,需要成对生成

相关文章

  • java服务器端集成支付宝

    1.支付宝已经更新添加了封装好的签名方法,可以在自己的项目中直接调用进行签名,减少了自己手动签名产生的问题,主要是...

  • java 服务器端集成 华为推送

    github 地址 说明 java 服务器端集成 华为推送 工具包 官方文档 使用 示例

  • iOS 2017 集成支付宝v2.0详解

    前言:集成支付宝可以分为客户端签名和服务器端签名两种,前者需要将PrivateKey放在本地,支付宝不推荐使用,推...

  • iOS Alipay -支付宝

    iOS 集成Alipay -支付宝支付 集成 AliPay - 支付宝

  • iOS支付宝功能集成

    iOS快速集成支付宝详解/支付宝集成获取私钥与公钥 在集成支付宝功能前,我们必须了解下什么支付宝流程,下图是支付宝...

  • 支付宝支付流程(I)

    参考资料:支付宝支付集成支付宝支付集成实现蚂蚁金服iOS支付集成

  • 支付宝 ’openssl/asn1.h' file no

    起因 项目需要集成支付宝,下载了支付宝demo(地址点击这里)然后开启搬砖。按照支付宝的集成说明开始集成。文档地址...

  • 支付宝支付集成步骤和流程(Swift2.2)

    支付宝支付集成步骤和流程 1 简述 简单说就三个步骤: 1.生成订单(可以在客户端生成,也可以在服务器端生成) ...

  • ## [iOS 支付宝支付]

    [iOS开发系列-支付宝支付] 概述 开发中支付通常都会集成支付宝支付,下面讲解支付宝的整体流程。 集成支付宝支付...

  • iOS集成支付宝和微信支付SDK

    1. 支付宝SDK集成 实现思路:1.下载支付宝SDK2.集成SDK到项目中,参考官方集成文档。3.调起支付宝SD...

网友评论

      本文标题:java服务器端集成支付宝

      本文链接:https://www.haomeiwen.com/subject/lhljoftx.html