支付寶支付介面總結
阿新 • • 發佈:2018-11-21
登陸
螞蟻金服提供了支付的測試環境和測試商家賣家賬號和賣家賬號,也提供了一套demo
登陸時使用自己真實線上的支付寶,服務可選擇個人自研開發。
沙箱配置
APPID和支付寶閘道器都是其自動生成提供的,不需要配置,沙箱只需要在在這裡配置金鑰。記得用私鑰簽名公鑰驗證下其正確性。
1.只能填寫和修改應用公鑰,支付寶公鑰會自動對應生成,兩個公鑰是不一樣的(僅僅頭尾像而已)
2.配置AlipayConfig.java的公鑰屬性使用的是支付寶公鑰
3.這個支付寶閘道器都是沙箱測試環境的,真實線上環境的閘道器沒有 dev,線上的APPID 是另外的。在建立應用時才有快速接入文件
買家和賣家的測試賬號
測試可以下載其提供的沙箱支付寶(介面功能和真實線上支付寶幾乎一樣,就是閘道器和賬號是測試的而已),這樣測試給錢直接掃碼方便。
Demo案例解析
以下是官方提供的樣例中的AlipayConfig.java配置檔案
package com.alipay.config;
import java.io.FileWriter;
import java.io.IOException;
/* *
*類名:AlipayConfig
*功能:基礎配置類
*詳細:設定帳戶有關資訊及返回路徑
*修改日期:2017-04-05
*說明:
*以下程式碼只是為了方便商戶測試而提供的樣例程式碼,商戶可以根據自己網站的需要,按照技術文件編寫,並非一定要使用該程式碼。
*該程式碼僅供學習和研究支付寶介面使用,只是提供一個參考。
*/
public class AlipayConfig {
//↓↓↓↓↓↓↓↓↓↓請在這裡配置您的基本資訊↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號
public static String app_id = "2016091900549628";
// 商戶私鑰,您的PKCS8格式RSA2私鑰
public static String merchant_private_key = "應用公鑰對應的私鑰";
// 支付寶公鑰,檢視地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。
public static String alipay_public_key = "支付寶公鑰!!!!,不是應用公鑰";
/**
* 1.伺服器非同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義引數,必須外網可以正常訪問
* 2.確實是必須外網可以訪問,測試過了,基本是這沙箱的配置測試也需要這個可以外網訪問,不然支付寶那邊(猜測是閘道器那邊處理的)非同步返回找不到url。
* 3. 所謂非同步通知,類似回撥函式,就是其支付成功了會自動呼叫的一個頁面,採用POST請求,可以獲取支付訂單引數,這裡我改為自己寫的一個測試Servlet(花生殼殼域名內網穿透)
*/
public static String notify_url = "http://170d491b26.iok.la/alipay.trade.page.pay-JAVA-UTF-8/PayServlet";
// 支付成功後跳轉到的頁面,可以自定義,Get方式,可以獲取到一些支付訂單引數,!無需公網IP
public static String return_url = "http://127.0.0.1:8080/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";
// 簽名方式
public static String sign_type = "RSA2";
// 字元編碼格式
public static String charset = "utf-8";
// 支付寶閘道器,這裡是測試閘道器,線上閘道器是"https://openapi.alipay.com/gateway.do",沒有dev
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
// 以下是日誌,可以暫時不管
.....
}
return_url
return_url是支付成功後自動跳轉到的你指定頁面,測試過可以不用外網訪問,GET方式,可以獲取使用者請求。return_url.jsp也是其提供的一個樣例檔案,原始碼就是輸出一下幾個交易引數到http。
如下圖:
notify_url
1.notify_url是必須要外網可以訪問的(我這裡採用的是花生殼內網穿透)
2.如果支付成功了支付寶閘道器那邊會自動呼叫的,這個響應的url需要返回一個 “success” / “fail” 可以參照其提供的return_url.jsp
3.以下是我寫的那個測試的PayServlet作為notify_url
package controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* 測試支付功能的處理接收的非同步通知回撥方法
*
* @author chgl16
* @date 2018-11-20
* @version 1.0
*/
@WebServlet("/PayServlet")
public class PayServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("進入doPost");
String total_amount = request.getParameter("total_amount");
System.out.println("total_amount: " + total_amount);
Map<String, String[]> map = request.getParameterMap();
System.out.println("輸出引數集合: " + map.toString());
response.getWriter().write("success");
System.out.println("結束了");
}
}
執行測試
執行index.jsp,測試付款,其會自動生成訂單號
點選付款按鈕會跳轉到其提供的alipy.trade.page.pay.jsp然後在到官方的支付介面
這時可以使用下載的支付沙箱版支付寶掃描付款或者登陸付款,登陸的都是測試的買家賬號。支付成功會有幾個跳轉
最後跳轉到return_url,如下
支付成功後,也自動呼叫了notify_url,就是我定義的PayServelt
上線
需要申請稽核,以獲取
需要設定一些上線選擇,然後提交稽核
待續。。。。