对接支付宝沙箱过程

419 阅读2分钟

1.沙箱对接步骤

1.1 支付宝开发者平台地址

open.alipay.com/develop/man…

1.2 沙箱设置

借助于秘钥工具生成秘钥并配置

image.png

image.png

1.3 代码demo

构建AlipayClient需要的参数

image.png

@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&notify_url=https%3A%2F%2Fxfg.natapp.cn%2Fapi%2Fv1%2Falipay%2Falipay_notify_url&version=1.0&app_id=9021000133698808&sign_type=RSA2&timestamp=2024-01-13+09%3A44%3A12&alipay_sdk=alipay-sdk-java-4.38.157.ALL&format=json">
    <input type="hidden" name="biz_content" value="{&quot;out_trade_no&quot;:&quot;daniel82AAAA000032333361X05&quot;,&quot;total_amount&quot;:&quot;0.01&quot;,&quot;subject&quot;:&quot;测试商品&quot;,&quot;product_code&quot;:&quot;FAST_INSTANT_TRADE_PAY&quot;}">
    <input type="submit" value="立即支付" style="display:none" >
</form>
<script>document.forms[0].submit();</script>

打开html页面,输入账号密码

image.png

image.png

image.png

查询订单

@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/

image.png

image.png

客户端下载

image.png

下载解压运行

chmod a+x natapp

./natapp -authtoken=xx,产生公网域名

image.png

3. 个人支付宝升级成个体工商户流程

opendocs.alipay.com/common/02kk…