<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SSM 實現(xiàn)支付寶支付功能,附源碼

          共 7969字,需瀏覽 16分鐘

           ·

          2020-11-19 23:14

          ??Java大聯(lián)盟

          ? 幫助萬千Java學習者持續(xù)成長

          關注



          來源|http://suo.im/5HFF7d


          B 站搜索:楠哥教你學Java

          獲取更多優(yōu)質視頻教程


          前言

          本教程詳細介紹了如何使用ssm框架實現(xiàn)支付寶支付功能。本文章分為兩大部分,分別是「支付寶測試環(huán)境代碼測試」和「將支付寶支付整合到ssm框架」,詳細的代碼和圖文解釋,自己實踐的時候一定仔細閱讀相關文檔,話不多說我們開始。

          本教程源代碼:

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

          一、支付寶測試環(huán)境代碼測試

          1. 下載電腦網站的官方demo:

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

          2. 下載解壓導入eclipse

          readme.txt請好好看一下。

          只有一個Java配置類,其余都是JSP。

          3. 配置AlipayConfig

          (1) 注冊螞蟻金服開發(fā)者賬號(免費,不像蘋果會收取費用)

          注冊地址:https://open.alipay.com ,用你的支付寶賬號掃碼登錄,完善個人信息,選擇服務類型(我選的是自研)。

          (2) 設置app_id和gatewayUrl

          其中密鑰需要自己生成,appID和支付寶網關是已經給好的,網關有dev字樣,表明是用于開發(fā)測試。

          (3) 設置密鑰

          點擊“生成方法”,打開界面如下:

          下周密鑰生成工具,解壓打開后,選擇2048位生成密鑰:

          如果沒有設置過,此時顯示文本是"設置應用公鑰",我這里是已經設置過得。

          設置方法,"打開密鑰文件路徑":

          復制應用公鑰2048.txt中的內容到點擊"設置應用公鑰"的彈出框中,保存:

          • 商戶私鑰(merchant_private_key)

            復制 應用私鑰2048.txt 中的內容到merchant_private_key中。

          • 支付寶公鑰(alipay_public_key)

          點擊如上圖鏈接,復制彈出框里面的內容到alipay_public_key。

          如果這個設置不對,結果是:支付成功,但是驗簽失敗。

          如果是正式環(huán)境,需要上傳到對應的應用中:

          (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. 測試運行

          測試用的支付寶買家賬戶可以在"沙箱賬"這個頁面可以找到:

          支付成功后,驗簽結果:

          問題解決

          由于我們使用的是沙箱測試環(huán)境,測試環(huán)境和正式上線的環(huán)境的網關是不一樣的,如果配置錯誤,會出現(xiàn),appid錯誤的問題。配置如下:

          二、將支付寶支付整合到 SSM 框架

          1. 項目架構

          • 項目架構:spring+springmvc+mybatis

          • 數(shù)據(jù)庫:mysql

          • 部署環(huán)境:tomcat9.0

          • 開發(fā)環(huán)境:jdk9、idea

          • 支付:支付寶、微信

          整合到ssm一樣,我們需要像沙箱測試環(huán)境一樣,需要修改支付的配置信息

          2. 數(shù)據(jù)庫代碼

          主要包括以下的數(shù)據(jù)庫表:

          • 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 '購買個數(shù)', `create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時間', 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 '訂單狀態(tài)\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 '產品購買的個數(shù)', `create_time` datetime DEFAULT NULL COMMENT '訂單創(chuàng)建時間', `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='產品表 ';

          3. dao數(shù)據(jù)接口層

          這里就不介紹了,這個只包括簡單的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 selectByExample(OrdersExample example);
          Orders selectByPrimaryKey(String id);
          int updateByExampleSelective(@Param("record") Orders record, @Param("example") OrdersExample example);
          int updateByExample(@Param("record") Orders record, @Param("example") OrdersExample example);
          int updateByPrimaryKeySelective(Orders record);
          int updateByPrimaryKey(Orders record);}

          注意:源代碼最后給出

          4. service層

          同上,最后在項目源代碼里可見。以訂單order為例給出:

          /** * 訂單操作 service * @author ibm * */public interface OrdersService {
          /** * 新增訂單 * @param order */ public void saveOrder(Orders order);
          /** * * @Title: OrdersService.java * @Package com.sihai.service * @Description: 修改叮當狀態(tài),改為 支付成功,已付款; 同時新增支付流水 * Copyright: Copyright (c) 2017 * Company:FURUIBOKE.SCIENCE.AND.TECHNOLOGY * * @author sihai * @date 2017年8月23日 下午9:04:35 * @version V1.0 */ public void updateOrderStatus(String orderId, String alpayFlowNum, String paidAmount);
          /** * 獲取訂單 * @param orderId * @return */ public Orders getOrderById(String orderId);
          }

          5. 支付寶支付controller(支付流程)

          支付流程圖

          首先,啟動項目后,輸入http://localhost:8080/,會進入到商品頁面,如下:

          下面是頁面代碼

          商品頁面(products.jsp)

          代碼實現(xiàn):

          <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>  <script src="<%=request.getContextPath() %>/static/js/jquery.min.js" type="text/javascript">script>
          <html>
          <head>
          head>
          <body>
          <table> <tr> <td> 產品編號 td> <td> 產品名稱 td> <td> 產品價格 td> <td> 操作 td> tr> <c:forEach items="${pList }" var="p"> <tr> <td> ${p.id } td> <td> ${p.name } td> <td> ${p.price } td> <td> <a href="<%=request.getContextPath() %>/alipay/goConfirm.action?productId=${p.id }">購買a> td> tr>
          c:forEach> table>
          <input type="hidden" id="hdnContextPath" name="hdnContextPath" value="<%=request.getContextPath() %>"/> body>
          html>

          <script type="text/javascript">
          $(document).ready(function() {
          var hdnContextPath = $("#hdnContextPath").val();

          });script>

          點擊上面的購買,進入到訂單頁面

          填寫個數(shù),然后點擊生成訂單,調用如下代碼

          根據(jù)SID(生成id的工具)等信息生成訂單,保存到數(shù)據(jù)庫。

          進入到選擇支付頁面

          調用了如下代碼:

          然后,我們選擇支付寶支付,進入到了我們支付的頁面了,大功告成!

          調用了如下代碼:

          /**     *     * @Title: AlipayController.java     * @Package com.sihai.controller     * @Description: 前往支付寶第三方網關進行支付     * Copyright: Copyright (c) 2017     * Company:FURUIBOKE.SCIENCE.AND.TECHNOLOGY     *     * @author sihai     * @date 2017年8月23日 下午8:50:43     * @version V1.0     */    @RequestMapping(value = "/goAlipay", produces = "text/html; charset=UTF-8")    @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, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
          //設置請求參數(shù) AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(AlipayConfig.return_url); alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
          //商戶訂單號,商戶網站訂單系統(tǒng)中唯一訂單號,必填 String out_trade_no = orderId; //付款金額,必填 String total_amount = order.getOrderAmount(); //訂單名稱,必填 String subject = product.getName(); //商品描述,可空 String body = "用戶訂購商品個數(shù):" + order.getBuyCounts();
          // 該筆訂單允許的最晚付款時間,逾期將關閉交易。取值范圍:1m~15d。m-分鐘,h-小時,d-天,1c-當天(1c-當天的情況下,無論交易何時創(chuàng)建,都在0點關閉)。 該參數(shù)數(shù)值不接受小數(shù)點, 如 1.5h,可轉換為 90m。 String timeout_express = "1c";
          alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," + "\"total_amount\":\""+ total_amount +"\"," + "\"subject\":\""+ subject +"\"," + "\"body\":\""+ body +"\"," + "\"timeout_express\":\""+ timeout_express +"\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
          //請求 String result = alipayClient.pageExecute(alipayRequest).getBody();
          return result; }

          這段代碼都可以在阿里支付的demo里面找到的,只需要復制過來,然后改改,整合到 SSM 環(huán)境即可。

          上面就是將阿里支付寶支付整合到 SSM 的全過程了。


          推薦閱讀

          1、Spring Boot+Vue項目實戰(zhàn)

          2、B站:4小時上手MyBatis Plus

          3、一文搞懂前后端分離

          4、快速上手Spring Boot+Vue前后端分離


          楠哥簡介

          資深 Java 工程師,微信號?southwindss

          《Java零基礎實戰(zhàn)》一書作者

          騰訊課程官方 Java 面試官今日頭條認證大V

          GitChat認證作者,B站認證UP主(楠哥教你學Java)

          致力于幫助萬千 Java 學習者持續(xù)成長。




          有收獲,就在看?
          瀏覽 58
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  女人一区| 国产视频黄色精频大全 | 鸡巴马上放进去免费视频网站 | 好操一级视频这里只有精品 | 亚洲每日更新 |