目录
使用须知:
支付宝的支付较为成熟,开发较为简单,
需先在支付宝中开通支付宝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支付成功后获取
私钥 :
应用公钥
支付宝公钥
异步通知地址:外网可以访问的链接
同步通知页面:外网可以访问的链接
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();
}
}
}
特别说明:
这两个工具类是调用及返回json数据的工具类,在使用时可换为自己使用的方式调用
此工具类为实体类,用于封装数据,使用时也可换为自己使用的方式,内容示例,
其他的jar包找不到,评论,提供maven(额.主要是懒得的一个一个的找了....)
到这支付宝的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">
</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表单的提交,使用自行替换
访问这个页面:
点击立即提交:
点击继续支付,或等待继续跳转,
然后一步一步 ,手机号 >> 输密码等等
最后会有支付成功页面 ,过几秒会跳转到之前绑定的支付成功的跳转页面
ps:不清楚的可私聊哦,