参考文章:Java AlipayClient类代码示例
参考文章:支付宝官方SDK笔记
参考文章:支付宝支付接口的调用
一、Alipay三个重要的对象
1. AlipayClient接口
- 主要实现类:DefaultAlipayClient
- 主要方法:excute()发起请求,pageExcute()网页支付的请求
2. AlipayRequest接口
- 主要实现类:AlipayTrade***Request
- 主要方法:setBizContent()请求的业务参数、setNotifyUrl()异步通知的地址、setReturnUrl()同步通知的地址
3. AlipayResponse类
- 主要子类:AlipayTrade***Response
- 主要方法:getSubCode()获取错误代码、getMsg()获取错误原因、getBody()获取返回内容、getParams()获取请求业务参数、isSuccess()判断本次请求是否调用成功
二、Alipay的执行流程
1. 付款
2. 退款
三、配置Alipay参数
存储了一些支付所需的公钥啊,私钥啊等参数,方便同意管理和使用。
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "你的APPID";
// 商户私钥,您的PKCS8格式RSA2私钥
public static String merchant_private_key = "你的商户私钥";
// https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static String alipay_public_key = "你的支付宝公钥";
// 服务器异步通知页面路径 需http://格式的完整路径,由自己系统开发实现
public static String notify_url = "你的异步通知页面";
// 页面跳转同步通知页面路径 需http://格式的完整路径,由自己系统开发实现
public static String return_url = "你的回调页面";
// 签名方式
public static String sign_type = "RSA2";
// 字符编码格式
public static String charset = "utf-8";
// 支付宝网关
public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";
// 支付宝网关
public static String log_path = "C:\\";
四、核心代码
//1、封装client客户端
DefaultAlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.GATEWAYURL, AlipayConfig.APP_ID, AlipayConfig.MERCHANT_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGN_TYPE);
//2、封装 Request
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setNotifyUrl(AlipayConfig.notify_url); alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","
+ "\"total_amount\":\"" + totalAmount + "\","
+ "\"subject\":\"" + subject + "\","
+ "\"body\":\"商品名称\","
+ "\"timeout_express\":\"90m\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//3、封装 Response,也就是返回给前端的数据。此 Response 是ali sdk封装的
AlipayTradePagePayResponse payResponse = alipayClient.pageExecute(alipayRequest);
//4、获取 responseBody 返回给前端即可
String responseBody = payResponse.getBody();