当前位置:   article > 正文

SSM如何实现支付宝支付_如何在ssm中引入支付功能

如何在ssm中引入支付功能

最近空闲时间做了一个关于交易的小项目,还是基于SSM框架,大部分都是一些基础功能,只得说一下的就是支付功能的实现。

从项目一开始,我就没有想其他业务怎么实现,心中一直在想支付功能的实现,就是用户点击结算后生成订单,然后跳转到支付宝支付页面,用户扫码支付,支付成功后,页面进行刷新,就这么一个流程。

昨天,我认真阅读了一下支付宝支付的官方文档,阅读之后,便开始整合。

第一步:登陆支付宝开放平台-开发文档
在这里插入图片描述

登陆成功后点击导航栏【开发者中心】
在这里插入图片描述
接着点击【沙箱】
在这里插入图片描述

我们看到下面界面
在这里插入图片描述

这里我们需要注意四个参数

1.APPID:直接使用就可以,这个参数不需要你特意生成,沙箱应用会自动给用户创建好。

2.支付宝网关:直接使用就可以,这里有一个小知识点,需要注意,就是上图中的网关直接拿去用就可以,所有用户的都一样。仔细观察发现,该网关中alipay后面有dev,表明这是开发环境网关。

3.RSA2(SHA256)密钥:需要开发者手动生成密钥(也就是应用私钥)

直接告诉你这个需要用工具生成,很简单,我直接给大家贴上软件网址。

WINDOWS(windows版本工具请不要安装在含有空格的目录路径下)

MAC_OSX

(1)下载相应环境工具并安装后即可使用,本步骤指引以 MAC_OSX 界面为例,如下图所示:
在这里插入图片描述

(2).开发者根据开发语言选择密钥格式和密钥长度,新建应用请务必使用 RSA2密钥长度 即2048 位(目前已使用 RSA 密钥长度即1024 位密钥长度的应用仍然可以正常调用接口)。点击 生成密钥 后,工具会自动生成商户应用公钥(public key)和应用私钥(private key),如下图所示:
在这里插入图片描述

通过上面生成密钥的方法就可以生成,应用的私钥和公钥。

复制公钥—点击设置,进行设置就行了。
在这里插入图片描述

在这里插入图片描述

生成的私钥需妥善保管,避免遗失,不要泄露。应用私钥需填写到代码中供签名时使用。应用公钥需提供给支付宝账号管理者上传到支付宝开放平台。(私钥自己先留着,代码中使用)

4.RSA密钥:分为 【应用公钥】 和 【支付宝公钥】

应用公钥已经设置好了,支付宝公钥直接点击查看就可以了。

上面就是整个的设置过程。下面开始整合。

准备支付宝支付需要的架包。

集成支付宝接口需要引入的文件是:
alipay-sdk-java*.jar
commons-logging-1.1.1.jar

下载地址https://docs.open.alipay.com/54/103419/

首先编写一个支付宝配置类,需要写入上面设置好的一些数据。

AlipayConfig类

import java.io.FileWriter;
import java.io.IOException;

/* *
 *类名:AlipayConfig
 *功能:基础配置类
 *详细:设置帐户有关信息及返回路径
 *修改日期:2017-04-05
 *说明:
 *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
 */

public class AlipayConfig {

//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
    public static String app_id = "";

    // 商户私钥,您的PKCS8格式RSA2私钥,就是我们用工具生成的,我让你先保存起来的
    public static String merchant_private_key = "";

    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "";

    // 签名方式
    public static String sign_type = "RSA2";

    // 字符编码格式
    public static String charset = "utf-8";

    // 支付宝网关
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";

//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

前端选好物品,生成订单,选择支付后的拦截器

@RequestMapping(value ="/buyshopping",method = RequestMethod.GET)
    public void  buyshopping(@RequestParam String sumPrice, @RequestParam int[] ids, @RequestParam Integer client, HttpServletResponse response) throws IOException {
        //跳转到支付宝付款页面
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);

//      订单号
        String out_trade_no = OrderCodeFactory.getOrderIdByUUID();
        out_trade_no  = URLDecoder.decode(out_trade_no,"UTF-8");
//      总金额
        String total_amount = sumPrice;
        total_amount = URLDecoder.decode(total_amount,"UTF-8");
//      商品名称,我这里只获取是第一个商品的信息,读者按照实际情况进行编写逻辑
        Shopping shoppings = shoppingDao.queryShoppingById(ids[0]);
        String subject = shoppings.getTitle();
        subject = URLDecoder.decode(subject,"UTF-8");
//      商品描述
        String body = subject;
        body = URLDecoder.decode(body,"UTF-8");

        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); ///创建API对应的request
      //回调函数
        alipayRequest.setReturnUrl("success");
        alipayRequest.setBizContent("{" +
                "    \"out_trade_no\":\""+ out_trade_no +"\"," +
                "    \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," +
                "    \"total_amount\":"+ total_amount +"," +
                "    \"subject\":\""+ subject +"\"," +
                "    \"body\":\""+ body +"\"" +
                "    }"+
                "  }");

        String form="";
        try {
            form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println(form);//直接将完整的表单html输出到页面
        response.getWriter().close();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

回调函数success,支付成功后做的逻辑,我这个是个例子。

@RequestMapping("/success")
    public ModelAndView success(String out_trade_no,Double total_amount){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("success");
        modelAndView.addObject("money",total_amount);
        modelAndView.addObject("no",out_trade_no);
        return modelAndView;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

对了,记得下载沙箱版的支付宝,你如果用正式版扫描二维码会提示无效。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/543062
推荐阅读
相关标签
  

闽ICP备14008679号