项目demo下载-CSDN(新-推荐):https://download.csdn.net/download/qq_39938758/11751843
项目demo下载-CSDN(旧):https://download.csdn.net/download/qq_39938758/10581629
1、springbootdemo
2、idea开发工具(有的跳过)
3、获得沙箱帐号
注册蚂蚁金服开发者账号(免费,不像苹果会收取费用)
注册地址:https://open.alipay.com,用你的支付宝账号扫码登录,完善个人信息,选择服务类型(我选的是自研)。
进入沙箱,第一次需要填写信息!(我已经有了所以就不需要了)
记得把下面生成的商户公钥保存到沙箱上
4、生成2048位商户公私钥(私钥保存与支付宝)
5、pom.xml文件依赖alipay得jar包
com.alipay.sdk
alipay-sdk-java
3.0.0
commons-logging
commons-logging
1.1.1
com.alibaba
fastjson
1.2.33
org.projectlombok
lombok
Demo项目结构: 请下载lombok插件
第一步: 配置alipay.properties
# 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
app_id = 2016091600527203
# 商户私钥,您的PKCS8格式RSA2私钥
merchant_private_key = MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCAWY4SMml0Y9cWjf/19/zTFu9YFsmsV/QiD/9yk37MNrYxElo6hcdWbxBMX984kZVMs9WR0y3LcoENo43dOch+5UWsmHdMdX/DLJ4p4qx7JuYKUIcYT89dzAJe6e0LN/b7Sng7MoN9QD/iuzGTfHehZ2nU9VqBE7OW05m74MfT9rEYjLuJQc7IGezFV3uBbAUjtHUhIzq4iQ5shMf8JewbWXAh45FhHadD6yVFxPDmkyQJSRlfE39jXN+I4RILegMeJJNu5Mzd5GmTGukksLOoCBVoWpa5CgoPymBHosQpWgpjw5ItCJ4o0ttxnKW10kWQxcE+5E7nwTMpXdy3/veRAgMBAAECggEAdgtnmh7ZVF2a7biOCDgbRD2cxcS3mRWPiGB0TXmQLdvH9xvs9lQhwMIHGGc4kvt6eAAR1buHK81VGikpiaTiXKsbSKE1X5HVfrkjglxizCU7f5MOnPKSQq8mIws8o4vGUNnt+Gv9+Q1FdI88Cmx4Tm8hK+a4ZWysSHS2uNAEmVG5EB5zZmAG/N+oXGRQ+Kisf5pO27AQpc7bC1w6FZ1Te1wZKEX+5GPZc7dRLINvbzX7eEXiAE9Rv3RzRU+98HGXgA3kMTmQXqN24y2NIKOB5TZz8zsuUmW+haoxvRoL4fxnIhuaH39lwvsJyQa/T8kLWw9+2CmVDvEfWk/y2sDkAQKBgQDuWkOdlwJIySzXwTNlPQ7q0X3GJ3rjkgG0xysIHP69GCk5WwxlKx8WOORfnoPpYT0V8G1IYfy7RpVzqRkx3mYOEEk1OQGVhGRPuDnjhdyc39NVcrPU2P09aVnOp074Fwr7ei7tUAhSNJE0YNgyteq4pDRCl3cggeqQB/KWrgFj0QKBgQCJ2kxHaH8zPVGot3NdGhnuw9KibdPL3kx2n6ZSBL5IGQZk0sMCsnfb2dHCTZJhZs9MCG7okpBD9m0JsmY9b3FEupbA4YbF+4PKId+ShlUJNY2RDPNzb3kyYbEFzHcUJo7qFkeASTWIxKeZYXhtWT0Ue0Zf+lnsalKcm/dq8bgHwQKBgA0yyF24l/LJ2QbVdvAbMnFESm+njgF9+0Q0Zyia2mxEIzw+02/itGT5n4O/9lP9A3Hsj1CbxG/mV65A5dlCFGqg8jzVPEY4P4m+jM4RgobZSg2IPXcC0PsOk1+DGjdYp04HlQOlE+DhckzxM+eS9T1mMlKhqoINT5zMI92+IuuRAoGAcTPc0/8SBcfjGQOdLuVSSmpwvIYoGRByBi/QayYOBDLYt08EaWCZYOccg80j2eyNasi6Gy7QXZ8tp3rizqyHfYMkbTxGaqrCbOkoKbE6f5eEq4rRGQh/pEnpDvP7DYckcULecJCt76ReZWxPcqyHphwdjI+P7L7bHFRP93iMQYECgYAk/zyG+5qjEcAnyIptvrgxSklBz/2P1AEex4ZcJpkc3EgYB5sSqiSt4tpAb3s+XfQkP/+5djgGdFSIn4QmczSSf/35cck8G+bISOPoZ08wGRv8LzhXXRVpIooAtEYnJk+Xp3E1RcFmuq2IZCRX7IU3AMFRg941vW+4EAdKmk6oPQ==
# 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
alipay_public_key = MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgFmOEjJpdGPXFo3/9ff80xbvWBbJrFf0Ig//cpN+zDa2MRJaOoXHVm8QTF/fOJGVTLPVkdMty3KBDaON3TnIfuVFrJh3THV/wyyeKeKseybmClCHGE/PXcwCXuntCzf2+0p4OzKDfUA/4rsxk3x3oWdp1PVagROzltOZu+DH0/axGIy7iUHOyBnsxVd7gWwFI7R1ISM6uIkObITH/CXsG1lwIeORYR2nQ+slRcTw5pMkCUkZXxN/Y1zfiOESC3oDHiSTbuTM3eRpkxrpJLCzqAgVaFqWuQoKD8pgR6LEKVoKY8OSLQieKNLbcZyltdJFkMXBPuRO58EzKV3ct/73kQIDAQAB
# 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数
notify_url = http://外网ip:端口/error.html
# 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数
return_url = http://外网ip:端口/sccess.html
# 签名方式
sign_type = RSA2
# 字符编码格式
charset = utf-8
# 支付宝网关
gatewayUrl = https://openapi.alipaydev.com/gateway.do
# 支付宝网关
log_path = "C:\\"
第二步: 编写测试页面 index.html
Title
支付宝demo测试
第三步: 编写参数bean
/*支付实体对象*/
@Data
@Accessors(chain = true)
public class AlipayBean {
/*商户订单号,必填*/
private String out_trade_no;
/*订单名称,必填*/
private String subject;
/*付款金额,必填*/
private StringBuffer total_amount;
/*商品描述,可空*/
private String body;
/*超时时间参数*/
private String timeout_express="10m";
private String product_code="FAST_INSTANT_TRADE_PAY";
}
第四步: 编写应用加载完成加载相关配置参数
/* 应用启动加载文件*/
@Component
public class PropertiesConfig implements ApplicationListener {
//保存加载配置参数
private static Map aliPropertiesMap = new HashMap();
/*获取配置参数值*/
public static String getKey(String key) {
return aliPropertiesMap.get(key);
}
/*监听启动完成,执行配置加载到aliPropertiesMap*/
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ApplicationReadyEvent) {
this.init(aliPropertiesMap);//应用启动加载
}
}
/*初始化加载aliPropertiesMap*/
public void init(Map map) {
// 获得PathMatchingResourcePatternResolver对象
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
//加载resource文件(也可以加载resources)
Resource resources = resolver.getResource("classpath:config/alipay.properties");
PropertiesFactoryBean config = new PropertiesFactoryBean();
config.setLocation(resources);
config.afterPropertiesSet();
Properties prop = config.getObject();
//循环遍历所有得键值对并且存入集合
for (String key : prop.stringPropertyNames()) {
map.put(key, (String) prop.get(key));
}
} catch (Exception e) {
new Exception("配置文件加载失败");
}
}
}
第五步: 编写支付宝util
/* 支付宝 */
public class AlipayUtil {
public static String connect(AlipayBean alipayBean) throws AlipayApiException {
//1、获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(
PropertiesConfig.getKey("gatewayUrl"),//支付宝网关
PropertiesConfig.getKey("app_id"),//appid
PropertiesConfig.getKey("merchant_private_key"),//商户私钥
"json",
PropertiesConfig.getKey("charset"),//字符编码格式
PropertiesConfig.getKey("alipay_public_key"),//支付宝公钥
PropertiesConfig.getKey("sign_type")//签名方式
);
//2、设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
//页面跳转同步通知页面路径
alipayRequest.setReturnUrl(PropertiesConfig.getKey("return_url"));
// 服务器异步通知页面路径
alipayRequest.setNotifyUrl(PropertiesConfig.getKey("notify_url"));
//封装参数
alipayRequest.setBizContent(JSON.toJSONString(alipayBean));
//3、请求支付宝进行付款,并获取支付结果
String result = alipayClient.pageExecute(alipayRequest).getBody();
//返回付款信息
return result;
}
}
第六步: 编写业务层
/*支付服务*/
public interface PayService {
/*支付宝*/
String aliPay(AlipayBean alipayBean) throws AlipayApiException;
}
/* 支付服务 */
@Service(value = "alipayOrderService")
public class PayServiceImpl implements PayService {
@Override
public String aliPay(AlipayBean alipayBean) throws AlipayApiException {
return AlipayUtil.connect(alipayBean);
}
}
第七步:编写web接口测试
/* 订单接口 */
@RestController()
@RequestMapping("order")
public class OrderController {
@Resource
private PayService payService;//调用支付服务
/*阿里支付*/
@PostMapping(value = "alipay")
public String alipay(String out_trade_no,String subject,String total_amount,String body) throws AlipayApiException {
return payService.aliPay(new AlipayBean()
.setBody(body)
.setOut_trade_no(out_trade_no)
.setTotal_amount(new StringBuffer().append(total_amount))
.setSubject(subject));
}
}
三、测试验证
备注1:相关注意事项
1、注意下载lombok插件和依赖lombokjar
2、其中service可以不要的,直接接口调用util文件也可以,当然你也可以直接在接口写连接加载都可以
备注2:支付宝相关资料链接
1、实现支付宝支付功能
2、叫你如何用支付宝测试扫一扫付钱功能
备注3:个人说明