Java后端調(diào)用微信支付和支付寶支付的詳細(xì)步驟
引言
在當(dāng)今數(shù)字化的商業(yè)環(huán)境中,線上支付已成為交易的主流方式。微信支付和支付寶支付作為國(guó)內(nèi)兩大主流的第三方支付平臺(tái),擁有龐大的用戶群體。對(duì)于 Java 后端開(kāi)發(fā)者來(lái)說(shuō),實(shí)現(xiàn)與這兩個(gè)支付平臺(tái)的對(duì)接是常見(jiàn)的需求。本文將詳細(xì)介紹 Java 后端如何調(diào)用微信支付和支付寶支付,涵蓋基本概念、配置步驟、代碼示例以及注意事項(xiàng)。
一、微信支付
1.1 基本概念
微信支付是騰訊公司推出的一種便捷支付方式,支持多種支付場(chǎng)景,如掃碼支付、JSAPI 支付、APP 支付等。在 Java 后端調(diào)用微信支付,主要是通過(guò)調(diào)用微信支付提供的 API 接口來(lái)完成支付流程。
1.2 前期準(zhǔn)備
- 注冊(cè)微信支付商戶號(hào):登錄微信支付商戶平臺(tái)(微信支付 - 中國(guó)領(lǐng)先的第三方支付平臺(tái) | 微信支付提供安全快捷的支付方式)進(jìn)行注冊(cè),獲取商戶號(hào)(
mch_id)。 - 配置 API 密鑰:在商戶平臺(tái)設(shè)置 API 密鑰,用于簽名驗(yàn)證。
- 獲取證書(shū):下載商戶證書(shū)(
apiclient_cert.p12),用于安全通信。
1.3 配置依賴
在 pom.xml 中添加以下依賴:
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
1.4 代碼示例:掃碼支付
import com.github.wxpay.sdk.WXPay;
import com.github.wxpay.sdk.WXPayConfig;
import com.github.wxpay.sdk.WXPayConstants;
import com.github.wxpay.sdk.WXPayUtil;
import java.util.HashMap;
import java.util.Map;
public class WechatPayExample {
public static void main(String[] args) throws Exception {
// 實(shí)現(xiàn) WXPayConfig 接口
WXPayConfig config = new WXPayConfig() {
@Override
public String getAppID() {
return "your_app_id";
}
@Override
public String getMchID() {
return "your_mch_id";
}
@Override
public String getKey() {
return "your_api_key";
}
@Override
public InputStream getCertStream() {
// 加載商戶證書(shū)
return WechatPayExample.class.getResourceAsStream("/apiclient_cert.p12");
}
@Override
public int getHttpConnectTimeoutMs() {
return 8000;
}
@Override
public int getHttpReadTimeoutMs() {
return 10000;
}
};
WXPay wxpay = new WXPay(config, WXPayConstants.SignType.MD5);
// 組裝請(qǐng)求參數(shù)
Map<String, String> data = new HashMap<>();
data.put("body", "商品描述");
data.put("out_trade_no", "20250225001");
data.put("total_fee", "1");
data.put("spbill_create_ip", "127.0.0.1");
data.put("notify_url", "https://yourdomain.com/notify");
data.put("trade_type", "NATIVE");
// 調(diào)用統(tǒng)一下單接口
Map<String, String> resp = wxpay.unifiedOrder(data);
System.out.println(resp);
if ("SUCCESS".equals(resp.get("return_code")) && "SUCCESS".equals(resp.get("result_code"))) {
String codeUrl = resp.get("code_url");
System.out.println("生成的二維碼鏈接: " + codeUrl);
}
}
}
1.5 代碼解釋
- 實(shí)現(xiàn)
WXPayConfig接口:該接口用于配置微信支付的基本信息,如app_id、mch_id、api_key等。 - 創(chuàng)建
WXPay對(duì)象:使用配置信息創(chuàng)建WXPay對(duì)象,指定簽名類型為 MD5。 - 組裝請(qǐng)求參數(shù):根據(jù)業(yè)務(wù)需求組裝統(tǒng)一下單接口的請(qǐng)求參數(shù),如商品描述、訂單號(hào)、金額等。
- 調(diào)用統(tǒng)一下單接口:調(diào)用
unifiedOrder方法發(fā)起統(tǒng)一下單請(qǐng)求,返回支付結(jié)果信息。 - 獲取二維碼鏈接:如果下單成功,從返回結(jié)果中獲取
code_url,用于生成支付二維碼。
二、支付寶支付
2.1 基本概念
支付寶支付是螞蟻金服旗下的支付平臺(tái),同樣支持多種支付場(chǎng)景,如掃碼支付、電腦網(wǎng)站支付、手機(jī)網(wǎng)站支付等。Java 后端調(diào)用支付寶支付也是通過(guò)調(diào)用支付寶提供的 API 接口來(lái)實(shí)現(xiàn)。
2.2 前期準(zhǔn)備
- 注冊(cè)支付寶開(kāi)放平臺(tái)賬號(hào):登錄支付寶開(kāi)放平臺(tái)(支付寶開(kāi)放平臺(tái))進(jìn)行注冊(cè),創(chuàng)建應(yīng)用并獲取應(yīng)用 ID(
app_id)。 - 配置密鑰:生成應(yīng)用私鑰和公鑰,將公鑰上傳到支付寶開(kāi)放平臺(tái)。
- 配置支付參數(shù):在開(kāi)放平臺(tái)配置支付回調(diào)地址等參數(shù)。
2.3 配置依賴
在 pom.xml 中添加以下依賴:
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.10.115.ALL</version>
</dependency>
2.4 代碼示例:電腦網(wǎng)站支付
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
public class AlipayExample {
public static void main(String[] args) {
// 支付寶網(wǎng)關(guān)
String gatewayUrl = "https://openapi.alipay.com/gateway.do";
// 應(yīng)用 ID
String appId = "your_app_id";
// 應(yīng)用私鑰
String privateKey = "your_private_key";
// 支付寶公鑰
String alipayPublicKey = "your_alipay_public_key";
// 字符編碼格式
String charset = "UTF-8";
// 簽名方式
String signType = "RSA2";
// 支付成功回調(diào)地址
String returnUrl = "https://yourdomain.com/return";
// 支付結(jié)果通知地址
String notifyUrl = "https://yourdomain.com/notify";
// 創(chuàng)建 AlipayClient 對(duì)象
AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, appId, privateKey, "json", charset, alipayPublicKey, signType);
// 創(chuàng)建 AlipayTradePagePayRequest 對(duì)象
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(returnUrl);
alipayRequest.setNotifyUrl(notifyUrl);
// 組裝請(qǐng)求參數(shù)
alipayRequest.setBizContent("{\"out_trade_no\":\"20250225002\"," +
"\"total_amount\":\"0.01\"," +
"\"subject\":\"商品名稱\"," +
"\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
try {
// 調(diào)用支付接口
String result = alipayClient.pageExecute(alipayRequest).getBody();
System.out.println(result);
} catch (AlipayApiException e) {
e.printStackTrace();
}
}
}
2.5 代碼解釋
- 創(chuàng)建
AlipayClient對(duì)象:使用支付寶網(wǎng)關(guān)、應(yīng)用 ID、應(yīng)用私鑰、支付寶公鑰等信息創(chuàng)建AlipayClient對(duì)象。 - 創(chuàng)建
AlipayTradePagePayRequest對(duì)象:設(shè)置支付成功回調(diào)地址和支付結(jié)果通知地址。 - 組裝請(qǐng)求參數(shù):根據(jù)業(yè)務(wù)需求組裝支付請(qǐng)求的業(yè)務(wù)參數(shù),如訂單號(hào)、金額、商品名稱等。
- 調(diào)用支付接口:調(diào)用
pageExecute方法發(fā)起支付請(qǐng)求,返回支付頁(yè)面的 HTML 代碼。
三、注意事項(xiàng)
- 簽名驗(yàn)證:在與支付平臺(tái)交互過(guò)程中,要確保簽名的正確性,防止數(shù)據(jù)被篡改。
- 回調(diào)處理:支付完成后,支付平臺(tái)會(huì)向回調(diào)地址發(fā)送通知,要正確處理回調(diào)信息,更新訂單狀態(tài)。
- 異常處理:在調(diào)用支付接口時(shí),要對(duì)可能出現(xiàn)的異常進(jìn)行捕獲和處理,保證系統(tǒng)的穩(wěn)定性。
四、總結(jié)
通過(guò)以上步驟和代碼示例,我們可以看到 Java 后端調(diào)用微信支付和支付寶支付的基本流程。在實(shí)際開(kāi)發(fā)中,要根據(jù)具體的業(yè)務(wù)需求選擇合適的支付場(chǎng)景和接口,同時(shí)要注意支付安全和數(shù)據(jù)的準(zhǔn)確性。希望本文能幫助你順利實(shí)現(xiàn) Java 后端與微信支付和支付寶支付的對(duì)接。
到此這篇關(guān)于Java后端調(diào)用微信支付和支付寶支付的文章就介紹到這了,更多相關(guān)Java后端調(diào)用微信和支付寶支付內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis中如何查詢某個(gè)時(shí)間段內(nèi)的數(shù)據(jù)
這篇文章主要介紹了MyBatis中如何查詢某個(gè)時(shí)間段內(nèi)的數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
Java并發(fā)中的ABA問(wèn)題學(xué)習(xí)與解決方案
這篇文章主要介紹了Java并發(fā)中的ABA問(wèn)題學(xué)習(xí)與解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
Spring Cache與Redis結(jié)合的使用方式
這篇文章主要介紹了Spring Cache與Redis結(jié)合的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringCloud Gateway鑒權(quán)和跨域解決方案
網(wǎng)關(guān)是介于客戶端和服務(wù)器端之間的中間層,所有的外部請(qǐng)求都會(huì)先經(jīng)過(guò) 網(wǎng)關(guān)這一層,也就是說(shuō),API 的實(shí)現(xiàn)方面更多的考慮業(yè)務(wù)邏輯,而安全、性能、監(jiān)控可以交由 網(wǎng)關(guān)來(lái)做,這樣既提高業(yè)務(wù)靈活性又不缺安全性,本文給大家介紹SpringCloud Gateway鑒權(quán)和跨域解決方案,一起看看吧2023-11-11
從零開(kāi)始Mybatis連接數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Mybatis連接數(shù)據(jù)庫(kù)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
Java8 使用 stream().sorted()對(duì)List集合進(jìn)行排序的操作
這篇文章主要介紹了Java8 使用 stream().sorted()對(duì)List集合進(jìn)行排序的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
Spring Boot 中的 @PutMapping 注解原理及使用小結(jié)
在本文中,我們介紹了 Spring Boot 中的 @PutMapping 注解,它可以將 HTTP PUT 請(qǐng)求映射到指定的處理方法上,我們還介紹了 @PutMapping 注解的原理以及如何在 Spring Boot 中使用它,感興趣的朋友跟隨小編一起看看吧2023-12-12
Java微信小程序oss圖片上傳的實(shí)現(xiàn)方法
這篇文章主要介紹了Java微信小程序oss圖片上傳的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12

