支付宝沙箱支付 Java

一、登录支付宝沙箱

开放平台-沙箱环境 (alipay.com)

(1)获取appid 没有账号的先注册

 (2)设置RSA2密钥
1、依然是沙箱环境,如下,点击 设置

 2、选择 公钥,此处的公钥支付宝提供了专门的生产工具,很方便

3.选择在线生成即可

3.注意公钥,私钥

4.将生成的应用公钥拷贝到沙箱环境公钥位置 

点击保存,会生成支付宝公钥,后续开发会说明用在哪里。

二、项目配置

目录结构

 导入pom

<dependency>
  <groupId>com.alipay.sdk</groupId>
  <artifactId>alipay-sdk-java</artifactId>
  <version>4.13.50.ALL</version>
</dependency>

<dependency>
  <groupId>com.alipay.sdk</groupId>
  <artifactId>alipay-easysdk</artifactId>
  <version>2.1.2</version>
</dependency>

 三、开发

AliPayBean类
@Data
public class AliPayBean {
    /**
     * 商户订单号
     */
    private String out_trade_no;

    /**
     * 订单名称
     */
    private String subject;

    /**
     * 付款金额
     */
    private String total_amount;

    /**
     * 商品描述
     */
//    private String body;

    /**
     * 超时时间参数
     */
    private String timeout_express = "60m";

    /**
     * 产品编号
     */
    private String product_code = "FAST_INSTANT_TRADE_PAY";
}

Alipay 类:注意上面的appid,商户私钥,支付宝公钥,网关填写自己的
package com.aaa.ssm.config;



import com.aaa.ssm.bean.AliPayBean;
import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;

import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
public class Alipay {

    /**日志对象*/
    private static final Logger logger = LoggerFactory.getLogger(Alipay.class);

    private final String format = "json";

    /**
     * appId
     */
    @Value("填写自己的appid")
    private String appId;

    /**
     * 商户私钥
     */
    @Value("填写自己的商户私钥")
    private String privateKey;

    /**
     * 支付宝公钥
     */
    @Value("填写自己的支付宝公钥")
    private String publicKey;

    /**
     * 服务器异步通知页面路径,需要公网能访问到
     */
    @Value("http://localhost:8080/ssm/error_url.html")
    private String notifyUrl;

    /**
     * 服务器同步通知页面路径,填写自己的成功页面路径
     */
    @Value("填写自己的成功页面路径")
    private String returnUrl;

    /**
     * 签名方式
     */
    @Value("RSA2")
    private String signType;

    /**
     * 字符编码格式
     */
    @Value("utf-8")
    private String charset;

    /**
     * 支付宝网关
     */
    @Value("填写自己的支付网关")
    private String gatewayUrl;

    public String pay(AliPayBean aliPayBean) throws AlipayApiException {

        AlipayClient alipayClient = new DefaultAlipayClient(
                gatewayUrl, appId, privateKey, format, charset, publicKey, signType);

        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(returnUrl);
        alipayRequest.setNotifyUrl(notifyUrl);
        alipayRequest.setBizContent(JSON.toJSONString(aliPayBean));
        logger.info("封装请求支付宝付款参数为:{}", JSON.toJSONString(alipayRequest));

        String result = alipayClient.pageExecute(alipayRequest).getBody();
        logger.info("请求支付宝付款返回参数为:{}", result);

        return result;
    }
}


OrderController类:
@Controller
@RequestMapping("/ali")
public class OrderController {

    /**日志对象*/
    private static final Logger logger = LoggerFactory.getLogger(OrderController.class);

    @Autowired
    private PayService payService;

    @RequestMapping("/pay")
    @ResponseBody
    public String alipay(String outTradeNo, String subject, String totalAmount) throws AlipayApiException {

        logger.info("商户订单号为{},订单名称为{},付款金额为{}", outTradeNo, subject, totalAmount);
        AliPayBean alipayBean = new AliPayBean();
        alipayBean.setOut_trade_no(outTradeNo);
        alipayBean.setSubject(subject);
        alipayBean.setTotal_amount(totalAmount);


        return payService.aliPay(alipayBean);
    }

    @RequestMapping("/success")
    @ResponseBody
    public String success(){
        return "交易成功!";
    }

    @RequestMapping(value = "/index")
    public String payCoin(){
        return "zfindex.html";
    }
}

 Pay 类
@Data
public class Pay {
    //订单号
    private String outTradeNo;
    //名称
    private String subject;
    //价格
    private String totalAmount;

}
PayServiceImpl类
@Service
public class PayServiceImpl implements PayService {

    /**日志对象*/
    private static final Logger logger = LoggerFactory.getLogger(PayServiceImpl.class);

    @Autowired
    private Alipay alipay;

    @Override
    public String aliPay(AliPayBean aliPayBean) throws AlipayApiException {
        logger.info("调用支付服务接口...");
        return alipay.pay(aliPayBean);
    }
}
PayService 接口
public interface PayService {

    String aliPay(AliPayBean aliPayBean) throws AlipayApiException;
}

四、前端页面

index.html

<!--<!DOCTYPE html>-->
<!--<html lang="en">-->
<!--<head>-->
<!--    <meta charset="UTF-8">-->
<!--    <title>Title</title>-->
<!--</head>-->
<!--<body>-->
<!--<form action="/ssm/ali/pay" method="post">-->
<!--    订单号:<input type="text" name="outTradeNo" required><br/>-->
<!--    订单名称:<input type="text" name="subject" required><br/>-->
<!--    付款金额:<input type="text" name="totalAmount" required><br/>-->
<!--    商品描述:<input type="text" name="body"><br/>-->
<!--    <input type="submit" value="下单"> <input type="reset" value="重置">-->
<!--</form>-->
<!--</body>-->
<!--</html>-->

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <!-- 引入组件库 -->
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>



</head>
<body>


<div id="app">

    <el-form :model="info" label-width="80px">

        <el-form-item label="订单号">
            <el-input v-model="info.outTradeNo"></el-input>
        </el-form-item>

        <el-form-item label="商品名称">
            <el-input v-model="info.subject"></el-input>
        </el-form-item>
        <el-form-item label="支付价格">
            <el-input v-model="info.totalAmount"></el-input>
        </el-form-item>




        <el-form-item>
            <el-button type="primary" @click="onSubmit">立即创建</el-button>
            <el-button>取消</el-button>
        </el-form-item>


    </el-form>



</div>

<script type="text/javascript">
    var app = new Vue({

        el: "#app",
        data: {
            info: {
                outTradeNo:'',
                subject: '',
                totalAmount: ''

            }
        },
        methods: {
            onSubmit() {

                var outTradeNo=app.info.outTradeNo
                var subject=app.info.subject
                var totalAmount=app.info.totalAmount
                location.href="/ssm/ali/pay/?outTradeNo="+outTradeNo+"&subject="+subject+"&totalAmount="+totalAmount;

            }

        }
    })
</script>

</body>
</html>

 error_url.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>支付失败</h2>
</body>
</html>

return_url.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>支付成功</h2>
</body>
</html>

运行结果:输入订单号,名称,价格   注意:不能为汉字

 

 账号密码沙箱里面有

 

 完结

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
502 Bad Gateway错误通常发生在后端服务器尝试从上游服务器(如API服务)接收数据时,但由于上游服务器暂时无法处理请求,导致返回这个错误。在Java中处理支付宝沙箱环境的502错误,可能涉及以下几个步骤: 1. **检查网络连接**:确保你的应用能够正常访问支付宝沙箱环境,包括API的URL是否正确,网络防火墙和代理设置是否允许访问。 2. **检查API服务**:登录支付宝开放平台,检查沙箱环境是否正常,有时可能是支付宝端的问题,比如服务临时维护或配置更。 3. **代码问题**:检查你的代码中调用支付宝API的部分,确保请求头、参数正确无误,并且超时设置合理。使用try-catch捕获异常,记录详细的错误日志。 4. **服务器配置**:如果使用的是反向代理(如Nginx或Apache),检查其配置,确保配置了正确的错误处理和重试策略。 5. **限流或并发控制**:有可能是并发请求过多,导致服务器负载过高。考虑增加请求的重试机制,或者使用限流算法避免短时间内发送过多请求。 6. **服务器性能优化**:提升服务器的处理能力,例如增加内存、调整线程池大小等,以更好地应对高并发请求。 7. **排查代码逻辑**:检查是否有代码逻辑错误,比如循环调用API,或者无限递归导致服务器资源耗尽。 如果你遇到了这个问题,相关问题可能包括:
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值