沙箱-简单实现支付宝网页支付功能

1.在实现前我们得先了解支付宝支付功能-他是需要一个真实的软件 但我们没有真实的应用软件,所以支付宝给我们提供了一个沙箱的功能。沙箱就是一个虚拟的假的应用软件。了解沙箱可以看支付宝文档中心。----沙箱环境 | 开放平台 

2.我们创建自己的沙箱账号

根据文档的操作我们进去沙箱环境,使用自己的支付宝登录

我们可以看到APPID

 点击公钥的查看  查看 应用私钥 和 支付宝公钥

右侧沙箱账号  里面 的买家账号和密码 就是我们支付的时候使用的账号,金钱不够可以充值,里面还可以下载沙箱版的支付宝,就可以使用沙箱版的支付宝扫码支付 ,沙箱版支付宝登录使用沙箱买家账号

3.编写代码

我们先导包,支付宝的包

<!--支付宝包-->
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.22.0.ALL</version>
</dependency>

编写信息  config类

直接在config下创建一个类就行

public class AliPayConfig {
    //APPID对应支付宝账号 
    public static String APP_ID="20210....";
    //应用私钥
    public static String MERCHANT_PRIVATE_KEY="MIIEvgIBADANBgkqh...";
    //支付宝私钥
    public static String ALIPAY_PUBLIC_KEY="MIIBI......";
    //这个是支付成功后要跳转到哪里的页面  success是我控制层里面的路径  改成自己的  也可以是一个页面.html
    public static String NOTIFY_URL="http://127.0.0.1:80/success";
    //页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问  和上面一样
    public static String RETURN_URL="http://127.0.0.1:80/success";
    //签名方式   这个不用改
    public static String SIGN_TYPE="RSA2";
    //字符编码格式  不用改
    public static String CHARSET="utf-8";
    //支付宝网关(沙盒环境)  不用改
    public static String GATEWAY_URL="https://openapi.alipaydev.com/gateway.do";
}

编写操作类

编写了一个controller

//支付
@ResponseBody
@PostMapping("/toBuyByAli")
public String  tobuy(@RequestParam("out_trade_no") String out_trade_no,
                     @RequestParam("total_amount") String total_amount,
                     @RequestParam("subject") String subject,
                     @RequestParam("body") String body){
    //获得初始化的AlipayClient
    AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.GATEWAY_URL,
            AliPayConfig.APP_ID, AliPayConfig.MERCHANT_PRIVATE_KEY,
            "json", AliPayConfig.CHARSET, AliPayConfig.ALIPAY_PUBLIC_KEY, AliPayConfig.SIGN_TYPE);
    //设置请求参数
    AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
    alipayRequest.setReturnUrl(AliPayConfig.RETURN_URL);  //设置同步回调通知
    alipayRequest.setNotifyUrl(AliPayConfig.NOTIFY_URL);  //设置异步回调通知
    //设置支付参数
    alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\","
            + "\"total_amount\":\"" + total_amount + "\","
            + "\"subject\":\"" + subject + "\","
            + "\"body\":\"" + body + "\","
            + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
    //请求
    String result = null;
    try {
        result = alipayClient.pageExecute(alipayRequest).getBody();
    } catch (AlipayApiException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return result;
}

四个参数得从前端页面获取

@RequestParam("out_trade_no") String out_trade_no, @RequestParam("total_amount") String total_amount, @RequestParam("subject") String subject, @RequestParam("body") String body

我使用了ajax方式

当点击去支付 会实现tobuy()方法

function tobuy(){
    var out_trade_no=Math.random().toString(36).substr(2,10);//订单单号 可以根据自己喜欢生成随机的唯一的单号  可以根据自己喜欢改
    var total_amount=document.getElementById("sumprice").innerText;//金钱  获取页面中金钱数  可以根据自己喜欢改

    var subject="测试订单名称";//   可以根据自己喜欢改
    var body="测试描述";//可以根据自己喜欢改
    var xmlhttp;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("POST","http://localhost/toBuyByAli?out_trade_no="+out_trade_no+
        "&total_amount="+total_amount+"&subject="+subject+"&body="+body,true);
//路径和参数改成自己的
    xmlhttp.withCredentials=true;
    xmlhttp.crossDomain=true;
    xmlhttp.send();
    xmlhttp.onreadystatechange=function()
    {
        //判断readyState就绪状态是否为4,判断status响应状态码是否为200
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.write(xmlhttp.responseText);
        }
    }
}

 最后就实现了  因为 document.write(xmlhttp.responseText);返回的是一个from表单和一个js  这个js会执行form实现跳转  跳转支付宝支付页面。

我们使用准备的沙箱账号就可以支付了。

原理:可以查看支付宝文档中心,demo在线调试

Demo 在线调试 | 开放平台

 


版权声明:本文为apple_hjw原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。