1.沙箱对接步骤
1.1 支付宝开发者平台地址
1.2 沙箱设置
借助于秘钥工具生成秘钥并配置
1.3 代码demo
构建AlipayClient需要的参数
@Test
public void test_aliPay_pageExecute() throws AlipayApiException {
// 发送请求的 Request类
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
request.setNotifyUrl(notify_url);
request.setReturnUrl(return_url);
JSONObject bizContent = new JSONObject();
// 我们自己生成的订单编号
bizContent.put("out_trade_no", "daniel82AAAA000032333361X05");
// 订单的总金额
bizContent.put("total_amount", "0.01");
// 支付的名称
bizContent.put("subject", "测试商品");
// 固定配置
bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");
request.setBizContent(bizContent.toString());
String form = alipayClient.pageExecute(request).getBody();
log.info("测试结果:{}", form);
}
支付配置:
- app_id:应用ID - 您的APPID,收款账号既是你的APPID对应支付宝账号。获取地址;open.alipay.com/develop/san…
- merchant_private_key:商户私钥,【通过支付宝开放平台秘钥工具】创建出来的私钥。公钥填写到网页上,私钥程序里使用。
- alipay_public_key:支付宝公钥,在网页上填写公钥后,会给你一个支付宝的公钥。
- notify_url:服务器异步通知回调地址,也就是你支付完成后,支付宝调用你的地址。因为我们是在本地做测试,外网是访问不到的。所以为了能做这样的测试,可以回调到我们。那么这里需要使用 natapp.cn 做一个内网穿透。
- return_url:支付完成后跳转的地址
- gatewayUrl:支付宝沙箱环境的地址,固定的。
- sign_type:签名方式固定的
- charset:字符编码固定的
调用配置:
- out_trade_no:你的单号,用你的单号类生成支付单信息。
- total_amount:支付金额
- subject:商品名称
- product_code:固定值;FAST_INSTANT_TRADE_PAY
得到结果:
<form name="punchout_form" method="post" action="https://openapi-sandbox.dl.alipaydev.com/gateway.do?charset=utf-8&method=alipay.trade.page.pay&sign=mbUfsnHh2%2FK6qicX8VBnLvc5rSpttaypmLC8qe3XQGK0Zt7qR%2FKXQGyVoFPwHiM2fVSnwczuCdBouUAIrUQc5xoEIaL6BSn0jEpmkotl9mpl9TzX8Lq6fGYlcb2LYX1NRucxPSP0XtZUM1wes14ov29pd%2BDBMkIzP8VdgBXvOrpFogFVsYK12X3JA5WCzgVM49ZnWgyA6ix32Oa00IkpHrRjlCfRqhJfSrWplGa6TTRMpeJqBUKu1wKoypmHCxrJbxAOrmCDF2Oo62OoWEVjepgwkjBZqEvUrdBOokccmrmbpot3g98V%2B6P5zgaOd%2FFjN4LXqeXxy7R57spUHGZY4Q%3D%3D&return_url=https%3A%2F%2Fgaga.plus¬ify_url=https%3A%2F%2Fxfg.natapp.cn%2Fapi%2Fv1%2Falipay%2Falipay_notify_url&version=1.0&app_id=9021000133698808&sign_type=RSA2×tamp=2024-01-13+09%3A44%3A12&alipay_sdk=alipay-sdk-java-4.38.157.ALL&format=json">
<input type="hidden" name="biz_content" value="{"out_trade_no":"daniel82AAAA000032333361X05","total_amount":"0.01","subject":"测试商品","product_code":"FAST_INSTANT_TRADE_PAY"}">
<input type="submit" value="立即支付" style="display:none" >
</form>
<script>document.forms[0].submit();</script>
打开html页面,输入账号密码
查询订单
@Test
public void test_alipay_certificateExecute() throws AlipayApiException {
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
AlipayTradeQueryModel bizModel = new AlipayTradeQueryModel();
bizModel.setOutTradeNo("daniel82AAAA000032333361X04");
request.setBizModel(bizModel);
String body = alipayClient.execute(request).getBody();
log.info("测试结果:{}", body);
}
退款接口
@Test
public void test_alipay_refund() throws AlipayApiException {
AlipayTradeRefundRequest request =new AlipayTradeRefundRequest();
AlipayTradeRefundModel refundModel =new AlipayTradeRefundModel();
refundModel.setOutTradeNo("daniel82AAAA000032333361X04");
refundModel.setRefundAmount("0.01");
refundModel.setRefundReason("退款说明");
request.setBizModel(refundModel);
AlipayTradeRefundResponse execute = alipayClient.execute(request);
log.info("测试结果:{}", execute.isSuccess());
}
2. natapp对接流程
在我们对接支付宝的过程中,支付成功会设置一个回调地址,如果是公司项目,我们一般暴露网关地址给支付宝来进行回调。如果是我们自己的项目,一般我会采用natapp进行内网穿透,产生一个公网域名来进行访问配置
登录地址:natapp.cn/
客户端下载
下载解压运行
chmod a+x natapp
./natapp -authtoken=xx,产生公网域名