摘要:設(shè)置和其中密鑰需要自己生成,和支付寶網(wǎng)關(guān)是已經(jīng)給好的,網(wǎng)關(guān)有字樣,表明是用于開發(fā)測試。上面就是將阿里支付寶支付整合到的全過程了,如果還有什么疑問,可以留言或者私信我源代碼下載鏈接密碼
文章有不當(dāng)之處,歡迎指正,如果喜歡微信閱讀,你也可以關(guān)注我的微信公眾號:好好學(xué)java,獲取優(yōu)質(zhì)學(xué)習(xí)資源。一、支付寶測試環(huán)境代碼測試 1.下載電腦網(wǎng)站的官方demo:
下載地址:https://docs.open.alipay.com/...
2.下載解壓導(dǎo)入eclipsereadme.txt請好好看一下。
只有一個Java配置類,其余都是JSP。
3.配置AlipayConfig(1).注冊螞蟻金服開發(fā)者賬號(免費,不像蘋果會收取費用)
注冊地址:https://open.alipay.com ,用你的支付寶賬號掃碼登錄,完善個人信息,選擇服務(wù)類型(我選的是自研)。
(2).設(shè)置app_id和gatewayUrl
其中密鑰需要自己生成,appID和支付寶網(wǎng)關(guān)是已經(jīng)給好的,網(wǎng)關(guān)有dev字樣,表明是用于開發(fā)測試。
(3).設(shè)置密鑰
點擊“生成方法”,打開界面如下:
下周密鑰生成工具,解壓打開后,選擇2048位生成密鑰:
如果沒有設(shè)置過,此時顯示文本是“設(shè)置應(yīng)用公鑰”,我這里是已經(jīng)設(shè)置過得。
設(shè)置方法,“打開密鑰文件路徑”:
復(fù)制應(yīng)用公鑰2048.txt中的內(nèi)容到點擊“設(shè)置應(yīng)用公鑰”的彈出框中,保存:
商戶私鑰(merchant_private_key)
復(fù)制 應(yīng)用私鑰2048.txt 中的內(nèi)容到merchant_private_key中。
支付寶公鑰(alipay_public_key)
點擊如上圖鏈接,復(fù)制彈出框里面的內(nèi)容到alipay_public_key。
如果這個設(shè)置不對,結(jié)果是:支付成功,但是驗簽失敗。
如果是正式環(huán)境,需要上傳到對應(yīng)的應(yīng)用中:
(4).服務(wù)器異步通知頁面路徑(notify_url)
如果沒有改名,修改IP和端口號就可以了,我自己的如下:
http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp
(5).頁面跳轉(zhuǎn)同步通知頁面路徑(return_url)
http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp4.測試運行
測試用的支付寶買家賬戶可以在“沙箱賬號”這個頁面可以找到:
支付成功后,驗簽結(jié)果:
問題解決由于我們使用的是沙箱測試環(huán)境,測試環(huán)境和正式上線的環(huán)境的網(wǎng)關(guān)是不一樣的,如果配置錯誤,會出現(xiàn),appid錯誤的問題。配置如下:
鏈接: https://pan.baidu.com/s/1n6Gb... 密碼: zd9e
二、將支付寶支付整合到ssm框架 1、項目架構(gòu)項目架構(gòu):spring+springmvc+mybatis
數(shù)據(jù)庫:mysql
部署環(huán)境:tomcat9.0
開發(fā)環(huán)境:jdk9、idea
支付:支付寶、微信
整合到ssm一樣,我們需要像沙箱測試環(huán)境一樣,需要修改支付的配置信息
主要包括以下的數(shù)據(jù)庫表:
user:用戶表
order:支付產(chǎn)生的訂單
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 "產(chǎn)品主鍵ID", `paid_amount` varchar(11) DEFAULT NULL COMMENT "支付金額", `paid_method` int(11) DEFAULT NULL COMMENT "支付方式 1:支付寶 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) 10:待付款 20:已付款", `order_amount` varchar(11) DEFAULT NULL COMMENT "訂單金額", `paid_amount` varchar(11) DEFAULT NULL COMMENT "實際支付金額", `product_id` varchar(20) DEFAULT NULL COMMENT "產(chǎn)品表外鍵ID", `buy_counts` int(11) DEFAULT NULL COMMENT "產(chǎn)品購買的個數(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 "產(chǎn)品名稱", `price` varchar(11) DEFAULT NULL COMMENT "價格", PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT="產(chǎn)品表 ";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); ListselectByExample(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: 修改叮當(dāng)狀態(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); }4、支付寶支付controller(支付流程)
支付流程圖
首先,啟動項目后,輸入http://localhost:8080/,會進(jìn)入到商品頁面,如下:
下面是頁面代碼
商品頁面(products.jsp)
<%@ 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" %>
產(chǎn)品編號 | 產(chǎn)品名稱 | 產(chǎn)品價格 | 操作 |
${p.id } | ${p.name } | ${p.price } | 購買 |
點擊上面的購買,進(jìn)入到訂單頁面
填寫個數(shù),然后點擊生成訂單,調(diào)用如下代碼
根據(jù)SID(生成id的工具)等信息生成訂單,保存到數(shù)據(jù)庫。
進(jìn)入到選擇支付頁面
調(diào)用了如下代碼:
然后,我們選擇支付寶支付,進(jìn)入到了我們支付的頁面了,大功告成!
調(diào)用了如下代碼:
/** * * @Title: AlipayController.java * @Package com.sihai.controller * @Description: 前往支付寶第三方網(wǎng)關(guān)進(jìn)行支付 * 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è)置請求參數(shù) AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(AlipayConfig.return_url); alipayRequest.setNotifyUrl(AlipayConfig.notify_url); //商戶訂單號,商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號,必填 String out_trade_no = orderId; //付款金額,必填 String total_amount = order.getOrderAmount(); //訂單名稱,必填 String subject = product.getName(); //商品描述,可空 String body = "用戶訂購商品個數(shù):" + order.getBuyCounts(); // 該筆訂單允許的最晚付款時間,逾期將關(guān)閉交易。取值范圍:1m~15d。m-分鐘,h-小時,d-天,1c-當(dāng)天(1c-當(dāng)天的情況下,無論交易何時創(chuàng)建,都在0點關(guān)閉)。 該參數(shù)數(shù)值不接受小數(shù)點, 如 1.5h,可轉(zhuǎn)換為 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里面找到的,只需要復(fù)制過來,然后改改,整合到ssm環(huán)境即可。
上面就是將阿里支付寶支付整合到ssm的全過程了,如果還有什么疑問,可以留言或者私信我!
源代碼下載(ssm)鏈接: https://pan.baidu.com/s/1NCPD... 密碼: 8qse
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71276.html
摘要:支持的付款方式主打銀聯(lián)信用卡等,付款可以及時到賬。支持的付款方式主要是微信支付寶和京東支付。支持微信支付寶掃碼支付。 最近在開發(fā)自己的網(wǎng)站,想要接入一個第三方的支付平臺,但是處在創(chuàng)業(yè)初期,還沒能成立公司,所以沒有企業(yè)資質(zhì),想接入一款安全且性價比高的收款產(chǎn)品。以本人選擇困難癥再加點小糾結(jié)的個性,對現(xiàn)有的一些第三方支付接口做了一個對比,希望能給有相同需要的和正在尋求相關(guān)解決方案的朋友提供一...
摘要:支持的付款方式主打銀聯(lián)信用卡等,付款可以及時到賬。支持的付款方式主要是微信支付寶和京東支付。支持微信支付寶掃碼支付。 最近在開發(fā)自己的網(wǎng)站,想要接入一個第三方的支付平臺,但是處在創(chuàng)業(yè)初期,還沒能成立公司,所以沒有企業(yè)資質(zhì),想接入一款安全且性價比高的收款產(chǎn)品。以本人選擇困難癥再加點小糾結(jié)的個性,對現(xiàn)有的一些第三方支付接口做了一個對比,希望能給有相同需要的和正在尋求相關(guān)解決方案的朋友提供一...
摘要:我們知道,開發(fā)微信支付需要申請服務(wù)號并且需要一系列的資料才可以開通。怪麻煩的,現(xiàn)在我們可以用第三方開放的免簽約微信支付接口,支付寶接口和錢包接口,實現(xiàn)實時到帳的微信支付開發(fā)。 我們知道,開發(fā)微信支付需要申請服務(wù)號并且需要一系列的資料才可以開通。怪麻煩的,現(xiàn)在我們可以用第三方開放的免簽約微信支付接口,支付寶接口和QQ錢包接口,實現(xiàn)實時到帳的微信支付開發(fā)。 我們只需要在第三方的微信支付免簽...
摘要:我們知道,開發(fā)微信支付需要申請服務(wù)號并且需要一系列的資料才可以開通。怪麻煩的,現(xiàn)在我們可以用第三方開放的免簽約微信支付接口,支付寶接口和錢包接口,實現(xiàn)實時到帳的微信支付開發(fā)。 我們知道,開發(fā)微信支付需要申請服務(wù)號并且需要一系列的資料才可以開通。怪麻煩的,現(xiàn)在我們可以用第三方開放的免簽約微信支付接口,支付寶接口和QQ錢包接口,實現(xiàn)實時到帳的微信支付開發(fā)。 我們只需要在第三方的微信支付免簽...
閱讀 1860·2021-11-15 11:39
閱讀 1226·2021-10-18 13:29
閱讀 1187·2021-08-31 09:42
閱讀 2741·2019-08-30 11:11
閱讀 2116·2019-08-26 12:12
閱讀 2116·2019-08-26 10:17
閱讀 3391·2019-08-23 18:38
閱讀 3228·2019-08-23 18:38