暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解+完整代码)

java代码 2022-01-02
138

使ssmssm

https://github.com/OUYANGSIHAI/sihai-maven-ssm-alipay

1.demo

https://docs.open.alipay.com/270/106291/

2.eclipse

readme.txt

JavaJSP

3.AlipayConfig

(1) 

https://open.alipay.com 

(2) app_idgatewayUrl

appIDdev

(3) 

2048

<span data-raw-text="" "="" data-textnode-index-1641082167928="20" data-index-1641082167928="536" class="character">"<span data-raw-text="" "="" data-textnode-index-1641082167928="20" data-index-1641082167928="543" class="character">"

,<span data-raw-text="" "="" data-textnode-index-1641082167928="21" data-index-1641082167928="560" class="character">"<span data-raw-text="" "="" data-textnode-index-1641082167928="21" data-index-1641082167928="569" class="character">"

2048.txt<span data-raw-text="" "="" data-textnode-index-1641082167928="22" data-index-1641082167928="592" class="character">"<span data-raw-text="" "="" data-textnode-index-1641082167928="22" data-index-1641082167928="599" class="character">"

  • merchant_private_key

     2048.txt merchant_private_key

  • alipay_public_key

alipay_public_key

(4) notify_url

IP:

http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp

(5) return_url

http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp

4.

<span data-raw-text="" "="" data-textnode-index-1641082167928="35" data-index-1641082167928="1025" class="character">"<span data-raw-text="" "="" data-textnode-index-1641082167928="35" data-index-1641082167928="1029" class="character">"

使线appid



ssm

1

  • spring+springmvc+mybatis

  • mysql

  • tomcat9.0

  • jdk9idea

ssm

2

  • user

  • order

  • flow

  • product

drop table if exists user;

/*==============================================================*/
/* Table: user                    */
/*==============================================================*/
create table user
(
   id                   varchar(20) not null,
   username             varchar(128),
   sex                  varchar(20),
   primary key (id)
);

alter table user comment '';


CREATE TABLE `flow` (
  `id` varchar(20) NOT NULL,
  `flow_num` varchar(20) DEFAULT NULL COMMENT '',
  `order_num` varchar(20) DEFAULT NULL COMMENT '',
  `product_id` varchar(20) DEFAULT NULL COMMENT 'ID',
  `paid_amount` varchar(11) DEFAULT NULL COMMENT '',
  `paid_method` int(11) DEFAULT NULL COMMENT '\r\n 1\r\n 2',
  `buy_counts` int(11) DEFAULT NULL COMMENT '',
  `create_time` datetime DEFAULT NULL COMMENT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='';


CREATE TABLE `orders` (
  `id` varchar(20) NOT NULL,
  `order_num` varchar(20) DEFAULT NULL COMMENT '',
  `order_status` varchar(20) DEFAULT NULL COMMENT '\r\n 10\r\n 20',
  `order_amount` varchar(11) DEFAULT NULL COMMENT '',
  `paid_amount` varchar(11) DEFAULT NULL COMMENT '',
  `product_id` varchar(20) DEFAULT NULL COMMENT 'ID',
  `buy_counts` int(11) DEFAULT NULL COMMENT '',
  `create_time` datetime DEFAULT NULL COMMENT '',
  `paid_time` datetime DEFAULT NULL COMMENT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='';


CREATE TABLE `product` (
  `id` varchar(20) NOT NULL,
  `name` varchar(20) DEFAULT NULL COMMENT '',
  `price` varchar(11) DEFAULT NULL COMMENT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=' ';

3dao

curd使`mapper```order:

public interface OrdersMapper {
    int countByExample(OrdersExample example);

    int deleteByExample(OrdersExample example);

    int deleteByPrimaryKey(String id);

    int insert(Orders record);

    int insertSelective(Orders record);

    List<Orders> selectByExample(OrdersExample example);

    Orders selectByPrimaryKey(String id);

    int updateByExampleSelective(@Param(<span data-raw-text="" "="" data-textnode-index-1641082167928="537" data-index-1641082167928="3604" class="character">"record<span data-raw-text="" "="" data-textnode-index-1641082167928="537" data-index-1641082167928="3611" class="character">"
) Orders record, @Param(<span data-raw-text="" "="" data-textnode-index-1641082167928="541" data-index-1641082167928="3636" class="character">"example<span data-raw-text="" "="" data-textnode-index-1641082167928="541" data-index-1641082167928="3644" class="character">") OrdersExample example);

    int updateByExample(@Param(<span data-raw-text="" "="" data-textnode-index-1641082167928="550" data-index-1641082167928="3701" class="character">"record<span data-raw-text="" "="" data-textnode-index-1641082167928="550" data-index-1641082167928="3708" class="character">") Orders record, @Param(<span data-raw-text="" "="" data-textnode-index-1641082167928="554" data-index-1641082167928="3733" class="character">"example<span data-raw-text="" "="" data-textnode-index-1641082167928="554" data-index-1641082167928="3741" class="character">") OrdersExample example);

    int updateByPrimaryKeySelective(Orders record);

    int updateByPrimaryKey(Orders record);
}

4service

order:

/**
 *  service
 * @author ibm
 *
 */

public interface OrdersService {

    /**
     * 
     * @param order
     */

    public void saveOrder(Orders order);

    /**
     * 
     * @Title: OrdersService.java
     * @Package com.sihai.service
     * @Description:  ; 
     * Copyright: Copyright (c) 2017
     * Company:FURUIBOKE.SCIENCE.AND.TECHNOLOGY
     * 
     * @author sihai
     * @date 2017823 9:04:35
     * @version V1.0
     */

    public void updateOrderStatus(String orderId, String alpayFlowNum, String paidAmount);

    /**
     * 
     * @param orderId
     * @return
     */

    public Orders getOrderById(String orderId);

}

4controller

http://localhost:8080/,

products.jsp

<%@ page language=<span data-raw-text="" "="" data-textnode-index-1641082167928="669" data-index-1641082167928="4681" class="character">"java<span data-raw-text="" "="" data-textnode-index-1641082167928="669" data-index-1641082167928="4686" class="character">" contentType=<span data-raw-text="" "="" data-textnode-index-1641082167928="673" data-index-1641082167928="4700" class="character">"text/html; charset=UTF-8<span data-raw-text="" "="" data-textnode-index-1641082167928="673" data-index-1641082167928="4725" class="character">" pageEncoding=<span data-raw-text="" "="" data-textnode-index-1641082167928="677" data-index-1641082167928="4740" class="character">"UTF-8<span data-raw-text="" "="" data-textnode-index-1641082167928="677" data-index-1641082167928="4746" class="character">"%>
<%@ taglib prefix=<span data-raw-text="" "="" data-textnode-index-1641082167928="686" data-index-1641082167928="4767" class="character">"c<span data-raw-text="" "="" data-textnode-index-1641082167928="686" data-index-1641082167928="4769" class="character">" uri=<span data-raw-text="" "="" data-textnode-index-1641082167928="690" data-index-1641082167928="4775" class="character">"http://java.sun.com/jsp/jstl/core<span data-raw-text="" "="" data-textnode-index-1641082167928="690" data-index-1641082167928="4809" class="character">" %>
<%@ taglib uri=<span data-raw-text="" "="" data-textnode-index-1641082167928="699" data-index-1641082167928="4828" class="character">"http://java.sun.com/jsp/jstl/functions<span data-raw-text="" "="" data-textnode-index-1641082167928="699" data-index-1641082167928="4867" class="character">" prefix=<span data-raw-text="" "="" data-textnode-index-1641082167928="703" data-index-1641082167928="4876" class="character">"fn<span data-raw-text="" "="" data-textnode-index-1641082167928="703" data-index-1641082167928="4879" class="character">" %>  
<script src=<span data-raw-text="" "="" data-textnode-index-1641082167928="711" data-index-1641082167928="4897" class="character">"<%=request.getContextPath() %>/static/js/jquery.min.js<span data-raw-text="" "="" data-textnode-index-1641082167928="711" data-index-1641082167928="4952" class="character">" type=<span data-raw-text="" "="" data-textnode-index-1641082167928="715" data-index-1641082167928="4959" class="character">"text/javascript<span data-raw-text="" "="" data-textnode-index-1641082167928="715" data-index-1641082167928="4975" class="character">"></script>

<html>

    <head>

    </head>

    <body>

        <table>
            <tr>
                <td>
                   
                </td>
                <td>
                   
                </td>
                <td>
                   
                </td>
                <td>
                   
                </td>
            </tr>
            <c:forEach items=<span data-raw-text="" "="" data-textnode-index-1641082167928="788" data-index-1641082167928="5358" class="character">"${pList }<span data-raw-text="" "="" data-textnode-index-1641082167928="788" data-index-1641082167928="5368" class="character">" var=<span data-raw-text="" "="" data-textnode-index-1641082167928="792" data-index-1641082167928="5374" class="character">"p<span data-raw-text="" "="" data-textnode-index-1641082167928="792" data-index-1641082167928="5376" class="character">">
                <tr>
                   <td>
                   ${p.id }
                   </td>
                   <td>
                   ${p.name }
                   </td>
                   <td>
                   ${p.price }
                   </td>
                   <td>
                   <a href=<span data-raw-text="" "="" data-textnode-index-1641082167928="835" data-index-1641082167928="5702" class="character">"<%=request.getContextPath() %>/alipay/goConfirm.action?productId=${p.id }<span data-raw-text="" "="" data-textnode-index-1641082167928="835" data-index-1641082167928="5776" class="character">"></a>
                   </td>
                </tr>

            </c:forEach>
        </table>

        <input type=<span data-raw-text="" "="" data-textnode-index-1641082167928="863" data-index-1641082167928="5890" class="character">"hidden<span data-raw-text="" "="" data-textnode-index-1641082167928="863" data-index-1641082167928="5897" class="character">" id=<span data-raw-text="" "="" data-textnode-index-1641082167928="867" data-index-1641082167928="5902" class="character">"hdnContextPath<span data-raw-text="" "="" data-textnode-index-1641082167928="867" data-index-1641082167928="5917" class="character">" name=<span data-raw-text="" "="" data-textnode-index-1641082167928="871" data-index-1641082167928="5924" class="character">"hdnContextPath<span data-raw-text="" "="" data-textnode-index-1641082167928="871" data-index-1641082167928="5939" class="character">" value=<span data-raw-text="" "="" data-textnode-index-1641082167928="875" data-index-1641082167928="5947" class="character">"<%=request.getContextPath() %><span data-raw-text="" "="" data-textnode-index-1641082167928="875" data-index-1641082167928="5978" class="character">"/>
    </body>

</html>


<script type=<span data-raw-text="" "="" data-textnode-index-1641082167928="889" data-index-1641082167928="6012" class="character">"text/javascript<span data-raw-text="" "="" data-textnode-index-1641082167928="889" data-index-1641082167928="6028" class="character">">

    $(document).ready(function() {

        var hdnContextPath = $(<span data-raw-text="" "="" data-textnode-index-1641082167928="901" data-index-1641082167928="6095" class="character">"#hdnContextPath<span data-raw-text="" "="" data-textnode-index-1641082167928="901" data-index-1641082167928="6111" class="character">").val();


    });


</script>

SID
id


/**
     *
     * @Title: AlipayController.java
     * @Package com.sihai.controller
     * @Description: 
     * Copyright: Copyright (c) 2017
     * Company:FURUIBOKE.SCIENCE.AND.TECHNOLOGY
     *
     * @author sihai
     * @date 2017823 8:50:43
     * @version V1.0
     */

    @RequestMapping(value = <span data-raw-text="" "="" data-textnode-index-1641082167928="953" data-index-1641082167928="6569" class="character">"/goAlipay<span data-raw-text="" "="" data-textnode-index-1641082167928="953" data-index-1641082167928="6579" class="character">"
, produces = <span data-raw-text="" "="" data-textnode-index-1641082167928="955" data-index-1641082167928="6593" class="character">"text/html; charset=UTF-8<span data-raw-text="" "="" data-textnode-index-1641082167928="955" data-index-1641082167928="6618" class="character">")
    @ResponseBody
    public String goAlipay(String orderId, HttpServletRequest request, HttpServletRequest response) throws Exception {

        Orders order = orderService.getOrderById(orderId);

        Product product = productService.getProductById(order.getProductId());

        //AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, <span data-raw-text="" "="" data-textnode-index-1641082167928="975" data-index-1641082167928="7060" class="character">"json<span data-raw-text="" "="" data-textnode-index-1641082167928="975" data-index-1641082167928="7065" class="character">", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);

        //
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(AlipayConfig.return_url);
        alipayRequest.setNotifyUrl(AlipayConfig.notify_url);

        //
        String out_trade_no = orderId;
        //
        String total_amount = order.getOrderAmount();
        //
        String subject = product.getName();
        //
        String body = <span data-raw-text="" "="" data-textnode-index-1641082167928="996" data-index-1641082167928="7604" class="character">"<span data-raw-text="" "="" data-textnode-index-1641082167928="996" data-index-1641082167928="7614" class="character">" + order.getBuyCounts();

        // 1m15dm-h-d-1c-1c-0 1.5h 90m
        String timeout_express = <span data-raw-text="" "="" data-textnode-index-1641082167928="1001" data-index-1641082167928="7793" class="character">"1c<span data-raw-text="" "="" data-textnode-index-1641082167928="1001" data-index-1641082167928="7796" class="character">";

        alipayRequest.setBizContent(<span data-raw-text="" "="" data-textnode-index-1641082167928="1004" data-index-1641082167928="7834" class="character">"{\<span data-raw-text="" "="" data-textnode-index-1641082167928="1004" data-index-1641082167928="7837" class="character">"out_trade_no\<span data-raw-text="" "="" data-textnode-index-1641082167928="1004" data-index-1641082167928="7851" class="character">":\<span data-raw-text="" "="" data-textnode-index-1641082167928="1004" data-index-1641082167928="7854" class="character">"<span data-raw-text="" "="" data-textnode-index-1641082167928="1004" data-index-1641082167928="7855" class="character">"+ out_trade_no +<span data-raw-text="" "="" data-textnode-index-1641082167928="1006" data-index-1641082167928="7872" class="character">"\<span data-raw-text="" "="" data-textnode-index-1641082167928="1006" data-index-1641082167928="7874" class="character">",<span data-raw-text="" "="" data-textnode-index-1641082167928="1006" data-index-1641082167928="7876" class="character">"
                + <span data-raw-text="" "="" data-textnode-index-1641082167928="1008" data-index-1641082167928="7895" class="character">"\<span data-raw-text="" "="" data-textnode-index-1641082167928="1008" data-index-1641082167928="7897" class="character">"total_amount\<span data-raw-text="" "="" data-textnode-index-1641082167928="1008" data-index-1641082167928="7911" class="character">":\<span data-raw-text="" "="" data-textnode-index-1641082167928="1008" data-index-1641082167928="7914" class="character">"<span data-raw-text="" "="" data-textnode-index-1641082167928="1008" data-index-1641082167928="7915" class="character">"+ total_amount +<span data-raw-text="" "="" data-textnode-index-1641082167928="1010" data-index-1641082167928="7932" class="character">"\<span data-raw-text="" "="" data-textnode-index-1641082167928="1010" data-index-1641082167928="7934" class="character">",<span data-raw-text="" "="" data-textnode-index-1641082167928="1010" data-index-1641082167928="7936" class="character">"
                + <span data-raw-text="" "="" data-textnode-index-1641082167928="1012" data-index-1641082167928="7955" class="character">"\<span data-raw-text="" "="" data-textnode-index-1641082167928="1012" data-index-1641082167928="7957" class="character">"subject\<span data-raw-text="" "="" data-textnode-index-1641082167928="1012" data-index-1641082167928="7966" class="character">":\<span data-raw-text="" "="" data-textnode-index-1641082167928="1012" data-index-1641082167928="7969" class="character">"<span data-raw-text="" "="" data-textnode-index-1641082167928="1012" data-index-1641082167928="7970" class="character">"+ subject +<span data-raw-text="" "="" data-textnode-index-1641082167928="1014" data-index-1641082167928="7982" class="character">"\<span data-raw-text="" "="" data-textnode-index-1641082167928="1014" data-index-1641082167928="7984" class="character">",<span data-raw-text="" "="" data-textnode-index-1641082167928="1014" data-index-1641082167928="7986" class="character">"
                + <span data-raw-text="" "="" data-textnode-index-1641082167928="1016" data-index-1641082167928="8005" class="character">"\<span data-raw-text="" "="" data-textnode-index-1641082167928="1016" data-index-1641082167928="8007" class="character">"body\<span data-raw-text="" "="" data-textnode-index-1641082167928="1016" data-index-1641082167928="8013" class="character">":\<span data-raw-text="" "="" data-textnode-index-1641082167928="1016" data-index-1641082167928="8016" class="character">"<span data-raw-text="" "="" data-textnode-index-1641082167928="1016" data-index-1641082167928="8017" class="character">"+ body +<span data-raw-text="" "="" data-textnode-index-1641082167928="1018" data-index-1641082167928="8026" class="character">"\<span data-raw-text="" "="" data-textnode-index-1641082167928="1018" data-index-1641082167928="8028" class="character">",<span data-raw-text="" "="" data-textnode-index-1641082167928="1018" data-index-1641082167928="8030" class="character">"
                + <span data-raw-text="" "="" data-textnode-index-1641082167928="1020" data-index-1641082167928="8049" class="character">"\<span data-raw-text="" "="" data-textnode-index-1641082167928="1020" data-index-1641082167928="8051" class="character">"timeout_express\<span data-raw-text="" "="" data-textnode-index-1641082167928="1020" data-index-1641082167928="8068" class="character">":\<span data-raw-text="" "="" data-textnode-index-1641082167928="1020" data-index-1641082167928="8071" class="character">"<span data-raw-text="" "="" data-textnode-index-1641082167928="1020" data-index-1641082167928="8072" class="character">"+ timeout_express +<span data-raw-text="" "="" data-textnode-index-1641082167928="1022" data-index-1641082167928="8092" class="character">"\<span data-raw-text="" "="" data-textnode-index-1641082167928="1022" data-index-1641082167928="8094" class="character">",<span data-raw-text="" "="" data-textnode-index-1641082167928="1022" data-index-1641082167928="8096" class="character">"
                + <span data-raw-text="" "="" data-textnode-index-1641082167928="1024" data-index-1641082167928="8115" class="character">"\<span data-raw-text="" "="" data-textnode-index-1641082167928="1024" data-index-1641082167928="8117" class="character">"product_code\<span data-raw-text="" "="" data-textnode-index-1641082167928="1024" data-index-1641082167928="8131" class="character">":\<span data-raw-text="" "="" data-textnode-index-1641082167928="1024" data-index-1641082167928="8134" class="character">"FAST_INSTANT_TRADE_PAY\<span data-raw-text="" "="" data-textnode-index-1641082167928="1024" data-index-1641082167928="8158" class="character">"}<span data-raw-text="" "="" data-textnode-index-1641082167928="1024" data-index-1641082167928="8160" class="character">");

        //
        String result = alipayClient.pageExecute(alipayRequest).getBody();

        return result;
    }

demossm

ssm

下载地址,请关注微信公众账号,回复数字9 , 你的支持就是我写作的动力


文章转载自java代码,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论