注册真正的支付宝账号
在百度搜索支付宝开放平台
搜索到的网址:https://open.alipay.com/dev/workspace/
用真正的支付宝账号登录
选择沙箱环境
打开沙箱应用页面
在控制台中查看到APPID:
沙箱账号
这个账号一会项目启动起来,支付时会使用到
启用系统默认密钥
查看
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--阿里支付easy版-->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-easysdk</artifactId>
<version>2.2.0</version>
</dependency>
server:
port: 80
servlet:
context-path: /wego
alipay:
#阿里支付
appId: 2021000118674150
#应用私钥
appPrivateKey:
#支付宝公钥
alipayPublicKey:
notifyUrl:
其中:
notifyUrl是成功之后,阿里巴巴将支付结果回传到我们自己项目中的url的地址,此时需要网络穿透,请参看博客:内网穿透工具 netapp
@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "alipay")
public class AlipayConfig {
private String appId;
private String appPrivateKey;
private String alipayPublicKey;
private String notifyUrl;
@PostConstruct
public void init(){
Config options = getOptions();
options.appId = this.appId;
options.merchantPrivateKey=this.appPrivateKey;
options.alipayPublicKey = this.alipayPublicKey;
options.notifyUrl = this.notifyUrl;
Factory.setOptions(options);
System.out.println("支付宝初始化成功!");
}
private Config getOptions(){
Config config = new Config();
config.protocol="https";
config.gatewayHost="openapi.alipaydev.com";
config.signType="RSA2";
return config;
}
}
@RestController
@RequestMapping("/v1/alipay")
public class AlipayController {
//http://localhost/wego/v1/alipay/pay?subject=aabbcc&tradeNo=1001&totalAmount=8888
@GetMapping(value = "/pay", produces = "text/html;charset=utf-8")
String pay(String subject, String tradeNo, String totalAmount) {
AlipayTradePagePayResponse response = null;
//发起API调用
try {
response = Factory.Payment.Page().pay(subject, tradeNo, totalAmount, "");
} catch (Exception e) {
System.err.println("支付时遇到异常:");
e.printStackTrace();
}
System.out.println(response.getBody());
return response.getBody();
}
@PostMapping("/notify")
String payNotify(HttpServletRequest request) throws Exception {
System.out.println("pay notify");
String tradeStatus = request.getParameter("trade_status");
System.out.println(tradeStatus);
if ("TRADE_SUCCESS".equals(tradeStatus)) {
System.out.println("支付宝异步回调");
Map<String, String> params = new HashMap<>();
Map<String, String[]> requestParams = request.getParameterMap();
for (String name : requestParams.keySet()) {
params.put(name, request.getParameter(name));
}
String tradeNo = params.get("out_trade_no");
String gmtPayment = params.get("gmt_payment");
//支付宝验签
if (Factory.Payment.Common().verifyNotify(params)) {
System.out.println("交易名称:" + params.get("subject"));
System.out.println("交易状态:" + params.get("trade_status"));
System.out.println("支付宝交易凭证号:" + params.get("trade_no"));
System.out.println("商户订单号:" + params.get("out_trade_no"));
System.out.println("交易金额:" + params.get("total_amount"));
System.out.println("买家在支付宝唯一ID:" + params.get("buyer_id"));
System.out.println("买家付款时间:" + params.get("gmt_payment"));
System.out.println("买家付款金额:" + params.get("buyer_pay_amount"));
//更新订单为已支付
//....
}
}
return "success";
}
}
http://localhost/wego/v1/alipay/pay?subject=aabbcc&tradeNo=1021&totalAmount=8888
,之后自支打开下图右边的网页
按图所示输入用户名和密码,单击提交:
上述实现在准备工作中,采用的是系统默认密钥,也可以采用自定义密钥的方式:
下载地址:https://opendocs.alipay.com/open/02kipk
下载之后默认安装,之后打开,生成密钥: