搞定支付寶網(wǎng)頁(yè)支付,實(shí)戰(zhàn)來(lái)了!
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
作者:叁滴水
博客:https://blog.csdn.net/qq_30285985/
前言
了解了支付寶秘鑰設(shè)置的原理之后,可更加快速的進(jìn)行開(kāi)發(fā)支付寶支付。在此示例一下支付寶支付較為簡(jiǎn)單的場(chǎng)景——電腦網(wǎng)站支付。
這個(gè)場(chǎng)景對(duì)于后端開(kāi)發(fā)者是比較友好的,官方的demo中已經(jīng)提供了html頁(yè)面,只需要進(jìn)行簡(jiǎn)單的配置即可運(yùn)行。
一、電腦網(wǎng)站支付
1.1 沙箱環(huán)境配置

登錄支付寶,進(jìn)入控制臺(tái)進(jìn)入沙箱環(huán)境。

3、以及其他涉及授權(quán)的產(chǎn)品(如商戶會(huì)員卡)
AES加密在選填部分??梢?jiàn)在對(duì)接支付寶時(shí),官方并不強(qiáng)制要求使用AES加密,可以根據(jù)自己的實(shí)際情況自行選擇是否使用AES加密。
1.2、demo加載
1.2.1、idea直接添加
至今官方提供的demo還是比較古老的一種方式,是采用的Eclipse開(kāi)發(fā)工具編寫(xiě)的,里面有一些簡(jiǎn)單的jsp頁(yè)面,只需要下載即可。

現(xiàn)在開(kāi)發(fā)工具基本都換成了idea,也可以通過(guò)idea直接打開(kāi)eclipse工程。另外,關(guān)注公眾號(hào)Java技術(shù)棧,在后臺(tái)回復(fù):激活碼,可以獲取我寫(xiě)的獲取正版 IDEA 激活碼的方式,很多人都獲取到了。


1.2.2、maven添加
現(xiàn)在大部分都是maven工程,我的idea中javaee都沒(méi)有,很是尷尬,因此,我選擇直接轉(zhuǎn)換成springboot工程。Spring Boot 基礎(chǔ)教程就不介紹了,系列教程可以看這里:https://github.com/javastacks/spring-boot-best-practice
將jsp代碼和java配置類復(fù)制到一個(gè)純凈的springboot工程中,結(jié)構(gòu)大概如此,webapp是需要自己新建的,將原有工程的類和jsp復(fù)制進(jìn)來(lái)即可。

pom文件中添加對(duì)jsp的支持,另外打包時(shí)將默認(rèn)的jar包改成war包,war包對(duì)jsp更加友好,配置示例如下。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>alipay</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>alipay</name>
<packaging>war</packaging>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 添加支持jsp-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- tomcat的支持-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope> <!-- 編譯時(shí)依賴 運(yùn)行是不需要此包 -->
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 添加war 插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
在官方提供的demo中,有3個(gè)包需要進(jìn)行添加。
因?yàn)槭菧y(cè)試,而且依賴的代碼寫(xiě)在了jsp中,不影響打包,索性可以直接先打包,然后將3個(gè)jar復(fù)制到服務(wù)器的lib目錄。


1.3、參數(shù)配置
demo中提供了一個(gè)配置類AlipayConfig.java。
// 應(yīng)用ID,您的APPID,收款賬號(hào)既是您的APPID對(duì)應(yīng)支付寶賬號(hào)
public static String app_id = "";
// 商戶私鑰,您的PKCS8格式RSA2私鑰
public static String merchant_private_key = "";
// 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對(duì)應(yīng)APPID下的支付寶公鑰。
public static String alipay_public_key = "";
// 服務(wù)器異步通知頁(yè)面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問(wèn)
public static String notify_url = "http://{服務(wù)器ip}/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";
// 頁(yè)面跳轉(zhuǎn)同步通知頁(yè)面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問(wèn)
public static String return_url = "http://{服務(wù)器ip}/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";
// 簽名方式
public static String sign_type = "RSA2";
// 字符編碼格式
public static String charset = "utf-8";
// 支付寶網(wǎng)關(guān)
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
// 日志路徑
public static String log_path = "/";
app_id 應(yīng)用id。每個(gè)應(yīng)用都有自己的唯一標(biāo)示。這個(gè)參數(shù)在支付寶、微信等許多開(kāi)放平臺(tái)都有出現(xiàn)。 merchant_private_key和alipay_public_key這是用來(lái)計(jì)算簽名的秘鑰。 notify_url 這個(gè)是用來(lái)接收支付寶回調(diào)通知的接口地址,這個(gè)接口需要進(jìn)行冪等處理。 return_url 配置支付成功之后跳轉(zhuǎn)的頁(yè)面地址。 sign_type 簽名方式,這個(gè)就默認(rèn)的 RSA2加密即可。一般不需要修改。gatewayUrl 支付寶網(wǎng)關(guān),這個(gè)在app配置的時(shí)候官方提供了,復(fù)制下來(lái)即可。
1.4、啟動(dòng)工程
配置完成之后即可啟動(dòng)工程,進(jìn)入首頁(yè)index.jsp。
我的路徑是/alipay/index.jsp,大家參考下。

官方的demo中提供了付款、交易查詢、退款、退款查詢、交易關(guān)閉等功能。開(kāi)發(fā)者可自行選擇調(diào)試。
另外沙箱環(huán)境是一套獨(dú)立的支付寶環(huán)境,需要下載官方提供的沙箱支付寶app(只有安卓)。
點(diǎn)即付款功能的支付按鈕,即可跳入支付頁(yè)面,支付完成之后會(huì)自行跳轉(zhuǎn)到配置的return_url地址。
注:有時(shí)候會(huì)提示存在釣魚(yú)風(fēng)險(xiǎn)提示頁(yè)面。只需要關(guān)閉瀏覽器,只打開(kāi)支付入口頁(yè)面index.jsp,不要打開(kāi)其他的支付寶頁(yè)面就解決了。
本文來(lái)自作者「叁滴水」投稿,謝謝分享,也歡迎愛(ài)好技術(shù)分享的各位技術(shù)朋友向「Java技術(shù)?!雇陡澹尭嗳丝吹?,投稿方式:關(guān)注公眾號(hào)「Java技術(shù)?!乖诤笈_(tái)回復(fù):投稿。






關(guān)注Java技術(shù)??锤喔韶?/strong>


