作者:叁滴水
前言
了解了支付寶秘鑰設置的原理之后,可更加快速地進行開發支付寶支付。在此示例一下支付寶支付較為簡單的場景——電腦網站支付。
這個場景對于后端開發者是比較友好的,官方的demo中已經提供了html頁面,只需要進行簡單的配置即可運行。
一、電腦網站支付
1.1 沙箱環境配置
登錄支付寶,進入控制臺進入沙箱環境。
進入之后配置沙箱環境秘鑰。由上圖可見,用來計算簽名的RSA加密是必須要配置的,開發者要下載支付寶開發工具獲取一對RSA秘鑰,另外選填部分的應用網關和授權地址容易搞混,解釋如下:
應用網關
用于接收由支付寶服務器通知 主要用于:
1、生活號被動通知
2、口碑門店的被動通知
3、單筆轉賬到支付寶賬戶
4、現金紅包
5、以及其他部分產品和訂閱消息
授權回調地址
顧名思義僅用于授權接口主要用于:
1、第三方應用授權
2、用戶信息授權
3、以及其他涉及授權的產品(如商戶會員卡)
不管是授權回調地址還是應用網關都是需要傳入http或是https開頭的網頁地址。更詳細的說明可查看支付寶官方。
AES加密在選填部分。可見在對接支付寶時,官方并不強制要求使用AES加密,可以根據自己的實際情況自行選擇是否使用AES加密。
1.2、demo加載
1.2.1、idea直接添加
至今官方提供的demo還是比較古老的一種方式,是采用的Eclipse開發工具編寫的,里面有一些簡單的jsp頁面,只需要下載即可。
現在開發工具基本都換成了idea,也可以通過idea直接打開eclipse工程。另外,關注公眾號JAVA技術棧,在后臺回復:激活碼,可以獲取我寫的獲取正版 IDEA 激活碼的方式,很多人都獲取到了。
1.2.2、maven添加
現在大部分都是maven工程,我的idea中javaee都沒有,很是尷尬,因此,我選擇直接轉換成springboot工程。Spring Boot 基礎教程就不介紹了,系列教程可以看這里:https://github.com/javastacks/spring-boot-best-practice
將jsp代碼和java配置類復制到一個純凈的springboot工程中,結構大概如此,webApp是需要自己新建的,將原有工程的類和jsp復制進來即可。
pom文件中添加對jsp的支持,另外打包時將默認的jar包改成war包,war包對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> <!-- 編譯時依賴 運行是不需要此包 -->
</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個包需要進行添加。
因為是測試,而且依賴的代碼寫在了jsp中,不影響打包,索性可以直接先打包,然后將3個jar復制到服務器的lib目錄。
1.3、參數配置
demo中提供了一個配置類AlipayConfig.java。
這里需要將沙箱環境提供的參數配置上。
// 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號
public static String app_id = "";
// 商戶私鑰,您的PKCS8格式RSA2私鑰
public static String merchant_private_key = "";
// 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。
public static String alipay_public_key = "";
// 服務器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
public static String notify_url = "http://{服務器ip}/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";
// 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
public static String return_url = "http://{服務器ip}/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";
// 簽名方式
public static String sign_type = "RSA2";
// 字符編碼格式
public static String charset = "utf-8";
// 支付寶網關
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
// 日志路徑
public static String log_path = "/";
- app_id 應用id。每個應用都有自己的唯一標示。這個參數在支付寶、微信等許多開放平臺都有出現。
- merchant_private_key和alipay_public_key這是用來計算簽名的秘鑰。
- notify_url 這個是用來接收支付寶回調通知的接口地址,這個接口需要進行冪等處理。
- return_url 配置支付成功之后跳轉的頁面地址。
- sign_type 簽名方式,這個就默認的RSA2加密即可。一般不需要修改。
- gatewayUrl 支付寶網關,這個在app配置的時候官方提供了,復制下來即可。
1.4、啟動工程
配置完成之后即可啟動工程,進入首頁index.jsp。
我的路徑是/alipay/index.jsp,大家參考下。
官方的demo中提供了付款、交易查詢、退款、退款查詢、交易關閉等功能。開發者可自行選擇調試。
另外沙箱環境是一套獨立的支付寶環境,需要下載官方提供的沙箱支付寶app(只有Android/ target=_blank class=infotextkey>安卓)。
點擊付款功能的支付按鈕,即可跳入支付頁面,支付完成之后會自行跳轉到配置的return_url地址。
注:有時候會提示存在釣魚風險提示頁面。只需要關閉瀏覽器,只打開支付入口頁面index.jsp,不要打開其他的支付寶頁面就解決了。