支付宝支付的开发步骤

准备工作

支付宝账号,登录蚂蚁金服开放平台
官网:(open.alipay.com)
条件:必须在开放平台完成实名认证才能使用开放平台服务

登录账号创建沙箱

生成应用唯一标识(APPID)
创建登记应用
提交审核

配置自定义密匙

需要安装支付宝官方加密工具插件:
官方下载:https://opendocs.alipay.com/common/02kipk
小编下载过的安装包:https://download.csdn.net/download/m0_61311086/85646469

点击生成密匙,赋值公匙,用生成的公匙,获取支付的公匙
(注意:每次打开生成的公匙不一样,需要重新换取支付宝公匙,在功能实现前不要退出助手,)




项目引入pom依赖

pom.xml

   <dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.31.7.ALL</version></dependency>

编写配置文件

applicationContext-pay.xml

!-- 支付宝支付 -->
<bean class="cn.itrip.trade.controller.AlipayConfig"><!--       应用id--><property name="appID" value="应用id"/><!--      私钥--><property name="rsaPrivateKey" value="私匙"/><!---支付完成的异步通知地址--><property name="notifyUrl" value=""/><!-- 支付后返回--><property name="returnUrl" value=""/>-<!--       支付宝网关--><property name="url" value="https://openapi.alipaydev.com/gateway.do"/><property name="charset" value="UTF-8"/><property name="format" value="json"/><!--     支付宝公钥--><property name="alipayPublicKey" value="支付宝公匙"/><property name="logPath" value="/logs"/><!--      密钥长度--><property name="signType" value="RSA2"/><!--成功路径--><property name="paymentSuccessUrl" value=""/><!--错误路径--><property name="paymentFailureUrl" value=""/>
</bean>

引入官方文档jsp页面

官方Demo:https://docs.open.alipay.com/270/106291
小编下载的:https://download.csdn.net/download/m0_61311086/85647309

修改index页面提交路径

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>支付宝电脑网站支付</title>
<style>
* {margin: 0;padding: 0;
}ul, ol {list-style: none;
}body {font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande",sans-serif;
}.tab-head {margin-left: 120px;margin-bottom: 10px;
}.tab-content {clear: left;display: none;
}h2 {border-bottom: solid #02aaf1 2px;width: 200px;height: 25px;margin: 0;float: left;text-align: center;font-size: 16px;
}.selected {color: #FFFFFF;background-color: #02aaf1;
}.show {clear: left;display: block;
}.hidden {display: none;
}.new-btn-login-sp {padding: 1px;display: inline-block;width: 75%;
}.new-btn-login {background-color: #02aaf1;color: #FFFFFF;font-weight: bold;border: none;width: 100%;height: 30px;border-radius: 5px;font-size: 16px;
}#main {width: 100%;margin: 0 auto;font-size: 14px;
}.red-star {color: #f00;width: 10px;display: inline-block;
}.null-star {color: #fff;
}.content {margin-top: 5px;
}.content dt {width: 100px;display: inline-block;float: left;margin-left: 20px;color: #666;font-size: 13px;margin-top: 8px;
}.content dd {margin-left: 120px;margin-bottom: 5px;
}.content dd input {width: 85%;height: 28px;border: 0;-webkit-border-radius: 0;-webkit-appearance: none;
}#foot {margin-top: 10px;position: absolute;bottom: 15px;width: 100%;
}.foot-ul {width: 100%;
}.foot-ul li {width: 100%;text-align: center;color: #666;
}.note-help {color: #999999;font-size: 12px;line-height: 130%;margin-top: 5px;width: 100%;display: block;
}#btn-dd {margin: 20px;text-align: center;
}.foot-ul {width: 100%;
}.one_line {display: block;height: 1px;border: 0;border-top: 1px solid #eeeeee;width: 100%;margin-left: 20px;
}.am-header {display: -webkit-box;display: -ms-flexbox;display: box;width: 100%;position: relative;padding: 7px 0;-webkit-box-sizing: border-box;-ms-box-sizing: border-box;box-sizing: border-box;background: #1D222D;height: 50px;text-align: center;-webkit-box-pack: center;-ms-flex-pack: center;box-pack: center;-webkit-box-align: center;-ms-flex-align: center;box-align: center;
}.am-header h1 {-webkit-box-flex: 1;-ms-flex: 1;box-flex: 1;line-height: 18px;text-align: center;font-size: 18px;font-weight: 300;color: #fff;
}
</style>
</head>
<body text=#000000 bgColor="#ffffff" leftMargin=0 topMargin=4><header class="am-header"><h1>支付宝电脑网站支付体验入口页</h1></header><div id="main"><div id="tabhead" class="tab-head"><h2 id="tab1" class="selected" name="tab">付 款</h2><h2 id="tab2" name="tab">交 易 查 询</h2><h2 id="tab3" name="tab">退 款</h2><h2 id="tab4" name="tab">退 款 查 询</h2><h2 id="tab5" name="tab">交 易 关 闭</h2></div><form name=alipayment action="自己的api接口" method=posttarget="_blank"><div id="body1" class="show" name="divcontent"><dl class="content"><dt>商户订单号 :</dt><dd><input id="WIDout_trade_no" name="WIDout_trade_no" /></dd><hr class="one_line"><dt>订单名称 :</dt><dd><input id="WIDsubject" name="WIDsubject" /></dd><hr class="one_line"><dt>付款金额 :</dt><dd><input id="WIDtotal_amount" name="WIDtotal_amount" /></dd><hr class="one_line"><dt>商品描述:</dt><dd><input id="WIDbody" name="WIDbody" /></dd><hr class="one_line"><dt></dt><dd id="btn-dd"><span class="new-btn-login-sp"><button class="new-btn-login" type="submit"style="text-align: center;">付 款</button></span> <span class="note-help">如果您点击“付款”按钮,即表示您同意该次的执行操作。</span></dd></dl></div></form><form name=tradequery action=alipay.trade.query.jsp method=posttarget="_blank"><div id="body2" class="tab-content" name="divcontent"><dl class="content"><dt>商户订单号 :</dt><dd><input id="WIDTQout_trade_no" name="WIDTQout_trade_no" /></dd><hr class="one_line"><dt>支付宝交易号 :</dt><dd><input id="WIDTQtrade_no" name="WIDTQtrade_no" /></dd><hr class="one_line"><dt></dt><dd id="btn-dd"><span class="new-btn-login-sp"><button class="new-btn-login" type="submit"style="text-align: center;">交 易 查 询</button></span> <span class="note-help">商户订单号与支付宝交易号二选一,如果您点击“交易查询”按钮,即表示您同意该次的执行操作。</span></dd></dl></div></form><form name=traderefund action=alipay.trade.refund.jsp method=posttarget="_blank"><div id="body3" class="tab-content" name="divcontent"><dl class="content"><dt>商户订单号 :</dt><dd><input id="WIDTRout_trade_no" name="WIDTRout_trade_no" /></dd><hr class="one_line"><dt>支付宝交易号 :</dt><dd><input id="WIDTRtrade_no" name="WIDTRtrade_no" /></dd><hr class="one_line"><dt>退款金额 :</dt><dd><input id="WIDTRrefund_amount" name="WIDTRrefund_amount" /></dd><hr class="one_line"><dt>退款原因 :</dt><dd><input id="WIDTRrefund_reason" name="WIDTRrefund_reason" /></dd><hr class="one_line"><dt>退款请求号 :</dt><dd><input id="WIDTRout_request_no" name="WIDTRout_request_no" /></dd><hr class="one_line"><dt></dt><dd id="btn-dd"><span class="new-btn-login-sp"><button class="new-btn-login" type="submit"style="text-align: center;">退 款</button></span> <span class="note-help">商户订单号与支付宝交易号二选一,如果您点击“退款”按钮,即表示您同意该次的执行操作。</span></dd></dl></div></form><form name=traderefundqueryaction=alipay.trade.fastpay.refund.query.jsp method=posttarget="_blank"><div id="body4" class="tab-content" name="divcontent"><dl class="content"><dt>商户订单号 :</dt><dd><input id="WIDRQout_trade_no" name="WIDRQout_trade_no" /></dd><hr class="one_line"><dt>支付宝交易号 :</dt><dd><input id="WIDRQtrade_no" name="WIDRQtrade_no" /></dd><hr class="one_line"><dt>退款请求号 :</dt><dd><input id="WIDRQout_request_no" name="WIDRQout_request_no" /></dd><hr class="one_line"><dt></dt><dd id="btn-dd"><span class="new-btn-login-sp"><button class="new-btn-login" type="submit"style="text-align: center;">退 款 查 询</button></span> <span class="note-help">商户订单号与支付宝交易号二选一,如果您点击“退款查询”按钮,即表示您同意该次的执行操作。</span></dd></dl></div></form><form name=tradeclose action=alipay.trade.close.jsp method=posttarget="_blank"><div id="body5" class="tab-content" name="divcontent"><dl class="content"><dt>商户订单号 :</dt><dd><input id="WIDTCout_trade_no" name="WIDTCout_trade_no" /></dd><hr class="one_line"><dt>支付宝交易号 :</dt><dd><input id="WIDTCtrade_no" name="WIDTCtrade_no" /></dd><hr class="one_line"><dt></dt><dd id="btn-dd"><span class="new-btn-login-sp"><button class="new-btn-login" type="submit"style="text-align: center;">交 易 关 闭</button></span> <span class="note-help">商户订单号与支付宝交易号二选一,如果您点击“交易关闭”按钮,即表示您同意该次的执行操作。</span></dd></dl></div></form><div id="foot"><ul class="foot-ul"><li>支付宝版权所有 2015-2018 ALIPAY.COM</li></ul></div></div>
</body>
<script language="javascript">var tabs = document.getElementsByName('tab');var contents = document.getElementsByName('divcontent');(function changeTab(tab) {for(var i = 0, len = tabs.length; i < len; i++) {tabs[i].onmouseover = showTab;}})();function showTab() {for(var i = 0, len = tabs.length; i < len; i++) {if(tabs[i] === this) {tabs[i].className = 'selected';contents[i].className = 'show';} else {tabs[i].className = '';contents[i].className = 'tab-content';}}}function GetDateNow() {var vNow = new Date();var sNow = "";sNow += String(vNow.getFullYear());sNow += String(vNow.getMonth() + 1);sNow += String(vNow.getDate());sNow += String(vNow.getHours());sNow += String(vNow.getMinutes());sNow += String(vNow.getSeconds());sNow += String(vNow.getMilliseconds());document.getElementById("WIDout_trade_no").value =  sNow;document.getElementById("WIDsubject").value = "测试";document.getElementById("WIDtotal_amount").value = "0.01";}GetDateNow();
</script>
</html>

引入AlipayConfig类

根据业务编写controller

@RestController
public class PayController {@Resourceprivate AlipayConfig alipayConfig;@PostMapping("/api/pay")public void orderPay(String WIDout_trade_no,String WIDsubject,String WIDtotal_amount,String WIDbody,HttpServletResponse response) throws AlipayApiException, IOException {//获得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.getUrl(),alipayConfig.getAppID(),alipayConfig.getRsaPrivateKey(),"json",alipayConfig.getCharset(),alipayConfig.getAlipayPublicKey(),alipayConfig.getSignType());//设置请求参数AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl(alipayConfig.getReturnUrl());alipayRequest.setNotifyUrl(alipayConfig.getNotifyUrl());//发向网关的JSONalipayRequest.setBizContent("{\"out_trade_no\":\""+ WIDout_trade_no +"\","+ "\"total_amount\":\""+ WIDtotal_amount +"\","+ "\"subject\":\""+ WIDsubject +"\","+ "\"body\":\""+ WIDbody +"\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");//请求 并返回支付宝网关返回的登录表单String result = alipayClient.pageExecute(alipayRequest).getBody();//将登陆的表单响应给用户response.setContentType("text/html;charset=UTF-8");response.getWriter().write(result);response.getWriter().close();}/*** 处理同步通知请求* @param request* @param response* @throws Exception*/@GetMapping("/api/returnUrl")public void returnUrl(HttpServletRequest request, HttpServletResponse response) throws Exception{//获取支付宝GET过来反馈信息Map<String, String> params = this.getParams(request);//调用SDK验证签名    公匙  字符编码  加签方式boolean signVerified = AlipaySignature.rsaCheckV1(params, alipayConfig.getAlipayPublicKey(), alipayConfig.getCharset(), alipayConfig.getSignType());if (signVerified) {//商户订单号String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");//支付宝交易号String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");//测试异步通知if (!orderService.processed(out_trade_no)) {orderService.paySuccess(out_trade_no, 1, trade_no);//返回支付成功页面response.sendRedirect("http://localhost:8083/paymentSuccessUrl.jsp");}//返回支付成功页面//response.sendRedirect("http://localhost:8083/paymentSuccessUrl.jsp");//response.getWriter().close();}else {response.setContentType("text/html;charset=UTF-8");response.getWriter().write("验签失败");response.getWriter().close();}}/*** 支付宝服务器异步通知页面* @param response* @param request* @throws UnsupportedEncodingException* @throws AlipayApiException*/@PostMapping("/api/notifyUrl")public void notifyUrl(HttpServletResponse response, HttpServletRequest request) throws Exception {//获取支付宝POST过来反馈信息Map<String, String> params = this.getParams(request);//调用SDK验证签名boolean signVerified = AlipaySignature.rsaCheckV1(params, alipayConfig.getAlipayPublicKey(), alipayConfig.getCharset(), alipayConfig.getSignType());if (signVerified) {//商户订单号String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");//支付宝交易号String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");//交易状态String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");if(trade_status.equals("TRADE_FINISHED")){//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//如果有做过处理,不执行商户的业务程序//注意://退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知if (!orderService.processed(out_trade_no)) {orderService.paySuccess(out_trade_no, 1, trade_no);}}else if (trade_status.equals("TRADE_SUCCESS")){//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//如果有做过处理,不执行商户的业务程序//注意://付款完成后,支付宝系统发送该交易状态通知if (!orderService.processed(out_trade_no)) {orderService.paySuccess(out_trade_no, 1, trade_no);}}//返回支付成功页面}else{response.setContentType("text/html;charset=UTF-8");response.getWriter().write("验签失败");response.getWriter().close();}}/*** 验签封装方法* @param request* @return* @throws Exception*/public Map<String , String> getParams(HttpServletRequest request) throws Exception{//获取支付宝GET过来反馈信息Map<String,String> params = new HashMap<String,String>();Map<String,String[]> requestParams = request.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"), "utf-8");params.put(name, valueStr);}return params;}}
}

根据需求编写订单处理接口实现更新库存

orderService

/*** 订单支付处理接口*/
public interface OrderService {/*** 加载酒店订单** @return* @throws Exception*/ItripHotelOrder loadItripHotelOrder(String orderNo) throws Exception;/*** 判断该订单是否已被处理过(被更新为已支付状态)** @param orderNo* @return* @throws Exception*/public boolean processed(String orderNo) throws Exception;/*** 支付成功** @param orderNo 订单编号* @param payType 支付方式:1:支付宝 2:微信 3:到店付* @param tradeNo 支付平台返回的交易码* @throws Exception*/void paySuccess(String orderNo, int payType, String tradeNo) throws Exception;/*** 支付失败** @param orderNo 订单编号* @param payType 支付方式:1:支付宝 2:微信 3:到店付* @param tradeNo 支付平台返回的交易码* @throws Exception*/void payFailed(String orderNo, int payType, String tradeNo) throws Exception;
}

orderServiceImpl

package cn.itrip.trade.service;import java.io.BufferedReader;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;import cn.itrip.beans.pojo.ItripHotelTempStore;
import cn.itrip.dao.hotelorder.ItripHotelOrderMapper;
import cn.itrip.dao.hoteltempstore.ItripHotelTempStoreMapper;
import cn.itrip.dao.tradeends.ItripTradeEndsMapper;
import com.alipay.api.internal.parser.json.ObjectJsonParser;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import cn.itrip.beans.pojo.ItripHotelOrder;
import cn.itrip.beans.pojo.ItripTradeEnds;
import cn.itrip.common.EmptyUtils;/*** 订单支付处理实现**/
@Service("orderService")
public class OrderServiceImpl implements OrderService {private Logger logger=Logger.getLogger(OrderServiceImpl.class);@Resourceprivate ItripHotelOrderMapper itripHotelOrderMapper;@Resourceprivate ItripTradeEndsMapper itripTradeEndsMapper;@Resourceprivate ItripHotelTempStoreMapper itripHotelTempStoreMapper;@Overridepublic ItripHotelOrder loadItripHotelOrder(String orderNo) throws Exception {logger.debug("加载订单:"+orderNo);Map<String, Object> param=new HashMap();param.put("orderNo", orderNo);List<ItripHotelOrder> orders=itripHotelOrderMapper.getItripHotelOrderListByMap(param);if(orders.size()==1){return orders.get(0);}else{return null;}}@Overridepublic void paySuccess(String orderNo, int payType,String tradeNo) throws Exception {//更新订单状态、支付宝交易号logger.debug("订单支付成功:"+orderNo);ItripHotelOrder itripHotelOrder=this.loadItripHotelOrder(orderNo);itripHotelOrder.setOrderStatus(2);//支付成功itripHotelOrder.setPayType(payType);itripHotelOrder.setTradeNo(tradeNo);//交易号(如支付宝交易号)itripHotelOrderMapper.updateItripHotelOrder(itripHotelOrder);//更新库存ValidateRoomStoreVO validateRoomStoreVO = new ValidateRoomStoreVO ();validateRoomStoreVO.setHotelId(itripHotelOrder.getHotelId());validateRoomStoreVO.setRoomId(itripHotelOrder.getRoomId());validateRoomStoreVO.setCheckInDate(itripHotelOrder.getCheckInDate());validateRoomStoreVO.setCheckOutDate(itripHotelOrder.getCheckOutDate());validateRoomStoreVO.setCount(itripHotelOrder.getCount());this.scanTradeEnd(validateRoomStoreVO);//增加订单后续待处理记录ItripTradeEnds itripTradeEnds=new ItripTradeEnds();itripTradeEnds.setId(itripHotelOrder.getId());itripTradeEnds.setOrderNo(itripHotelOrder.getOrderNo());//标识字段 0.未处理 1.处理中itripTradeEnds.setFlag(1);itripTradeEndsMapper.insertItripTradeEnds(itripTradeEnds);//通知业务模块后续处理  更新库存//String url="http://localhost:8082/biz/api/hotelorder/scanTradeEnd";//this.sendGet(url,"orderNo="+orderNo);}public Dto scanTradeEnd(ValidateRoomStoreVO validateRoomStoreVO) throws Exception {Map<String, Object> param = new HashMap();//更改为处理中  标识字段(默认0:未处理;1:处理中)//update itrip_trade_ends set flag=#{flag} where flag=#{oldFlag}param.put("flag", 1);param.put("oldFlag", 0);itripTradeEndsMapper.updateItripTradeEnds(param);//根据条件获取中间表信息List<ItripTradeEnds> tradeEndsList = itripTradeEndsMapper.getItripTradeEndsListByMap(param);if (EmptyUtils.isNotEmpty(tradeEndsList)) {for (ItripTradeEnds ends : tradeEndsList) {Map<String, Object> orderParam = new HashMap<>();orderParam.put("orderNo", ends.getOrderNo());//根据订单号查询订单信息List<ItripHotelOrder> orderList = itripHotelOrderMapper.getItripHotelOrderListByMap(orderParam);for (ItripHotelOrder order : orderList) {Map<String, Object> roomStoreMap = new HashMap<>();roomStoreMap.put("startTime", order.getCheckInDate());roomStoreMap.put("endTime", order.getCheckOutDate());roomStoreMap.put("count", order.getCount());roomStoreMap.put("roomId", order.getRoomId());// 根据条件更新库存itripHotelTempStoreMapper.updateRoomStore(roomStoreMap);}}param.put("flag", 2);param.put("oldFlag", 1);//更新中间表信息itripTradeEndsMapper.updateItripTradeEnds(param);return DtoUtil.returnSuccess();} else {return DtoUtil.returnFail("100535", "没有查询到相应记录");}}@Overridepublic void payFailed(String orderNo, int payType,String tradeNo) throws Exception {// TODO Auto-generated method stublogger.debug("订单支付失败:"+orderNo);ItripHotelOrder itripHotelOrder=this.loadItripHotelOrder(orderNo);itripHotelOrder.setOrderStatus(1);//支付状态:已取消itripHotelOrder.setPayType(payType);itripHotelOrder.setTradeNo(tradeNo);//交易号(如支付宝交易号)itripHotelOrderMapper.updateItripHotelOrder(itripHotelOrder);}@Overridepublic boolean processed(String orderNo) throws Exception {//根据订单号查询数据库中的订单对象ItripHotelOrder itripHotelOrder=this.loadItripHotelOrder(orderNo);if (EmptyUtils.isNotEmpty(itripHotelOrder)) {//判断订单的交易号和订单的状态if (EmptyUtils.isNotEmpty(itripHotelOrder.getTradeNo()) && itripHotelOrder.getOrderStatus() > 1) {return true;}}return false;}/*** 向指定URL发送GET方法的请求*/public void sendGet(String url, String param) {String result = "";BufferedReader in = null;try {String urlNameString = url + "?" + param;URL realUrl = new URL(urlNameString);// 打开和URL之间的连接URLConnection connection=realUrl.openConnection();// 设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 建立实际的连接connection.connect();System.out.println(connection.getContentLength());} catch (Exception e) {logger.error("发送GET请求出现异常!" + e);e.printStackTrace();}}
}

爱旅行实现订单支付功能(测试阶段)相关推荐

  1. 订单支付功能对接支付宝支付接口

    求助:这张GIF的效果动图整了一个多小时,没找到好的编辑软件,都太难用了.如果恰巧看到这篇文章有好的GIF编辑或者录制软件,请推荐一 个!万谢 订单支付功能是购物的最后一个环节,本文将通过对接支付宝的 ...

  2. Flask爱家租房--订单支付(支付过程)

    文章目录 0.支付流程 1. 重点总结 2.后端代码 3.前端js 4.前端html 0.支付流程 1. 重点总结 1)用户进入"我的订单"页面,点击"去支付" ...

  3. 爱旅行项目中完成微信支付

    1.配置微信支付的部分请求参数 <!-- 微信手机网站支付 --><bean class="cn.itrip.trade.config.WXPayConfig" ...

  4. Springboot实现支付宝沙箱支付功能

    我们在做开发时很多时候会涉及到支付功能,常见会对接支付宝和微信支付,本文将对JAVA对接支付宝进行详细的讲解. 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳 ...

  5. 订单支付和评论——基于Django框架的天天生鲜电商网站项目系列博客(十五)

    系列文章目录 需求分析--基于Django框架的天天生鲜电商网站项目系列博客(一) 网站框架搭建--基于Django框架的天天生鲜电商网站项目系列博客(二) 用户注册模块--基于Django框架的天天 ...

  6. 云炬Android开发笔记 13购物车,订单,支付功能开发(包含支付宝支付和微信支付)

    阅读目录 1.购物车UI编写 1.1 购物车布局  1.2 recycleView中的item的布局 2. 购物车数据结构分析.解析与转化 2.1 解析的数据 2.2 数据的转化 2.3 数据适配器的 ...

  7. Java Web 网络商城案例演示十五 订单详情功能(提交订单支付界面)

    订单详情功能(提交订单支付界面) 原理分析 步骤实现: 1.准备工作:order_list.jsp当中修改链接 提交当前订单编号 <a href="${pageContext.requ ...

  8. 【javaWeb微服务架构项目——乐优商城day15】——会调用订单系统接口,实现订单结算功能,实现微信支付功能

    0.学习目标 会调用订单系统接口 实现订单结算功能 实现微信支付功能 源码笔记及资料: 链接:https://pan.baidu.com/s/1_opfL63P1pzH3rzLnbFiNw 提取码:v ...

  9. Java电商平台之订单功能和支付功能实现

    下单支付流程 1.选择商品添加至购物车. 2.点击支付,创建订单. 3.将订单写入数据库. 4.同时扣减库存,将订单数据同时同步到redis,并且设置过期时间. 5.取消订单(超时未支付),退回商品库 ...

最新文章

  1. zabbix服务器没有.pid文件,PID file /run/zabbix/zabbix_server.pid not readable (yet?) after start. 报错解决...
  2. python英语翻译-python制作英语翻译小工具代码实例
  3. js把word转html在线预览,js实现word转换为html
  4. ajax原理及其优缺点
  5. mysql中char和text的区别_mysql中text与varchar与char的区别
  6. MySQL数据库引擎详解
  7. java标签组件命名_Java——标签组件:JLabel
  8. java下文_java实现文件下载的两种方式
  9. css 改变输入框光标颜色
  10. d3 和echart_D3.js与echart.js的应用场景
  11. xml-treeview转换
  12. HttpInvoker-----客户端实现
  13. docker container DNS配置介绍和源码分析
  14. 统计处理包Statsmodels: statistics in python
  15. 浪潮工程师窃取公司CPU、硬盘在咸鱼挂卖被阿里发现,判处有期徒刑3年3个月...
  16. 科大讯飞语音识别测试
  17. 万字长文入门 Redis 命令、事务、锁、订阅、性能测试
  18. 中值滤波器的matlab实现
  19. Greenplum单机版部署
  20. 如何正确在CSDN问答进行提问

热门文章

  1. openssl之RSA相关函数
  2. 聊一聊负载均衡SLB的DDoS防护
  3. 关于沁恒CH32V203F6P6烧录官方例程无法工作
  4. 学会KPT工作汇报方法
  5. 100个暗黑系哑光效果lr/acr预设(含预设导入教程)
  6. 6.2 Birkhoff遍历定理(Durrett)答案
  7. 正在做 ESP32 , STM32 , 树莓派 RaspberryPi 的创客工具
  8. c语言drawtext的用法,老师请问DRAWTEXT-文华财经知识 -程序化交易(CXH99.COM)
  9. Java对接阿里云图片审核(鉴黄、暴恐涉政、广告等等)
  10. 内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档