支付宝二维码支付--沙箱测试版(二)

关键词:
支付宝二维码支付、java实现、沙箱测试版

实现功能:java后台代码按照参数生成相应订单,转到HTML页面展示订单二维码,用户扫码支付结束后,进行页面跳转。

首先我们创建一个新的Java项目,正常的项目即可
然后我们需要下载调用支付宝接口所需要的jar包
下载网址:https://openhome.alipay.com/doc/sdkDownload.resource?sdkType=JAVA
在这里插入图片描述
其中readme.txt中的内容如下
在这里插入图片描述
按照你们使用不同开发工具的不同方式导入这些包,我为了省事就全部都放进去了。
然后就是代码

首先是我们收款方商户信息的配置,我们创建一个类,工具类,名字随意,但是要保证和类名一致

public class AlipayConfig {
    // 支付宝网关
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
    
    // 应用ID,你的APPID
    public static String app_id = "2016101800711866";

    // 应用私钥,您的PKCS8格式RSA2私钥
    public static String merchant_private_key = "应用私钥";

    // 支付宝公钥
    public static String alipay_public_key = "支付宝公钥";

    // 服务器异步通知页面路径,部署在公网下的网页;如果只是自己测试,可以不用在公网下,甚至可以不填,如果不填的话记得把下面代码中设置这一项的那一行注释。
    public static String notify_url = "";

    // 页面跳转同步通知页面路径,部署在公网下的网页;如果只是自己测试,可以不用在公网下,甚至可以不填,如果不填的话记得把下面代码中设置这一项的那一行注释。
    public static String return_url = "";

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

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

/*
在这之后应该再写一个函数,用来记录支付信息,做日志或者数据记录,感兴趣的可以自行查找相关代码。
*/
}

简单介绍一下这些字段的含义
支付宝网关    gatewayUrl    内容就是我们在沙箱环境里面,网页自动生成的支付宝网关,例如:https://openapi.alipaydev.com/gateway.do
APPID    app_id    即沙箱环境里面,自动生成的APPID
应用私钥    merchant_private_key    为密钥生成器中生成的应用私钥
支付宝公钥    alipay_public_key    为在沙箱应用中我们通过设置应用公钥,页面自动生成的支付宝公钥
服务器异步通知页面路径    notify_url    当支付结束时返回的状态,包括支付成功、支付失败、支付超时等等。对于初学入门者,非必填项。
页面跳转同步通知页面路径    return_url    就是支付结束之后,页面的跳转页。对于初学入门者,非必填项。
剩下的签名方式和字符编码格式都可以照抄,其中RSA2就是密钥生成器中你所选择的密钥长度。

现在,在java层次上,我们也完成了收款方商户的信息配置,接下来我们开始写生成订单的代码。 新建一个类,类名随意,代码如下
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;

public class PayUtil {

    public static void main(String[] args) {
        // 取当期时间为订单号;订单总额;订单商品名称;订单商品描述
        System.out.println(alipay(System.currentTimeMillis()+"","0.1","新春大礼包!!!促销版","测试使用"));
    }
    /**
     * 
     * @param outTradeNo  商户订单号,商户网站订单系统中唯一订单号,必填   可以使用当前时间
     * @param totalAmount  付款金额,必填
     * @param subject 主题
     * @param body 商品描述,可空
     * @return
     */
    public static String alipay(String outTradeNo,String totalAmount,String subject,String body) {
        //获得初始化的AlipayClient对象,这个时候就把我们在AlipayConfig中设置的收款方商户信息设置进去了
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, 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);
        try {               
            alipayRequest.setBizContent("{\"out_trade_no\":\""+ outTradeNo +"\","   // 设置订单号
                    + "\"total_amount\":\""+ totalAmount +"\","     // 设置订单总额
                    + "\"subject\":\""+ subject +"\","      // 设置订单主题
                    + "\"timeout_express\":\"10m\","        // 设置该订单最晚付款时间,这里设置的是10分钟
                    + "\"body\":\""+ body +"\","        // 设置该订单商品的描述
                    // + "\"qr_pay_mode\":\""+ Constants.QR_PAY_MODE +"\"," 
                    + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");                                                                                                                                                               
    
            // 发起生成订单请求
            String result = alipayClient.pageExecute(alipayRequest).getBody();
            return result;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }
}

然后我们就可以直接运行程序了,运行程序之后可以看到控制台输出了一段HTML代码
在这里插入图片描述
我们在桌面新建一个HTML文件,然后使用VSCode打开,将这段代码放进HTML的之间。(也可以不用VSCode,正常使用记事本打开也可以,只要代码如下即可)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>


    <form name="punchout_form" method="post" action="">
        <input type="hidden" name="biz_content" value="{&quot;out_trade_no&quot;:&quot;1579352440693&quot;,&quot;total_amount&quot;:&quot;0.1&quot;,&quot;subject&quot;:&quot;新春大礼包!!!促销版&quot;,&quot;timeout_express&quot;:&quot;10m&quot;,&quot;body&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>


</body>
</html>

你们的form中的action应该是很长的一段,我在这里把它给删除了。
写好这些代码之后,保存,将这个HTML文件使用浏览器打开,就会看到类似如下的页面
在这里插入图片描述
然后就可以使用我们在Android手机上下载的沙箱版支付宝来扫码支付了。
因为这一次我们没有设置支付结束后的跳转页面,所以它不会跳转,会一直保持这种状态,直到支付超时。

发布了17 篇原创文章 · 获赞 3 · 访问量 3100

猜你喜欢

转载自blog.csdn.net/qq_20179227/article/details/104032505