一、学习文档
1、API(统一收单下单并支付页面接口)
https://opendocs.alipay.com/apis/api_1/alipay.trade.page.pay
2、沙箱环境(打开登陆)
https://openhome.alipay.com/platform/appDaily.htm
二、环境准备
1、调试
(1)获取appid
点击上述沙箱环境网址,登陆进入,以下为appid
(2)设置RSA2密钥
1、依然是沙箱环境,如下,点击 设置
2、选择 公钥 ,此处的公钥支付宝提供了专门的生产工具,很方便
生成密钥有两种方式,我选择的是生成器生成。以下为生成器下载地址:
https://opendocs.alipay.com/open/291/105971
下载后安装即可使用
3、生成密钥
打开安装好的密钥生成器,选好后,点击生成密钥
4、返回沙箱环境,设置密钥
将3中生成的应用公钥拷贝到沙箱环境公钥位置
点击保存,会生成支付宝公钥,后续开发会说明用在哪里。
2、依赖
引入pom依赖,大家选择合适的版本即可
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.11.54.ALL</version>
</dependency>
三、开发
先上代码,最后对代码进行说明
@RestController
@RequestMapping("/alipay")
@Slf4j
public class AlipayController {
private String publicKey;
private String appId;
private String privateKey;
@RequestMapping("/pay")
public String pay(@RequestParam(value = "amt") BigDecimal amt,
@RequestParam(value = "subject") String subject,
@RequestParam(value = "body") BigDecimal body) {
log.info("支付宝支付入参:{}", amt + "," + subject + "," + body);
String serverUrl = "https://openapi.alipaydev.com/gateway.do";
String format = "json";
String charset = "utf-8";
String signType = "RSA2";
AlipayClient alipayClient = new DefaultAlipayClient(serverUrl,appId,privateKey, format, charset,publicKey, signType);
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
// 设置请求参数
request.setReturnUrl(""); // 设置 支付宝同步返回支付结果url,可以以此结果做后续业务逻辑处理 可为空
request.setNotifyUrl(""); // 设置 异步通知地址 可为空
// 设置网页支付参数
// outTradeNo 格式为yyyyMMddHHmmsss
request.setBizContent("{\"out_trade_no\":\""+ new SimpleDateFormat("yyyyMMddHHmmsss").format(new Date()); +"\","
+ "\"total_amount\":\""+ amt +"\","
+ "\"subject\":\""+ "测试" +"\","
+ "\"body\":\""+ "iphone 12 pro max" +"\","
+ "\"timeout_express\":\""+ "5m" +"\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
try {
//这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
if(response.isSuccess()){
log.info("【 Ali pay调用成功 】");
} else {
log.info("【 Ali pay调用失败 】");
}
log.info("支付宝支付结束,响应为:{}", JSON.toJSON(response));
// 就是orderString 可以直接给客户端请求,无需再做处理。
return response.getBody();
} catch (AlipayApiException e) {
log.error("【 Ali pay 异常 】", e);
}
return "fail";
}
}
上述代码中,publicKey即支付宝公钥,为上述设置完密钥后生成的部分
privateKey即应用私钥,即在密钥生成器中的应用私钥
测试url:http://localhost:9909/alipay/pay?amt=0.01&subject=测试&body=测试订单描述
请求结果如下:
**注:**付款成功后,会同步收到回调和异步回调,回调地址是在请求时设置的:
此外,扫码付款需要下载沙箱版支付宝(只支持安卓手机),不可用自己的支付宝账号密码登陆,需到沙箱环境下载沙箱钱包,用沙箱账号登陆
完结
支付宝提供了demo,下载地址:https://opendocs.alipay.com/open/203/105910
该demo是javaweb版本的,需要自己有tomcat,用开发工具打开项目后,要将项目转为web项目,此外就是需要按照文章前两节,获取必备信息,配置进去,项目启动成功即可体验支付宝支付。