天天看点

java 支付宝 H5支付使用须知:

目录

使用须知:

1:maven:

2:编写工具类  AlipayUtil 

3:调用代码:

使用须知:

    支付宝的支付较为成熟,开发较为简单,

    需先在支付宝中开通支付宝H5支付,开通细节暂不描述。。

1:maven:

<dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>com.alipay</groupId>
            <artifactId>sdk-java</artifactId>
            <version>20170615110434</version>
        </dependency>
           
sdk-java的jar需先下载本地后,再用maven的方式导入
           

手动将本地jar导入到maven库:https://blog.csdn.net/best_luxi/article/details/82349768

jar 下载地址:https://download.csdn.net/download/qq_41712834/11693619

2:编写工具类  AlipayUtil 

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeFastpayRefundQueryModel;
import com.alipay.api.domain.AlipayTradeQueryModel;
import com.alipay.api.domain.AlipayTradeRefundModel;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;
import com.alipay.api.response.AlipayTradeWapPayResponse;

import java.util.Random;

public class AlipayUtil {
    // 商户appid
    private static String APPID = "201903156355555";
    // 私钥 pkcs8格式的
    private static String RSA_PRIVATE_KEY = "MIIEuwIBADANBgkqhkiG9w0BAQEFAASCBKUwggShAgEAAoIBAQDBPf7T9rypQoY9ce7CJmr5B4ATWNPXIySjSRp6WJAh6gr5ZhGj3Vu0FB3IbYMosL6bM7lMe/rHP9GYYU66kRRG6omT2ZjQFH66BAB9w0XqW5g0zL41JjsPup38I4kYoFJqADmVJplOx0InW6ex1D/rpQzycjxQDZYcNstnH1EVOn3OdO/vGMLox/Ta5Ge/TvybShot1xXSWeVbDlrXDaXnEIRaTDs+eBQzN4VnpIQ0Nz89zAqTSQ+aGK5V9YU8XmaIPqI51mv43p4jkPzdpG7L9fwgWw9SmrTuVDb1cPHuWzWCs/uK4PIwYJaIGdHCOe7rRMAkuuueXFIzWW8TWn8rAgMBAAECggEAFiWbygEyOBfWuL4RBhFPG0FfzVfV14dAkLI1JaZ2xlxDa7fl96jL9MSFcU4TxRsUjUcNSpW+9Qz8YYFte3ZbI5GHuPksSVS//WOuBrvVjHl45Tw95GuAQ1o49we/k6H0MA/ciZqF4YB2tXoMqxXPSZt9819iSC52cL9a6nOtYEhDqxmzZu2jcMcdId0wPTWHSNo6+orgwhOLBytmhEuiN9p4iKgU9KwdOrWLFnmFwezObEgqQOOTAEZsQfTrgrIeAeGoJXw3dH4bICGxqxk8pnc7raoeHke+LzIi0JP8s4ymLl3u6+C8+k0f8TrV78rrXuTNMm1AJNyBVUDLtWeG6QKBgQDy0+pyFFHEPr3+nkdAd54ZBGdiLH+Iwn0J2TDAsPexmUKYC8IDZihD1NkdTsgPWv4/8AxieAZaAvQnLrTXxm+vxQP3k/hH7ehiBGGWG+MPJxzJm/8Gn5H4acL7GFUE8yo9kdnQKK5QBYxRfzRoAlZCNOL4Z5n3tGTZv7c+5/u9VQKBgQDLuX9USRqN+HIfphdFQoSqhVlnGWAp8vvepxqn9oAShO2BUJkXeWMkfgo6SdoqOY6aT87FfAdxMLUxjp8SkKHmcfxlNx5bGOq6Sk6Gu+4q7VkBRSRQq3jsRUw29yfPr3I2leE/vN7/c7reiLdcXhM3IZovYOJJxByu0qdNTclKfwKBgQCLVJUdSBNyqx2RT3hKwVfxutknN6kl65KbaAfVSLWXLf1MCNMV6DQKV8MMUfvw86EXRsGUbpIWa8N0CBS0CqRjEoSoNjsr6pKAS0tDOlUaiLK36851GnJDO0wpj1iZMn12Po3gJrd+KvDMglSrqUudSYNCTQ/HVbbYSmz2p12G0QJ/CYyoa0sB86Wxs8oVTSnRDi0yA6Ms3sqFA+rRVQ448qVIfMdKZc9K1msSD6lmkJQiGxmil584uhWOaMRGsJgW/rZZHmV3Bs4kMpdJFwe4Ikr94RFcomtnP6v/5pOvSgzvTZ+470PrMA48tDG0ZqACRpNMpuvjr5GBxrAZJ4Z96QKBgC4S24/NT7t5hCiEhjBc5k9/GxowV0edhcFZ0bX77At409478+i9igqXXfCcNYF2hHt/u4IMTEq4mzK+PqRixT8xvUISih5viWd+za4x9wsQ9UZ3S0Oru5MA0wJHN5nuI6HeSro7vwFw5w2MQtOuTj2LHU1KohgJsNxnzzSJg3pf";
    // 应用公钥
    public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwT3+0/a8qUKGPXHuwiZq+QeAE1jT1yMko0kaeliQIeoK+WYRo91btBQdyG2DKLC+mzO5THv6xz/RmGFOupEURuqJk9mY0BR+ugQAfcNF6luYNMy+NSY7D7qd/COJGKBSagA5lSaZTsdCJ1unsdQ/66UM8nI8UA2WHDbLZx9RFTp9znTv7xjC6Mf02uRnv078m0oaLdcV0lnlWw5a1w2l5xCEWkw7PngUMzeFZ6SENDc/PcwKk0kPmhiuVfWFPF5miD6iOdZr+N6eI5D83aRuy/X8IFsPUpq07lQ29XDx7ls1grP7iuDyMGCWiBnRwjnu60TAJLrrnlxSM1lvE1p/KwIDAQAB";
    // 支付宝公钥
    public static String ALIPAY_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlwRHYOJc8Oa55FfpgJmxmdfuuNrf0pnauJm6mG9AS2rujOlwciQqvSnsYrtXe0Mcq9zhAjRUTNzjKEQja457khUzPnhkXwTkbSX7jDvJMKpTzt2Ah8cR/YR9txD4QlG8OLZc9qLjTQLuw4Pfyuh7fx0GfVQWPfWMMQCmZjkLJITqmRyYeVpa3soFGP/+QEdRvItsgaOXLNKr6e3+cwECxu4xMB8VGBY2F7pFWynzGZRYkqdLrjikKv6CVtMvhIHA3VHhrS5+nm9hLg6inktsX0edps3hABkgH+S4in6Xi1i2M4BfM2VUpDWdrM+JSgmL6QhjhyzKyXjERe95Fcan1wIDAQAB";
    // 签名方式:RSA2
    public static String SIGNTYPE = "RSA2";
    // 请求网关地址
    private static String URL = "https://openapi.alipay.com/gateway.do";
    // 编码
    public static String CHARSET = "UTF-8";
    // 返回格式
    private static String FORMAT = "json";
    // 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    // 注意:异步通知地址必须是外网能访问的
    private static String notify_url = "http://cs:8088/cs/cs/OrderNotifyWeb.active";
    // 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数, 商户可以自定义同步跳转地址
    private static String return_url = "http://cs:8088/cs/cs/OrderReturnWeb.active";

    // 公共请求参数,SDK 公共请求类,包含公共请求参数,以及封装了签名与验签,开发者无需关注签名与验签
    private static AlipayClient client = new DefaultAlipayClient(URL, APPID, RSA_PRIVATE_KEY, FORMAT, CHARSET,
            ALIPAY_PUBLIC_KEY, SIGNTYPE);

    /**
     * alipay.trade.query(统一收单线下交易查询)
     * 详见支付宝支付API:https://docs.open.alipay.com/api_1/alipay.trade.query
     *
     * @param out_trade_no 订单号
     * @return json字符串
     */
    public static String OrderQuery(String out_trade_no) {
        // 创建API对应的request类
        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
        AlipayTradeQueryModel bizModel = new AlipayTradeQueryModel();
        bizModel.setOutTradeNo(out_trade_no);
        request.setBizModel(bizModel);
        try {
            // 通过alipayClient调用API,获得对应的response类
            AlipayTradeQueryResponse response = client.execute(request);
            return response.getBody();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * alipay.trade.refund(统一收单交易退款接口)
     * 详见支付宝支付API:https://docs.open.alipay.com/api_1/alipay.trade.refund
     *
     * @param out_trade_no  订单号
     * @param refund_amount 退款金额(小于等于订单总金额)
     * @return json字符串
     */
    public static String OrderRefund(String out_trade_no, String refund_amount) {
        // 创建API对应的request类
        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
        AlipayTradeRefundModel bizModel = new AlipayTradeRefundModel();
        bizModel.setOutTradeNo(out_trade_no);
        bizModel.setRefundAmount(refund_amount);
        request.setBizModel(bizModel);
        try {
            // 通过alipayClient调用API,获得对应的response类
            AlipayTradeRefundResponse response = client.execute(request);
            return response.getBody();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * alipay.trade.pay(统一收单交易支付接口)
     * 详见支付宝支付API:https://docs.open.alipay.com/api_1/alipay.trade.pay
     *
     * @param out_trade_no 商户订单号
     * @param total_amount 支付总金额
     * @param subject      商品名称
     * @param body         商品描述
     * @return json字符串
     */
    public static String OrderPay(String out_trade_no, String total_amount, String subject, String body) {
        // 商品描述,可空,最大长度128
        if (body.length() > 128) {
            body = body.substring(0, 128);
        }

        // 创建API对应的request类
        AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
        // 封装请求支付信息
        AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
        // 商户订单号,商户网站订单系统中唯一订单号,必填
        model.setOutTradeNo(out_trade_no);
        // 订单名称,必填
        model.setSubject(subject);
        // 付款金额,必填
        model.setTotalAmount(total_amount);
        // 对交易或商品的描述,最大长度128
        model.setBody(body);
        // 超时时间 可空
        model.setTimeoutExpress("2m");
        // 销售产品码 必填
        model.setProductCode("QUICK_WAP_PAY");
        request.setBizModel(model);

        // 设置异步通知地址
        request.setNotifyUrl(notify_url);
        // 设置同步地址
        request.setReturnUrl(return_url);
        try {
            // 通过alipayClient调用API,获得对应的response类
            AlipayTradeWapPayResponse response = client.pageExecute(request);
            return response.getBody();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * alipay.trade.fastpay.refund.query(统一收单交易退款查询)
     * 详见支付宝支付API:https://docs.open.alipay.com/api_1/alipay.trade.fastpay.refund.query
     *
     * @param out_trade_no 订单号
     * @return json字符串
     */
    public static String RefundQuery(String out_trade_no) {
        // 创建API对应的request类
        AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest();
        AlipayTradeFastpayRefundQueryModel bizModel = new AlipayTradeFastpayRefundQueryModel();
        bizModel.setOutTradeNo(out_trade_no);
        bizModel.setOutRequestNo(out_trade_no);
        request.setBizModel(bizModel);
        try {
            // 通过alipayClient调用API,获得对应的response类
            AlipayTradeFastpayRefundQueryResponse response = client.execute(request);
            return response.getBody();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * alipay.fund.trans.toaccount.transfer(单笔转账到支付宝账户接口)
     * 详见支付宝支付API:https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer
     *
     * @param alipayAcco
     *            收款方账户
     * @param money
     *            转账金额
     * @return json字符串
     */
//	public static String TransAccount(String alipayAcco, String money) {
//		AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
//		// 注意:除了用支付宝接口提供的模型以外还可以用json字符串的方式设置接口参数,以下就是使用的json字符串设置参数的方式
//		// AlipayFundTransToaccountTransferModel bizModel=new
//		// AlipayFundTransToaccountTransferModel();
//		Map<String, Object> parMap = new HashMap<String, Object>();
//		// 商户转账唯一订单号。发起转账来源方定义的转账单据ID,用于将转账回执通知给来源方。
//		parMap.put("out_biz_no", OrderId());
//		// 收款方账户类型。可取值:
//		// 1、ALIPAY_USERID:支付宝账号对应的支付宝唯一用户号。以2088开头的16位纯数字组成。
//		// 2、ALIPAY_LOGONID:支付宝登录号,支持邮箱和手机号格式。
//		parMap.put("payee_type", "ALIPAY_LOGONID");
//		// 收款方账户。与payee_type配合使用。付款方和收款方不能是同一个账户。
//		parMap.put("payee_account", alipayAcco);
//		// 转账金额,单位:元。 只支持2位小数,小数点前最大支持13位,金额必须大于等于0.1元。
//		parMap.put("amount", money);
//		// 付款方姓名(最长支持100个英文/50个汉字)。显示在收款方的账单详情页。如果该字段不传,则默认显示付款方的支付宝认证姓名或单位名称。
//		// parMap.put("payer_show_name", "付款方姓名");
//		// 收款方真实姓名(最长支持100个英文/50个汉字)。 如果本参数不为空,则会校验该账户在支付宝登记的实名是否与收款方真实姓名一致。
//		// parMap.put("payee_real_name", "收款方真实姓名");
//		// 转账备注(支持200个英文/100个汉字)。
//		// 当付款方为企业账户,且转账金额达到(大于等于)50000元,remark不能为空。收款方可见,会展示在收款用户的收支详情中。
//		// parMap.put("remark", "转账备注");
//		// 将参数转成JSON字符串设置到请求参数的集合中去
//		request.setBizContent(JSON.toJSONString(parMap));
//		try {
//			// 执行方法
//			AlipayFundTransToaccountTransferResponse response = client.execute(request);
//			return response.getBody();
//		} catch (Exception e) {
//			e.printStackTrace();
//			return null;
//		}
//	}

    /**
     * 生成订单号(日期加6位随机数)
     *
     * @return
     */
    public static String OrderId() {
        Random rand = new Random();
        return (System.currentTimeMillis()) + "" + (rand.nextInt(900000) + 100000);
    }

}
           

已上代码只需要更换 :

商户appid:申请支付宝h5支付成功后获取

java 支付宝 H5支付使用须知:

私钥 :

java 支付宝 H5支付使用须知:

应用公钥

java 支付宝 H5支付使用须知:

支付宝公钥

java 支付宝 H5支付使用须知:

异步通知地址:外网可以访问的链接

java 支付宝 H5支付使用须知:

同步通知页面:外网可以访问的链接

java 支付宝 H5支付使用须知:

3:调用代码:

package com.vrv.Govern.controller;

import com.alipay.api.internal.util.AlipaySignature;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.vrv.Govern.util.DateUtils;
import com.vrv.Govern.util.PrintWriterUtils;
import com.vrv.Govern.util.ResultEntitylayui;
import com.vrv.Govern.util.gj.AlipayUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;


/**
 * @Description: ckx
 * @Author: Mr.chenkexu
 * @Date: 2019.5.27
 */

@Controller
@RequestMapping("/csail")
public class csailcontroller extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @RequestMapping("/index")
    public String index() {
        return "cssail/index";
    }

    @RequestMapping("/pay_result")
    public String pay_result() {
        return "cs/pay_result";
    }

    @RequestMapping(value = "payment", produces = "application/json;charset=utf-8")
    @ResponseBody
    public void listBase_Dataitemdetail(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Gson gson = new GsonBuilder().serializeNulls().setDateFormat(DateUtils.DateFormat4).create();
        ResultEntitylayui mResultEntity = new ResultEntitylayui();
        req.setCharacterEncoding(AlipayUtil.CHARSET);
        String body = req.getParameter("body");
        String subject = req.getParameter("subject");
        String money = req.getParameter("money");

        subject = new String(subject.getBytes("ISO-8859-1"), AlipayUtil.CHARSET);
        String orderPay = AlipayUtil.OrderPay(AlipayUtil.OrderId(), money, subject, body);
        //直接将支付宝返回的完整的表单html输出到页面
        resp.setContentType("text/html;charset=" + AlipayUtil.CHARSET);
        mResultEntity.setData(orderPay);
        PrintWriterUtils.printWriter(resp, gson.toJson(mResultEntity));
    }


    @RequestMapping(value = "OrderNotifyWeb", produces = "application/json;charset=utf-8")
    @ResponseBody
    public void OrderNotifyWeb(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("支付宝付款异步通知===================================");
        PrintWriter pw = null;
        try {
            pw = resp.getWriter();
            //获取支付宝POST过来反馈信息
            Map<String, String> params = new HashMap<String, String>();
            Map<String, String[]> requestParams = req.getParameterMap();
            for (Iterator<String> 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] + ",";
                }
                //乱码解决,这段代码在出现乱码时使用
                valueStr = new String(valueStr.getBytes("ISO-8859-1"), AlipayUtil.CHARSET);
                params.put(name, valueStr);
            }
            //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)

            //交易状态
            String trade_status = new String(req.getParameter("trade_status").getBytes("ISO-8859-1"), AlipayUtil.CHARSET);

            //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//
            //计算得出通知验证结果
            //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
            //支付验证
            boolean verify_result = AlipaySignature.rsaCheckV1(params, AlipayUtil.ALIPAY_KEY, AlipayUtil.CHARSET, AlipayUtil.SIGNTYPE);
            if (verify_result) {//验证成功
                //请在这里加上商户的业务逻辑程序代码

                //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

                if (trade_status.equals("TRADE_FINISHED")) {
                    //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                    //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                    //如果有做过处理,不执行商户的业务程序

                    //注意:
                    //如果签约的是可退款协议,退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
                    //如果没有签约可退款协议,那么付款完成后,支付宝系统发送该交易状态通知。
                } else if (trade_status.equals("TRADE_SUCCESS")) {
                    //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                    //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                    //如果有做过处理,不执行商户的业务程序

                    //注意:
                    //如果签约的是可退款协议,那么付款完成后,支付宝系统发送该交易状态通知。
                }

                //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
                System.out.println("验证成功!");
                pw.flush();
                pw.println("success");
            } else {//验证失败
                System.out.println("验证失败!");
                pw.flush();
                pw.println("fail");
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("【pw=" + pw + "】验证失败,出现异常:" + e.getMessage());
            try {
                pw = resp.getWriter();
                if (pw != null) {
                    pw.flush();
                    pw.println("fail");
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }

    @RequestMapping(value = "OrderReturnWeb", produces = "application/json;charset=utf-8")
    @ResponseBody
    public void OrderReturnWeb(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("支付宝付款同步通知===================================");
        try {
            //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)
            //获取支付宝GET过来反馈信息
            Map<String, String> params = new HashMap<String, String>();
            Map<String, String[]> requestParams = req.getParameterMap();
            for (Iterator<String> 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] + ",";
                }
                //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
                valueStr = new String(valueStr.getBytes("ISO-8859-1"), AlipayUtil.CHARSET);
                params.put(name, valueStr);
            }
            //计算得出通知验证结果
            //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
            boolean verify_result = AlipaySignature.rsaCheckV1(params, AlipayUtil.ALIPAY_KEY, AlipayUtil.CHARSET, AlipayUtil.SIGNTYPE);
            //设置编码格式
            resp.setCharacterEncoding(AlipayUtil.CHARSET);
            if (verify_result) {//验证成功
                //请在这里加上商户的业务逻辑程序代码
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
                String string = dateFormat.format(new Date());

                //该页面可做页面美工编辑

                resp.sendRedirect("../App_home/index.active#/freeRecode?result=1&ID_number="+params.get("out_trade_no")+"&Lunar_month="+string+"&Money="+params.get("total_amount")+"&CreateDate="+params.get("timestamp"));
                //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
            } else {
                //该页面可做页面美工编辑
                resp.sendRedirect("../App_home/index.active#/freeRecode?result=0");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
           

特别说明:

java 支付宝 H5支付使用须知:

这两个工具类是调用及返回json数据的工具类,在使用时可换为自己使用的方式调用

java 支付宝 H5支付使用须知:

此工具类为实体类,用于封装数据,使用时也可换为自己使用的方式,内容示例,

java 支付宝 H5支付使用须知:

其他的jar包找不到,评论,提供maven(额.主要是懒得的一个一个的找了....)

java 支付宝 H5支付使用须知:

到这支付宝的java代码完结;

编写一个页面,

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" href="../common/js/layui/css/layui.css" target="_blank" rel="external nofollow" >
</head>
<body>
<div class="formbox">
    <div class="layui-form">
        <div class="layui-formzi-item ">
            <label class="layui-form-label">
                商品名称<span class="start">*</span>
            </label>
            <div class="layui-input-block">
                <input type="text" name="subject" lay-verify="required" autocomplete="off" class="layui-input"
                       value="cs">
            </div>
        </div>
        <div class="layui-formzi-item ">
            <label class="layui-form-label">
                商品说明<span class="start">*</span>
            </label>
            <div class="layui-input-block">
                <input type="text" name="body" lay-verify="required" autocomplete="off" class="layui-input" value="cs">
            </div>
        </div>
        <div class="layui-formzi-item ">
            <label class="layui-form-label">
                支付金额<span class="start">*</span>
            </label>
            <div class="layui-input-block">
                <input type="number" name="money" lay-verify="required" autocomplete="off" class="layui-input"
                       value="0.01">
            </div>
        </div>
        <div class="btns">
            <button class="layui-btn layui-btn-primary" onclick="addandupd()">立即提交</button>
        </div>
    </div>
</div>
<div id="ail">

</div>
</body>
<script src="../common/js/jquery-3.3.1.min.js"></script>
<script src="../common/js/layui/layui.all.js"></script>
<script>
    function addandupd() {
        var subject = $("input[name='subject']").val()
        var body = $("input[name='body']").val()
        var money = $("input[name='money']").val()

        $.ajax({
            url: '../csail/payment.active',
            data: {subject: subject, body: body, money: money},
            dataType: 'json',
            type: 'post',
            success: function (data) {
                console.log(data.data);
                $("#ail").html(data.data)
            }
        })

    }
</script>
</html>
           

这个用layui写jsp页面,只是一个form表单的提交,使用自行替换

访问这个页面:

java 支付宝 H5支付使用须知:

点击立即提交:

java 支付宝 H5支付使用须知:

点击继续支付,或等待继续跳转,

然后一步一步 ,手机号 >> 输密码等等   

java 支付宝 H5支付使用须知:

最后会有支付成功页面 ,过几秒会跳转到之前绑定的支付成功的跳转页面

ps:不清楚的可私聊哦,

继续阅读