java 商戶PC端接入支付寶支付的實(shí)現(xiàn)方法
用戶在商戶網(wǎng)站上完成支付一、商戶申請(qǐng)流程和業(yè)務(wù)場(chǎng)景即時(shí)到賬:網(wǎng)上交易時(shí),買(mǎi)家的交易資金直接打入賣(mài)家支付寶賬戶,快速回籠交易資金。申請(qǐng)條件:
1) 申請(qǐng)前必須擁有經(jīng)過(guò)實(shí)名認(rèn)證的支付寶賬戶;
2) 企業(yè)或個(gè)體工商戶可申請(qǐng);
3) 需提供真實(shí)有效的營(yíng)業(yè)執(zhí)照,且支付寶賬戶名稱(chēng)需與營(yíng)業(yè)執(zhí)照主體一致;
4) 網(wǎng)站能正常訪問(wèn)且頁(yè)面顯示完整,網(wǎng)站需要明確經(jīng)營(yíng)內(nèi)容且有完整的商品信息;
5) 網(wǎng)站必須通過(guò)ICP備案。如為個(gè)體工商戶,網(wǎng)站備案主體需要與支付寶賬戶主體名稱(chēng)一致;
6) 如為個(gè)體工商戶,則團(tuán)購(gòu)不開(kāi)放,且古玩、珠寶等奢侈品、投資類(lèi)行業(yè)無(wú)法申請(qǐng)本產(chǎn)品;
使用場(chǎng)景:
買(mǎi)家選擇產(chǎn)品

買(mǎi)家選擇付款方式
買(mǎi)家選擇手機(jī)掃一掃付款或 買(mǎi)家選擇在電腦端登錄賬戶付款

買(mǎi)家選擇在電腦端登錄賬戶付款,并完成交易

買(mǎi)家選擇手機(jī)掃一掃并完成付款

查看交易記錄

商戶登入注冊(cè)入口:https://b.alipay.com/signing/productDetail.htm?productId=I1011000290000001000#J_detailItem3
支付寶支付實(shí)例下載:https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&docType=1
支付寶支付開(kāi)發(fā)者API:https://doc.open.alipay.com/docs/api.htm?docType=4&apiId=850
二、開(kāi)發(fā)步驟及說(shuō)明
- 注冊(cè)配置商戶環(huán)境
- 閱讀開(kāi)發(fā)者文檔API:alipay.trade.pay (統(tǒng)一收單交易支付接口)

下載DEMO的java版本 -
代碼結(jié)構(gòu):

1. index.jsp支付寶即時(shí)到賬接口調(diào)用頁(yè)面
<div class="content">
<form action="alipayapi.jsp" class="alipayform" method="POST" target="_blank">
<div class="element" style="margin-top:60px;">
<div class="legend">支付寶即時(shí)到賬交易接口快速通道 </div>
</div>
<div class="element">
<div class="etitle">商戶訂單號(hào):</div>
<div class="einput"><input type="text" name="WIDout_trade_no" id="out_trade_no"></div>
<br>
<div class="mark">注意:商戶訂單號(hào)(out_trade_no).必填(建議是英文字母和數(shù)字,不能含有特殊字符</div>
</div>
<div class="element">
<div class="etitle">商品名稱(chēng):</div>
<div class="einput"><input type="text" name="WIDsubject" value="test商品123"></div>
<br>
<div class="mark">注意:產(chǎn)品名稱(chēng)(subject),必填(建議中文,英文,數(shù)字,不能含有特殊字符)</div>
</div>
<div class="element">
<div class="etitle">付款金額:</div>
<div class="einput"><input type="text" name="WIDtotal_fee" value="0.01"></div>
<br>
<div class="mark">注意:付款金額(total_fee),必填(格式如:1.00,請(qǐng)精確到分)</div>
</div>
<div class="element">
<div class="etitle">商品描述:</div>
<div class="einput"><input type="text" name="WIDbody" value="即時(shí)到賬測(cè)試"></div>
<br>
<div class="mark">注意:商品描述(body),選填(建議中文,英文,數(shù)字,不能含有特殊字符)</div>
</div>
<div class="element">
<input type="submit" class="alisubmit" value ="確認(rèn)支付">
</div>
</form>
</div>
準(zhǔn)備用戶產(chǎn)品參數(shù)
點(diǎn)擊確認(rèn):提交到alipayapi.jsp
2.alipayapi.jsp獲取調(diào)用接口配置公共參數(shù)
////////////////////////////////////請(qǐng)求參數(shù)//////////////////////////////////////
//商戶訂單號(hào),商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號(hào),必填
String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//訂單名稱(chēng),必填
String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");
//付款金額,必填
String total_fee = new String(request.getParameter("WIDtotal_fee").getBytes("ISO-8859-1"),"UTF-8");
//商品描述,可空
String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");
//////////////////////////////////////////////////////////////////////////////////
//把請(qǐng)求參數(shù)打包成數(shù)組
Map<String, String> sParaTemp = new HashMap<String, String>();
sParaTemp.put("service", AlipayConfig.service);
sParaTemp.put("partner", AlipayConfig.partner);
sParaTemp.put("seller_id", AlipayConfig.seller_id);
sParaTemp.put("_input_charset", AlipayConfig.input_charset);
sParaTemp.put("payment_type", AlipayConfig.payment_type);
sParaTemp.put("notify_url", AlipayConfig.notify_url);
sParaTemp.put("return_url", AlipayConfig.return_url);
sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key);
sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip);
sParaTemp.put("out_trade_no", out_trade_no);
sParaTemp.put("subject", subject);
sParaTemp.put("total_fee", total_fee);
sParaTemp.put("body", body);
//其他業(yè)務(wù)參數(shù)根據(jù)在線開(kāi)發(fā)文檔,添加參數(shù).文檔地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.O9yorI&treeId=62&articleId=103740&docType=1
//如sParaTemp.put("參數(shù)名","參數(shù)值");
//建立請(qǐng)求
String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","確認(rèn)");
out.println(sHtmlText);
調(diào)用AlipaySubmit.buildRequest(sParaTemp,”get”,”確認(rèn)”);
3.AlipaySubmit組裝調(diào)用支付寶網(wǎng)管接口
/**
* 建立請(qǐng)求,以表單HTML形式構(gòu)造(默認(rèn))
* @param sParaTemp 請(qǐng)求參數(shù)數(shù)組
* @param strMethod 提交方式。兩個(gè)值可選:post、get
* @param strButtonName 確認(rèn)按鈕顯示文字
* @return 提交表單HTML文本
*/
public static String buildRequest(Map<String, String> sParaTemp, String strMethod, String strButtonName) {
//待請(qǐng)求參數(shù)數(shù)組
Map<String, String> sPara = buildRequestPara(sParaTemp);
List<String> keys = new ArrayList<String>(sPara.keySet());
StringBuffer sbHtml = new StringBuffer();
sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + ALIPAY_GATEWAY_NEW
+ "_input_charset=" + AlipayConfig.input_charset + "\" method=\"" + strMethod
+ "\">");
for (int i = 0; i < keys.size(); i++) {
String name = (String) keys.get(i);
String value = (String) sPara.get(name);
sbHtml.append("<input type=\"hidden\" name=\"" + name + "\" value=\"" + value + "\"/>");
}
//submit按鈕控件請(qǐng)不要含有name屬性
sbHtml.append("<input type=\"submit\" value=\"" + strButtonName + "\" style=\"display:none;\"></form>");
sbHtml.append("<script>document.forms['alipaysubmit'].submit();</script>");
return sbHtml.toString();
}
組裝成隱藏form表單自動(dòng)提交。

同步和異步返回頁(yè)面進(jìn)行對(duì)返回參數(shù)的獲取和對(duì)商戶本身業(yè)務(wù)邏輯處理
4.說(shuō)明
public class AlipayConfig {
//↓↓↓↓↓↓↓↓↓↓請(qǐng)?jiān)谶@里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 合作身份者ID,簽約賬號(hào),以2088開(kāi)頭由16位純數(shù)字組成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
public static String partner = "";
// 收款支付寶賬號(hào),以2088開(kāi)頭由16位純數(shù)字組成的字符串,一般情況下收款賬號(hào)就是簽約賬號(hào)
public static String seller_id = partner;
// MD5密鑰,安全檢驗(yàn)碼,由數(shù)字和字母組成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
public static String key = "";
// 服務(wù)器異步通知頁(yè)面路徑 需http://格式的完整路徑,不能加?id=123這類(lèi)自定義參數(shù),必須外網(wǎng)可以正常訪問(wèn)
public static String notify_url = "http://商戶網(wǎng)址/create_direct_pay_by_user-JAVA-UTF-8/notify_url.jsp";
// 頁(yè)面跳轉(zhuǎn)同步通知頁(yè)面路徑 需http://格式的完整路徑,不能加?id=123這類(lèi)自定義參數(shù),必須外網(wǎng)可以正常訪問(wèn)
public static String return_url = "http://商戶網(wǎng)址/create_direct_pay_by_user-JAVA-UTF-8/return_url.jsp";
// 簽名方式
public static String sign_type = "MD5";
// 調(diào)試用,創(chuàng)建TXT日志文件夾路徑,見(jiàn)AlipayCore.java類(lèi)中的logResult(String sWord)打印方法。
public static String log_path = "C:\\";
// 字符編碼格式 目前支持 gbk 或 utf-8
public static String input_charset = "utf-8";
// 支付類(lèi)型 ,無(wú)需修改
public static String payment_type = "1";
// 調(diào)用的接口名,無(wú)需修改
public static String service = "create_direct_pay_by_user";
//↑↑↑↑↑↑↑↑↑↑請(qǐng)?jiān)谶@里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//↓↓↓↓↓↓↓↓↓↓ 請(qǐng)?jiān)谶@里配置防釣魚(yú)信息,如果沒(méi)開(kāi)通防釣魚(yú)功能,為空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 防釣魚(yú)時(shí)間戳 若要使用請(qǐng)調(diào)用類(lèi)文件submit中的query_timestamp函數(shù)
public static String anti_phishing_key = "";
// 客戶端的IP地址 非局域網(wǎng)的外網(wǎng)IP地址,如:221.0.0.1
public static String exter_invoke_ip = "";
//↑↑↑↑↑↑↑↑↑↑請(qǐng)?jiān)谶@里配置防釣魚(yú)信息,如果沒(méi)開(kāi)通防釣魚(yú)功能,為空即可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
}
按照說(shuō)明配置
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA下lombok安裝及找不到get,set的問(wèn)題的解決方法
這篇文章主要介紹了IDEA下lombok安裝及找不到get,set的問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Java統(tǒng)計(jì)50個(gè)10到50之間整數(shù)的隨機(jī)出現(xiàn)次數(shù)
這篇文章主要為大家詳細(xì)介紹了Java統(tǒng)計(jì)50個(gè)10到50之間整數(shù)的隨機(jī)出現(xiàn)次數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Spring觀察者模式之事件發(fā)布訂閱實(shí)現(xiàn)和源碼詳解
這篇文章主要介紹了Spring觀察者模式之事件發(fā)布訂閱實(shí)現(xiàn)和源碼詳解,Spring認(rèn)為發(fā)布訂閱主題,其實(shí)可以理解為事件驅(qū)動(dòng)的編碼,先來(lái)實(shí)現(xiàn)以下Spring容器中的事件發(fā)布訂閱,需要的朋友可以參考下2024-01-01
java方法重寫(xiě)(重點(diǎn)講),方法重載問(wèn)題
這篇文章主要介紹了java方法重寫(xiě)(重點(diǎn)講),方法重載問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
POI通用導(dǎo)出Excel(.xls,.xlsx)的方法
這篇文章主要介紹了POI通用導(dǎo)出Excel(.xls,.xlsx)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
Java將數(shù)字金額轉(zhuǎn)為大寫(xiě)中文金額
這篇文章主要為大家詳細(xì)介紹了Java將數(shù)字金額轉(zhuǎn)為大寫(xiě)中文金額,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
Spring?中的?Service?有多個(gè)實(shí)現(xiàn)類(lèi)如何注入(多種方式)
這篇文章主要介紹了Spring?中的?Service?有多個(gè)實(shí)現(xiàn)類(lèi)如何注入,本文通過(guò)多種方式結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
springboot項(xiàng)目獲取resources相對(duì)路徑的方法
這篇文章主要介紹了springboot項(xiàng)目獲取resources相對(duì)路徑的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

