支付宝扫码支付

扫码支付

企业使用支付宝支付的话,需要先进行账户的接入支付
接入支付文档链接: https://opendocs.alipay.com/open/0128wr
接入支付文档视频: https://www.kuangstudy.com/course/play/1377518279077142529#ksd_1381861907484418050_1381862218542391297
ps : 该视频来自于学相伴

企业接入完成后可以得到以下参数:

  • appId
  • 回调地址
  • 应用私钥:
  • 支付宝公钥

以上参数都开发支付需要必须参数

还有一个参数: 支付宝请求地址 这个参数是每个请求接口都不一样的,扫码支付的请求地址是: https://openapi.alipay.com/gateway.do

支付文档链接: https://opendocs.alipay.com/apis
可以参数阿里云官方文档

得到以上参数后可以进行开发了

可以使用阿里云的沙箱环境提供的参数进行开发测试,等公司接入完成后再将参数进行替换

沙箱文档官方链接: https://opendocs.alipay.com/open/200/105311

沙箱环境下生成的二维码需要下载阿里云提供的支付宝(沙箱版)扫码

下面开始代码开发
先介绍环境,我使用的是springboot进行开发的
第一步:导入支付宝依赖

		<!--支付宝支付相关-->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>3.0.0</version>
        </dependency>

第二步:

  • appId
  • 回调地址
  • 应用私钥:
  • 支付宝公钥
  • 请求地址

上面的参数可以写在数据库里面,也可以写在配置文件里面。看自己需求,这一步我就省略了,没啥技术含量

第三步:
创建controller文件,传入金额,描述…一系列的订单信息。也是看自己需求.这一步我也省略了,没啥技术含量
第四步:
业务层,也就是真正请求支付宝,然后支付宝返回支付二维码链接的业务逻辑,建议抽取成工具类,以便以后的复用
上代码:

			
		JSONObject jsonObject = new JSONObject(); // 返回controller的类型,可以根据自己需求进行来操作

        AlipayClient alipayClient = new DefaultAlipayClient("支付宝请求地址", "支付宝应用ID,也就是appId", "支付宝商户私钥", "JSON", "UTF-8", "支付宝商户公钥", "RSA2");
        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
        request.setNotifyUrl("支付宝回调地址");

        JSONObject json = new JSONObject(); // 这个东西里面都是自定义的
        json.put("out_trade_no", "订单编号,这个订单编号是你自己生成订单编号"); 
        json.put("total_amount", "订单金额";       
        json.put("subject", "订单描述,也可以里面写自己的其他的东西,看自己需求");
        // 下面可以写一些自己的东西,例如: key value这种类型的,自定义
        json.put("公司名称", "公司名称");
        String params = json.toString(); // 支付的请求体参数

        // 支付信息的参数
        // 6:设置支付相关的信息 必须要给的
        AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
        model.setOutTradeNo("自定义订单号"); // 
        model.setTotalAmount("支付金额");// 
        model.setSubject("支付的产品名称");// 
        model.setBody(params);
        model.setTimeoutExpress("支付的超时时间");
        request.setBizModel(model);

        AlipayTradePrecreateResponse response = null;
        try {
            response = alipayClient.execute(request);
            if (response.isSuccess()) {
                jsonObject.put("code", 200);
                jsonObject.put("message", "调用成功");
                jsonObject.put("outTradeNo", response.getOutTradeNo()); // 支付宝生成的支付宝的订单号,可以根据这个进行查询账单啥的,建议保存下来
                jsonObject.put("qrCode", response.getQrCode()); // 支付宝返回的二维码链接,可以根据这个链接生成二维码
                return jsonObject;
            } else {
                log.error("调用返回结果失败,错误码=>" + response.getCode());
                log.error("调用返回结果失败,错误内容=>" + response.getMsg());
                jsonObject.put("code", 301);
                jsonObject.put("message", "调用失败");
                return jsonObject;
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
            log.error("调用发生异常,错误码==>" + e.getErrCode());
            log.error("调用发生异常,错误内容==>" + e.getErrMsg());
            jsonObject.put("code", 301);
            jsonObject.put("message", "调用失败");
            return jsonObject;
        }

推荐一个二维码在线生成器,可以将上面返回的链接放上面测试一下,看看是否正确
https://www.bejson.com/convert/qrcode/

第五步:
能做到这里证明你已经生成了二维码,用户扫码支付成功后,支付宝会想之前的写好的回调地址发送数据,告诉这个回调地址,订单的详细信息和状态

前提是这个回调地址必须是线上的,要不然接收不到

成功接受到支付宝的回调信息后,就可以根据里面的信息根据自己的实际的业务进行操作了
上代码:
controller层

 /**
     * 支付宝回调地址
     */
    @CrossOrigin
    @ResponseBody
    @RequestMapping("你的地址")
    public String 你的方法名称(HttpServletRequest request) {
        // 1: 调用支付回调
        boolean result = tupjogService.alipayCallback(request);
        if (result) {
            return "success"; // 请不要修改或删除,因为是支付宝规定的
        } else {
            // 验证失败
            return "fail"; // 请不要修改或删除,因为是支付宝规定的
        }
    }

service层

		// 1:获取支付宝GET过来反馈信息
        Map<String, String> params = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i]
                        : valueStr + values[i] + ",";
            }
            params.put(name, valueStr);
        }
        // 返回公共参数 支付宝交易号
        String tradeno = params.get("trade_no");
        // 获取交易状态,我下面没做判断,你按照你自己的需求操作
        String tradeno = params.get("notify_type");
        //支付返回的请求参数body
        String bodyJson = params.get("body");
        try {
            JSONObject bodyJsonObject = JSONObject.parseObject(bodyJson);
            // 获取订单编号
            String ptype = bodyJsonObject.getString("out_trade_no");
            // 获取订单金额
            String totalAmount = bodyJsonObject.getString("total_amount");
            // 获取订单描述
            String subjectS = bodyJsonObject.getString("subject");
            // 获取公司名称 这些都是生成二维码链接时规定好的key,根据key获取对应的value
            String pumc = bodyJsonObject.getString("pumc");
            
            log.info("---->:【支付宝】交易的参数信息是:ptype:{},orderNumber是:{},subject是:{},pumc是:{}", ptype, totalAmount, subject, pumc);
            // 订单支付成功,保存的订单交易明细,根据自己业务操作
        } catch (Exception ex) {
            log.error("支付宝支付出现了异常....." + ex.getMessage());
            ex.printStackTrace();
            return false;
        }
        return true;

到此为止,支付宝的扫码支付就完事了,总结流程如下:

  1. 企业接入支付宝,得到对应的参数:
  • appId
  • 回调地址
  • 应用私钥:
  • 支付宝公钥
  • 请求地址
  1. 调用支付宝扫码支付接口,传入参数,生成二维码链接
  2. 将二维码链接生成二维码展示给用户,用户进行扫码支付
  3. 用户支付成功后,支付宝会自动向之前的规定好的回调地址发送订单详细信息
  4. 回调地址收到支付宝的回调后,你根据自己需求对参数解析和对订单进行后续操作

完事收工

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon20120331

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值