支付宝支付配置

接口调用配置

AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);

这是配置客户端的主要参数

关键参数说明:

配置参数

示例值解释

获取方式/示例值

URL

支付宝网关(固定)

支付宝 - 网上支付 安全快速!

APP_ID

第三方应用 APPID

控制台第三方应用列表

APP_PRIVATE_KEY

开发者私钥,由开发者自己生成

获取详见配置密钥

FORMAT

参数返回格式,只支持 json

json(固定)

CHARSET

编码集,支持 GBK/UTF-8

开发者根据实际工程编码配置

ALIPAY_PUBLIC_KEY

支付宝公钥,由支付宝生成

获取详见上面配置密钥

SIGN_TYPE

商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2

RSA2

接口调用

接口调用示例大致分为三步:

  1. 拼装业务参数;
  2. 将参数发送给开放平台服务端;
  1. 获取开放平台服务端返回值,并进行具体业务处理。

公共响应参数配置

AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();

alipayRequest.setReturnUrl(return_url);

alipayRequest.setNotifyUrl(notify_url);

携带参数配置

alipayRequest.setBizContent

可以以JSONObject bizContent = new JSONObject();的形式配置

例如·

JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", out_trade_no);
bizContent.put("total_amount", total_amount);
bizContent.put("subject", subject);
bizContent.put("scene",scene);
bizContent.put("auth_code",auth_code);
bizContent.put("extend_params",extend_params);
alipayRequest .setBizContent(bizContent.toString());

申请账号略

模板谁都能用

package com.xunqi.gulimall.order.config;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.xunqi.gulimall.order.vo.PayVo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@ConfigurationProperties(prefix = "alipay")
@Component
@Data
public class AlipayTemplate {

    // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
    public String app_id;

    // 商户私钥,您的PKCS8格式RSA2私钥
    public String merchant_private_key;

    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public String alipay_public_key;

    // 服务器[异步通知]页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    // 支付宝会悄悄的给我们发送一个请求,告诉我们支付成功的信息
    public String notify_url;

    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    //同步通知,支付成功,一般跳转到成功页
    public String return_url;

    // 签名方式
    private  String sign_type;

    // 字符编码格式
    private  String charset;

    //订单超时时间
    private String timeout = "1m";

    // 支付宝网关; https://openapi.alipaydev.com/gateway.do
    public String gatewayUrl;

    public  String pay(PayVo vo) throws AlipayApiException {

        //AlipayClient alipayClient = new DefaultAlipayClient(AlipayTemplate.gatewayUrl, AlipayTemplate.app_id, AlipayTemplate.merchant_private_key, "json", AlipayTemplate.charset, AlipayTemplate.alipay_public_key, AlipayTemplate.sign_type);
        //1、根据支付宝的配置生成一个支付客户端
        AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl,
                app_id, merchant_private_key, "json",
                charset, alipay_public_key, sign_type);

        //2、创建一个支付请求 //设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(return_url);
        alipayRequest.setNotifyUrl(notify_url);

        //商户订单号,商户网站订单系统中唯一订单号,必填
        String out_trade_no = vo.getOut_trade_no();
        //付款金额,必填
        String total_amount = vo.getTotal_amount();
        //订单名称,必填
        String subject = vo.getSubject();
        //商品描述,可空
        String body = vo.getBody();

        alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                + "\"total_amount\":\""+ total_amount +"\","
                + "\"subject\":\""+ subject +"\","
                + "\"body\":\""+ body +"\","
                + "\"timeout_express\":\""+timeout+"\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        String result = alipayClient.pageExecute(alipayRequest).getBody();

        //会收到支付宝的响应,响应的是一个页面,只要浏览器显示这个页面,就会自动来到支付宝的收银台页面
        System.out.println("支付宝的响应:"+result);

        return result;

    }
}

配置

#支付宝相关的配置
alipay.app_id=2016102600766009
alipay.merchant_private_key=MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvZQ2XJ0kDOq4WiBoy2LCdgTdb5SMan7sFZtStjFmsqxoZuUd8ntuPikcZKXAAZcNcXDc99Ltkt+i2fMdzvg1Ung0cwKX6wqyBLU10lkMOUMs4hVl0MhW3Ihx8D9+kZIEg1yAbxuUrF8cV81Or+qxpnJ4iwNVwkOPrUOp0n8HTpVX1mjYYjkXhM/LtvVZ+IFc4yq+tVY0tTgsVPYcCtaKoYUzhSmncgkpjdMjthy4eTSje/hDMgnLFUsDs0cfdWLN8pVTxxiipr+Y/+Ax3mCfyBEtFuYn0OXKXXjHEp+WX/iQ6yqTdyhcYkxGWD4jIqP+g7mMrP7vKsbkquQOzxayTAgMBAAECggEACmL4mA/qgfdyocDzlDlC1ED3r0h1eLkm0R4S0Cg0k0YaqJVRR27835Y3uaS7jjp4hDqtxsx8YG2HqW7gPNlvXqhxbFd4PM5Uet3c7V+Mnwdn0XQMJRZmNM8fUrV57/lHsFMtApgXsCKbVpBvTwrsNODieHpk6WKbLK9BAyEG0Gqrv1xCTD55NDyr+mdKXINt5ZDaP8R2DeNrXrTrU7+qGsM7QfUvllN/ptkmKUQKBgQD0VpJvyIbRt3J2iyYnswB/tQMk5meqBuxN1oK9tirXBTyyqZaoTtk+Z49vqhSIU0yezW81htiuF5A/gepx2v4/IqtSqCKSyxqBfFwbxONuky9gHdM+I1XyazmtSbJz8vR9U/88O60Wm1vhIe+61tWh1eWIJ7IxhA11AswfhOYMuwKBgQC3xBnOECBsh9OLnhIm9PVVxF+IGQFshsmc6kdZlKO9KdDlEiOh+TMJwhMkBqAfRJTMaz8WxPL4met2ZUJL/cXfHgAmjDnGlN69lc4ELikEd3S5aB4AWVG4ybcaHsrhLqS16WSMU1kD9l5Y3q+pbiiMW8wWpCMxVstj1T3rn6cOCQKBgE0Wx0rXZJnkHAwEqPwbgMvKC3zn6Mr/Niz0wfki8W83qsffs7XUcrw6pkmfyqycQ29S94RW0CRVMOCol5RmeJLo2E7S112jEPDLkK/+NZdcfrT/k/dl5KcAZ4kh2Fi2zaaBCuUxGtIoIBvuvhkf0PUnbCzCAXmX5TsGr+o93usjAoGBAKZtEhW+Iy9HX73tPXFMnbe8LeybAOAhvgu/XTjy1cumSEp9QAocHy3yNtWErpVCziPH6Q4c9hNRip7iG8WoogBsMiS3EEgZYRR/zGGa0Ij8CpkzgyA7xDg/bvVX99MyI/ef1PEFNvPQtydzHdGrM0vSgyXqJvkzKuZSJE71exzJAoGAQcSJ+EtdoZpqe7bjNZ2IpgSCmE0ErYFVMT6IW95VcEXOciRhEYG3TQKYuhm0ZRN+D4DfZdL8vRRQ2YDMrK14UUXzp6TBI+yirTDfbK6LYpuOZqjcvxVFwF4tdI7/K7blNY4fbhApO/Nx5tUd8duErIznnDbFVBlBjl0JWYQdrN0=
alipay.alipay_public_key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3/IpQAsmsxozQkhGNY7aSrEtDQHjuNdhX9Z/zrZ+3aSC1gK2LS3EYXzzwFoDXMHRcTZajVqYPqKTnHWzx4lXDqJs8UlfcbSnJHEPVCGXqXl04WE9PXtcxicwNEUuDh6EeQu9GnOoBYQQiueKVK9NUdAr3UJyQF4eA45LCG0ZGNTHfqSJeLPzOcrcZglHY7NYXudxA8K7Xht1oA9laRFPmYgUNg9HuypGt1AwgOcDi9nrf1xrjeOTrPzKwLHoHp3fSTkm3GiAQZzwvkXDsK5Z99SinMyxgRze
alipay.notify_url=http://hjl.mynatapp.cc/payed/notify
alipay.return_url=http://member.gulimall.com/memberOrder.html
alipay.sign_type=RSA2
alipay.charset=utf-8
alipay.gatewayUrl=https://openapi.alipaydev.com/gateway.do

请求封装类

package com.xunqi.gulimall.order.vo;

import lombok.Data;

@Data
public class PayVo {

    private String out_trade_no; // 商户订单号 必填
    private String subject; // 订单名称 必填
    private String total_amount;  // 付款金额 必填
    private String body; // 商品描述 可空
}

响应封装类

package com.xunqi.gulimall.order.vo;

import lombok.Data;
import lombok.ToString;

import java.util.Date;

@ToString
@Data
public class PayAsyncVo {

    private String gmt_create;
    private String charset;
    private String gmt_payment;
    private Date notify_time;
    private String subject;
    private String sign;
    private String buyer_id;//支付者的id
    private String body;//订单的信息
    private String invoice_amount;//支付金额
    private String version;
    private String notify_id;//通知id
    private String fund_bill_list;
    private String notify_type;//通知类型; trade_status_sync
    private String out_trade_no;//订单号
    private String total_amount;//支付的总额
    private String trade_status;//交易状态  TRADE_SUCCESS
    private String trade_no;//流水号
    private String auth_app_id;//
    private String receipt_amount;//商家收到的款
    private String point_amount;//
    private String app_id;//应用id
    private String buyer_pay_amount;//最终支付的金额
    private String sign_type;//签名类型
    private String seller_id;//商家的id

}

简单使用

@Override
    public PayVo getOrderPay(String orderSn) {

        PayVo payVo = new PayVo();
        OrderEntity orderInfo = this.getOrderByOrderSn(orderSn);

        //保留两位小数点,向上取值
        BigDecimal payAmount = orderInfo.getPayAmount().setScale(2, BigDecimal.ROUND_UP);
        payVo.setTotal_amount(payAmount.toString());
        payVo.setOut_trade_no(orderInfo.getOrderSn());

        //查询订单项的数据
        List<OrderItemEntity> orderItemInfo = orderItemService.list(
                new QueryWrapper<OrderItemEntity>().eq("order_sn", orderSn));
        OrderItemEntity orderItemEntity = orderItemInfo.get(0);
        payVo.setBody(orderItemEntity.getSkuAttrsVals());

        payVo.setSubject(orderItemEntity.getSkuName());

        return payVo;
    }

成功后验签返回success,必须是字符串不能野蛮跳转

  @Transactional(rollbackFor = Exception.class)
    @Override
    public String handlePayResult(PayAsyncVo asyncVo) {

        //保存交易流水信息
        PaymentInfoEntity paymentInfo = new PaymentInfoEntity();
        paymentInfo.setOrderSn(asyncVo.getOut_trade_no());
        paymentInfo.setAlipayTradeNo(asyncVo.getTrade_no());
        paymentInfo.setTotalAmount(new BigDecimal(asyncVo.getBuyer_pay_amount()));
        paymentInfo.setSubject(asyncVo.getBody());
        paymentInfo.setPaymentStatus(asyncVo.getTrade_status());
        paymentInfo.setCreateTime(new Date());
        paymentInfo.setCallbackTime(asyncVo.getNotify_time());
        //添加到数据库中
        this.paymentInfoService.save(paymentInfo);

        //修改订单状态
        //获取当前状态
        String tradeStatus = asyncVo.getTrade_status();

        if (tradeStatus.equals("TRADE_SUCCESS") || tradeStatus.equals("TRADE_FINISHED")) {
            //支付成功状态
            String orderSn = asyncVo.getOut_trade_no(); //获取订单号
            this.updateOrderStatus(orderSn,OrderStatusEnum.PAYED.getCode(),PayConstant.ALIPAY);
        }

        return "success";
    }

使用工具生成私钥公钥

支付宝公钥自己配置,应用私钥自己配置

应用公钥给支付宝配置一份

异步回调地址最好是公网,如果是私网的话要进行内网穿透

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值