maven搭建與第三方支付寶接口

首先  yum install  maven -y  

jar :mvn clean install -Dmaven.test.skip=true

war:mvn clean package -Dmaven.test.skip=true

nohup java -jar XXX.jar >temp.txt

說明:clean是清除之前的jar包,install是打包到本地(如果用deploy,是打包到遠程倉庫,具體我也不是特別清楚,可能會跟私服有關係吧)-Dmaven.test.skip=true是忽略測試代碼;

當mvn倉庫裏缺少jar包,同時又從中央倉庫自動下載不下來的時候,就需要自己下載jar包然後放倉庫裏了;

但是有時候只是簡單的把jar和source放倉庫的文件夾下,並不管用,這個時候你可以用命令把jar把打進去:

mvn install:install-file -Dfile=D:\xxx.jar -DgroupId=commons-dbcp -DartifactId= commons-dbcp -Dversion= 1.4 -Dpackaging=jar

-Dfile 是存在本地磁盤裏jar 的路徑,,後面的就不用說了吧!install:install-file 看清楚了,這個-file跟install是連着的

mvn -v //查看版本  
mvn archetype:create //創建 Maven 項目  
mvn compile //編譯源代碼  
mvn test-compile //編譯測試代碼  
mvn test //運行應用程序中的單元測試  
mvn site //生成項目相關信息的網站  
mvn package //依據項目生成 jar 文件  
mvn install //在本地 Repository 中安裝 jar  
mvn -Dmaven.test.skip=true //忽略測試文檔編譯  
mvn clean //清除目標目錄中的生成結果  
mvn clean compile //將.java類編譯爲.class文件  
mvn clean package //進行打包  
mvn clean test //執行單元測試  
mvn clean deploy //部署到版本倉庫  
mvn clean install //使其他項目使用這個jar,會安裝到maven本地倉庫中  
mvn archetype:generate //創建項目架構  
mvn dependency:list //查看已解析依賴  
mvn dependency:tree //看到依賴樹  
mvn dependency:analyze //查看依賴的工具  
mvn help:system //從中央倉庫下載文件至本地倉庫  
mvn help:active-profiles //查看當前激活的profiles  
mvn help:all-profiles //查看所有profiles  
mvn help:effective -pom //查看完整的pom信息 
 

 

 

alipay 的幾個內核功能文件:
======================================================================================================
AlipayFunction.java

 

package com.test.util.alipay;


import java.io.FileWriter;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;




public class AlipayFunction {
    /**
     * 功能:生成簽名結果
     * @param sArray 要簽名的數組
     * @param key 安全校驗碼
     * @return 簽名結果字符串
     */
    public static String BuildMysign(Map sArray, String key) {
        String prestr = CreateLinkString(sArray);  //把數組所有元素,按照“參數=參數值”的模式用“&”字符拼接成字符串
        prestr = prestr + key;                     //把拼接後的字符串再與安全校驗碼直接連接起來
        String mysign = Md5Encrypt.md5(prestr);
        return mysign;
    }
    
    /**
     * 功能:除去數組中的空值和簽名參數
     * @param sArray 簽名參數組
     * @return 去掉空值與簽名參數後的新簽名參數組
     */
    public static Map ParaFilter(Map sArray){
        List keys = new ArrayList(sArray.keySet());
        Map sArrayNew = new HashMap();
        
        for(int i = 0; i < keys.size(); i++){
            String key = (String) keys.get(i);
            String value = (String) sArray.get(key);
            
            if( value == null || value.equals("") ||
                    key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("sign_type")){
                continue;
            }
            
            sArrayNew.put(key, value);
        }
        
        return sArrayNew;
    }
    
    /**
     * 功能:把數組所有元素排序,並按照“參數=參數值”的模式用“&”字符拼接成字符串
     * @param params 需要排序並參與字符拼接的參數組
     * @return 拼接後字符串
     */
    public static String CreateLinkString(Map params){
        List keys = new ArrayList(params.keySet());
        Collections.sort(keys);

        String prestr = "";

        for (int i = 0; i < keys.size(); i++) {
            String key = (String) keys.get(i);
            String value = (String) params.get(key);

            if (i == keys.size() - 1) {//拼接時,不包括最後一個&字符
                prestr = prestr + key + "=" + value;
            } else {
                prestr = prestr + key + "=" + value + "&";
            }
        }

        return prestr;
    }
    
    /**
     * 功能:寫日誌,方便測試(看網站需求,也可以改成把記錄存入數據庫)
     * @param sWord 要寫入日誌裏的文本內容
     */
    public static void LogResult(String sWord){
        // 該文件存在於和應用服務器 啓動文件同一目錄下,文件名是alipay log加服務器時間
        try {
            FileWriter writer = new FileWriter("D:\\alipay_log" + System.currentTimeMillis() + ".txt");
            writer.write(sWord);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 功能:用於防釣魚,調用接口query_timestamp來獲取時間戳的處理函數
     * 注意:遠程解析XML出錯,與服務器是否支持SSL等配置有關
     * @param partner 合作身份者ID
     * @return 時間戳字符串
     * @throws IOException
     * @throws DocumentException
     * @throws MalformedURLException
     */
    
    public static String query_timestamp(String partner)
            throws MalformedURLException, DocumentException, IOException {
        String strUrl = "https://mapi.alipay.com/gateway.do?service=query_timestamp&partner="+partner;
        StringBuffer buf1 = new StringBuffer();
        SAXReader reader = new SAXReader();
        Document doc = reader.read(new URL(strUrl).openStream());
        
        List<Node> nodeList = doc.selectNodes("//alipay/*");
        
        for (Node node : nodeList) {
            // 截取部分不需要解析的信息
            if (node.getName().equals("is_success")
                    && node.getText().equals("T")) {
                // 判斷是否有成功標示
                List<Node> nodeList1 = doc.selectNodes("//response/timestamp/*");
                for (Node node1 : nodeList1) {
                    buf1.append(node1.getText());
                }
            }
        }
        
        return buf1.toString();
    }
}

 


======================================================================================================
AlipayNotify.java

 

package com.test.util.alipay;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

import com.test.constants.AlipayConfig;


public class AlipayNotify {
    /**
     * *功能:根據反饋回來的信息,生成簽名結果
     * @param Params 通知返回來的參數數組
     * @param key 安全校驗碼
     * @return 生成的簽名結果
     */
    public static String GetMysign(Map Params, String key){
        Map sParaNew = AlipayFunction.ParaFilter(Params);//過濾空值、sign與sign_type參數
        String mysign = AlipayFunction.BuildMysign(sParaNew, key);//獲得簽名結果
        
        return mysign;
    }
    
    /**
    * *功能:獲取遠程服務器ATN結果,驗證返回URL
    * @param notify_id 通知校驗ID
    * @return 服務器ATN結果
    * 驗證結果集:
    * invalid命令參數不對 出現這個錯誤,請檢測返回處理中partner和key是否爲空
    * true 返回正確信息
    * false 請檢查防火牆或者是服務器阻止端口問題以及驗證時間是否超過一分鐘
    */
    public static String Verify(String notify_id){
        //獲取遠程服務器ATN結果,驗證是否是支付寶服務器發來的請求
        String transport = AlipayConfig.transport;
        String partner = AlipayConfig.partner;
        String veryfy_url = "";
        if(transport.equalsIgnoreCase("https")){
            veryfy_url = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify";
        } else{
            veryfy_url = "http://notify.alipay.com/trade/notify_query.do?";
        }
        veryfy_url = veryfy_url + "&partner=" + partner + "¬ify_id=" + notify_id;
        
        String responseTxt = CheckUrl(veryfy_url);
        
        return responseTxt;
    }
    
    /**
    * *功能:獲取遠程服務器ATN結果
    * @param urlvalue 指定URL路徑地址
    * @return 服務器ATN結果
    * 驗證結果集:
    * invalid命令參數不對 出現這個錯誤,請檢測返回處理中partner和key是否爲空
    * true 返回正確信息
    * false 請檢查防火牆或者是服務器阻止端口問題以及驗證時間是否超過一分鐘
    */
    public static String CheckUrl(String urlvalue){
        String inputLine = "";

        try {
            URL url = new URL(urlvalue);
            HttpURLConnection urlConnection = (HttpURLConnection) url
                    .openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    urlConnection.getInputStream()));
            inputLine = in.readLine().toString();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return inputLine;
    }
}

 

======================================================================================================
AlipayService.java

 

package com.test.util.alipay;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class AlipayService {
    /**
     * 功能:構造表單提交HTML
     * @param partner 合作身份者ID
     * @param seller_email 簽約支付寶賬號或賣家支付寶帳戶
     * @param return_url 付完款後跳轉的頁面 要用 以http開頭格式的完整路徑,不允許加?id=123這類自定義參數
     * @param notify_url 交易過程中服務器通知的頁面 要用 以http開格式的完整路徑,不允許加?id=123這類自定義參數
     * @param show_url 網站商品的展示地址,不允許加?id=123這類自定義參數
     * @param out_trade_no 請與貴網站訂單系統中的唯一訂單號匹配
     * @param subject 訂單名稱,顯示在支付寶收銀臺裏的“商品名稱”裏,顯示在支付寶的交易管理的“商品名稱”的列表裏。
     * @param body 訂單描述、訂單詳細、訂單備註,顯示在支付寶收銀臺裏的“商品描述”裏
     * @param total_fee 訂單總金額,顯示在支付寶收銀臺裏的“應付總額”裏
     * @param paymethod 默認支付方式,四個值可選:bankPay(網銀); cartoon(卡通); directPay(餘額);  CASH(網點支付)
     * @param defaultbank 默認網銀代號,代號列表見club.alipay.com/read.php?tid=8681379
     * @param encrypt_key 防釣魚時間戳
     * @param exter_invoke_ip 買家本地電腦的IP地址
     * @param extra_common_param 自定義參數,可存放任何內容(除等特殊字符外),不會顯示在頁面上
     * @param buyer_email 默認買家支付寶賬號
     * @param royalty_type 提成類型,該值爲固定值:10,不需要修改
     * @param royalty_parameters 提成信息集,與需要結合商戶網站自身情況動態獲取每筆交易的各分潤收款賬號、各分潤金額、各分潤說明。最多隻能設置10條
     * @param input_charset 字符編碼格式 目前支持 GBK 或 utf-8
     * @param key 安全校驗碼
     * @param sign_type 簽名方式 不需修改
     * @param key 安全校驗碼
     * @return 表單提交HTML文本
     */
    public static String BuildForm(String partner,
            String seller_email,
            String return_url,
            String notify_url,
            String show_url,
            String out_trade_no,
            String subject,
            String body,
            String total_fee,
            String paymethod,
            String defaultbank,
            String anti_phishing_key,
            String exter_invoke_ip,
            String extra_common_param,
            String buyer_email,
            String royalty_type,
            String royalty_parameters,
            String input_charset,
            String key,
            String sign_type,
            String it_b_pay){
        Map sPara = new HashMap();
        sPara.put("service","create_direct_pay_by_user");
        sPara.put("payment_type","1");
        sPara.put("partner", partner);
        sPara.put("seller_email", seller_email);
        sPara.put("return_url", return_url);
        sPara.put("notify_url", notify_url);
        sPara.put("_input_charset", input_charset);
        sPara.put("show_url", show_url);
        sPara.put("out_trade_no", out_trade_no);
        sPara.put("subject", subject);
        sPara.put("body", body);
        sPara.put("total_fee", total_fee);
        sPara.put("paymethod", paymethod);
        sPara.put("defaultbank", defaultbank);
        sPara.put("anti_phishing_key", anti_phishing_key);
        sPara.put("exter_invoke_ip", exter_invoke_ip);
        sPara.put("extra_common_param", extra_common_param);
        sPara.put("buyer_email", buyer_email);
        sPara.put("royalty_type", royalty_type);
        sPara.put("royalty_parameters", royalty_parameters);
        sPara.put("it_b_pay", it_b_pay);
        
        Map sParaNew = AlipayFunction.ParaFilter(sPara); //除去數組中的空值和簽名參數
        String mysign = AlipayFunction.BuildMysign(sParaNew, key);//生成簽名結果
        
        StringBuffer sbHtml = new StringBuffer();
        List keys = new ArrayList(sParaNew.keySet());
        String gateway = "https://www.alipay.com/cooperate/gateway.do?";
        
        //GET方式傳遞
        //sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + gateway + "_input_charset=" + input_charset + "\" method=\"get\">");
        //POST方式傳遞(GET與POST二必選一)
        sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + gateway + "_input_charset=" + input_charset + "\" method=\"post\">");
        
        for (int i = 0; i < keys.size(); i++) {
            String name = (String) keys.get(i);
            String value = (String) sParaNew.get(name);
            
            sbHtml.append("<input type=\"hidden\" name=\"" + name + "\" value=\"" + value + "\"/>");
        }
        sbHtml.append("<input type=\"hidden\" name=\"sign\" value=\"" + mysign + "\"/>");
        sbHtml.append("<input type=\"hidden\" name=\"sign_type\" value=\"" + sign_type + "\"/>");
        
        //submit按鈕控件請不要含有name屬性
        sbHtml.append("<input type=\"submit\" value=\"支付寶確認付款\"></form>");
        
        sbHtml.append("<script>document.forms['alipaysubmit'].submit();</script>");
        
        return sbHtml.toString();
    }
}

 

======================================================================================================
Md5Encrypt.java

 

package com.test.util.alipay;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import com.test.constants.AlipayConfig;

/**
* 功能:支付寶MD5加密處理核心文件,不需要修改
* 版本:3.1
* 修改日期:2010-11-01
* 說明:
* 以下代碼只是爲了方便商戶測試而提供的樣例代碼,商戶可以根據自己網站的需要,按照技術文檔編寫,並非一定要使用該代碼。
* 該代碼僅供學習和研究支付寶接口使用,只是提供一個
* */

public class Md5Encrypt {
    /**
     * Used building output as Hex
     */
    private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5', '6',
            '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    /**
     * 對字符串進行MD5加密
     *
     * @param text
     *            明文
     *
     * @return 密文
     */
    public static String md5(String text) {
        MessageDigest msgDigest = null;

        try {
            msgDigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            throw new IllegalStateException(
                    "System doesn't support MD5 algorithm.");
        }

        try {
            msgDigest.update(text.getBytes(AlipayConfig.input_charset));    //注意改接口是按照指定編碼形式簽名
 
        } catch (UnsupportedEncodingException e) {

            throw new IllegalStateException(
                    "System doesn't support your  EncodingException.");

        }

        byte[] bytes = msgDigest.digest();

        String md5Str = new String(encodeHex(bytes));

        return md5Str;
    }

    public static char[] encodeHex(byte[] data) {

        int l = data.length;

        char[] out = new char[l << 1];

        // two characters form the hex value.
        for (int i = 0, j = 0; i < l; i++) {
            out[j++] = DIGITS[(0xF0 & data[i]) >>> 4];
            out[j++] = DIGITS[0x0F & data[i]];
        }

        return out;
    }

}

 

======================================================================================================
AlipayConfig.java這裏是對賬號,Key,回調連接地址等一些設置

 

package com.test.constants;

import java.util.Properties;

import com.test.util.PropertiesUtil;

public class AlipayConfig {
    
    private static AlipayConfig  alconfig = null;
    private AlipayConfig(){
        
    }
     public static AlipayConfig getInstance(){
        
        if(alconfig==null){
            alconfig = new AlipayConfig();
        }
        
        return alconfig;
    }
    
    // 如何獲取安全校驗碼和合作身份者ID
    // 1.訪問支付寶商戶服務中心(b.alipay.com),然後用您的簽約支付寶賬號登陸.
    // 2.訪問“技術服務”→“下載技術集成文檔”(https://b.alipay.com/support/helperApply.htm?action=selfIntegration)
    // 3.在“自助集成幫助”中,點擊“合作者身份(Partner ID)查詢”、“安全校驗碼(Key)查詢”

    // ↓↓↓↓↓↓↓↓↓↓請在這裏配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    // 合作身份者ID,以2088開頭由16位純數字組成的字符串
    public static String it_b_pay = "1h";

    public static String partner = "2088601003079118";

    public static String service = "create_direct_pay_by_user";
    // 交易安全檢驗碼,由數字和字母組成的32位字符串    
    public static String key = "zxcdvxgksaam2zjrmv5cv0p4jqesaioh";

    // 簽約支付寶賬號或賣家收款支付寶帳戶
    public static String seller_email = "[email protected]";
    // 讀配置文件

    // notify_url 交易過程中服務器通知的頁面 要用 http://格式的完整路徑,不允許加?id=123這類自定義參數
     public static String notify_url ="http:www.xxx.com/projectName/alipayTrade.action";


    // 付完款後跳轉的頁面 要用 http://格式的完整路徑,不允許加?id=123這類自定義參數
    // return_url的域名不能寫成http://localhost/js_jsp_utf8/return_url.jsp,否則會導致return_url執行無效
    //public static String return_url = "http:www.xxx.com/projectName/alipayTrade.action";

    // 網站商品的展示地址,不允許加?id=123這類自定義參數
    public static String show_url = "http://www.alipay.com";

    // 收款方名稱,如:公司名稱、網站名稱、收款人姓名等
    public static String mainname = "收款方名稱";
    // ↑↑↑↑↑↑↑↑↑↑請在這裏配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    // 字符編碼格式 目前支持 gbk 或 utf-8
    public static String input_charset = "UTF-8";

    // 簽名方式 不需修改
    public static String sign_type = "MD5";

    // 訪問模式,根據自己的服務器是否支持ssl訪問,若支持請選擇https;若不支持請選擇http
    public static String transport = "http";
}

 

===============================================================================================================

下面是一個簡單的應用流程:
從JSP調用的就不說了,因爲這也就只是傳給後臺你要買的東西是什麼,價格多少等一些參數。
這裏介紹一下後臺處理的:

PaymentAction.java

 

/**
     * 獲取支付寶交易訂單號
     * @return
     */
    public synchronized static String getOrderNum(){
        Date date=new Date();
        DateFormat df=new SimpleDateFormat("yyyyMMddHHmmssSSS");
        return df.format(date);
    }


    protected HttpServletRequest getRequest() {
        return ServletActionContext.getRequest();
    }



//支付寶交易訂單號
String orderNum = getOrderNum();

// 此次交易的總金額
getRequest().setAttribute("totalMoney","0.01");
//此次交易的訂單號
getRequest().setAttribute("out_trade_no", orderNum);
//商品名稱描述
getRequest().setAttribute("subject", "商品名稱");


//這裏省略了將此次訂單信息存到數據庫的流程

 

===============================================================================================================
alipay.jsp

 

<%@page import="com.test.constants.AlipayConfig"%>
<%@page import="com.test.util.alipay.UtilDate"%>
<%@page import="com.test.util.alipay.AlipayService"%>
<%
    /*
    功能:設置商品有關信息(入口頁)
     *詳細:該頁面是接口入口頁面,生成支付時的URL
     *版本:3.1
     *日期:2010-11-01
     *說明:
     *以下代碼只是爲了方便商戶測試而提供的樣例代碼,商戶可以根據自己網站的需要,按照技術文檔編寫,並非一定要使用該代碼。
     *該代碼僅供學習和研究支付寶接口使用,只是提供一個參考。
    
     *************************注意*****************
    如果您在接口集成過程中遇到問題,
    您可以到商戶服務中心(https://b.alipay.com/support/helperApply.htm?action=consultationApply),提交申請集成協助,我們會有專業的技術工程師主動聯繫您協助解決,
    您也可以到支付寶論壇(http://club.alipay.com/read-htm-tid-8681712.html)尋找相關解決方案
    要傳遞的參數要麼不允許爲空,要麼就不要出現在數組與隱藏控件或URL鏈接裏。
     **********************************************
     */
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>test</title>
        <link rel="SHORTCUT ICON" href="favicon.ico">
<meta name="keywords" content="" />
<meta name="description" content="" />
<style type="text/css">
.font_content{
    font-family:"宋體";
    font-size:14px;
    color:#FF6600;
}
.font_title{
    font-family:"宋體";
    font-size:16px;
    color:#FF0000;
    font-weight:bold;
}
table{
    border: 1px solid #CCCCCC;
}
        </style>
        <script type="text/javascript">
          var _gaq = _gaq || [];
          _gaq.push(['_setAccount', 'UA-25469955-1']);
          _gaq.push(['_trackPageview']);
        
        
          (function() {
            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
          })();
    </script>
    </head>
    <%
            //request.setCharacterEncoding("UTF-8");
            //AlipyConfig.java中配置信息(不可以修改)
            String input_charset = AlipayConfig.getInstance().input_charset;
            String sign_type = AlipayConfig.getInstance().sign_type;
            String seller_email = AlipayConfig.getInstance().seller_email;
            String partner = AlipayConfig.getInstance().partner;
            String key = AlipayConfig.getInstance().key;

            String show_url = AlipayConfig.getInstance().show_url;
            String notify_url = AlipayConfig.getInstance().notify_url;
            String return_url = AlipayConfig.getInstance().return_url;
            String it_b_pay = AlipayConfig.getInstance().it_b_pay;
            
            ///////////////////////////////////////////////////////////////////////////////////
            
            //以下參數是需要通過下單時的訂單數據傳入進來獲得
            //必填參數
            String out_trade_no = (String)request.getAttribute("out_trade_no");//請與貴網站訂單系統中的唯一訂單號匹配
            //訂單名稱,顯示在支付寶收銀臺裏的“商品名稱”裏,顯示在支付寶的交易管理的“商品名稱”的列表裏。
            String subject = (String)request.getAttribute("subject");
            //訂單描述、訂單詳細、訂單備註,顯示在支付寶收銀臺裏的“商品描述”裏
            String body = (String)request.getAttribute("body");
            //訂單總金額,顯示在支付寶收銀臺裏的“應付總額”裏
            String total_fee = (String)request.getAttribute("totalMoney");
            
            //擴展功能參數——默認支付方式
           // String pay_mode = request.getParameter("pay_bank");
            String paymethod = "";        //默認支付方式,四個值可選:bankPay(網銀); cartoon(卡通); directPay(餘額); CASH(網點支付)
            String defaultbank = "";    //默認網銀代號,代號列表見http://club.alipay.com/read.php?tid=8681379
            /*if(pay_mode.equals("directPay")){
                paymethod = "directPay";
            }
            else{
                paymethod = "bankPay";
                defaultbank = pay_mode;
            }*/
            
            //擴展功能參數——防釣魚
            //請慎重選擇是否開啓防釣魚功能
            //exter_invoke_ip、anti_phishing_key一旦被設置過,那麼它們就會成爲必填參數
            //開啓防釣魚功能後,服務器、本機電腦必須支持遠程XML解析,請配置好該環境。
            //建議使用POST方式請求數據
            String anti_phishing_key  = "";                //防釣魚時間戳
            String exter_invoke_ip= "";                    //獲取客戶端的IP地址,建議:編寫獲取客戶端IP地址的程序
            //如:
            //anti_phishing_key = AlipayFunction.query_timestamp(partner);    //獲取防釣魚時間戳函數
            //exter_invoke_ip = "202.1.1.1";
            
            //擴展功能參數——其他
            String extra_common_param = "";                //自定義參數,可存放任何內容(除=、&等特殊字符外),不會顯示在頁面上
            String buyer_email = "137672927";                    //默認買家支付寶賬號
            String extend_param = "";
            
            
            //擴展功能參數——分潤(若要使用,請按照註釋要求的格式賦值)
            String royalty_type = "";                    //提成類型,該值爲固定值:10,不需要修改
            String royalty_parameters ="";
            //提成信息集,與需要結合商戶網站自身情況動態獲取每筆交易的各分潤收款賬號、各分潤金額、各分潤說明。最多隻能設置10條
            //各分潤金額的總和須小於等於total_fee
            //提成信息集格式爲:收款方Email_1^金額1^備註1|收款方Email_2^金額2^備註2
            //如:
            //royalty_type = "10"
            //royalty_parameters    = "[email protected]^0.01^分潤備註一|[email protected]^0.01^分潤備註二"
            
            
            //之前設置的1h將返回
            //錯誤描述: 抱歉,商戶沒有開通自定義超時權限,請聯繫您的商家。
            //錯誤代碼: SELF_TIMEOUT_NOT_SUPPORT
            
            it_b_pay="";
            
            //構造函數,生成請求URL
            String sHtmlText = AlipayService.BuildForm(partner,seller_email,return_url,notify_url,show_url,out_trade_no,
            subject,body,total_fee,paymethod,defaultbank,anti_phishing_key,exter_invoke_ip,extra_common_param,buyer_email,
            royalty_type,royalty_parameters,input_charset,key,sign_type,it_b_pay);
    %>

    <body>
        <table align="center" width="350" cellpadding="5" cellspacing="0">
            <tr>
                <td align="center" class="font_title" colspan="2">訂單確認</td>
            </tr>
            <tr>
                <td class="font_content" align="right">訂單號:</td>
                <td class="font_content" align="left"><%=out_trade_no%></td>
            </tr>
            <tr>
                <td class="font_content" align="right">付款總金額:</td>
                <td class="font_content" align="left"><%=total_fee%></td>
            </tr>
            <tr>
                <td align="center" colspan="2"><%=sHtmlText%></td>
            </tr>
        </table>
    </body>
</html>

 

===============================================================================================================
支付寶回調的接口:AlipayNotify.java

 

package com.test.action.payment;

import java.util.Date;
import java.util.List;

import com.test.action.base.BaseAction;
import com.test.dao.model.paymentcenter.OrderForm;
import com.test.dao.model.paymentcenter.OrderList;
import com.test.dao.model.paymentcenter.UserPurview;

public class AlipayNotify extends BaseAction {

    private static final long serialVersionUID = 1L;
    private String buyer_email;
    private long buyer_id;
    private String exterface;
    private String is_success;
    private String notify_id;
    private String notify_time;
    private String notify_type;
    private String out_trade_no;
    private String payment_type;
    private String seller_email;
    private long seller_id;
    private String subject;
    private float total_fee;
    private String trade_no;
    private String trade_status;
    private String sign;
    private String sign_type;
    private OrderForm of;

    //……這裏省去了get和set方法
………………………………………………………………

    // 處理支付寶傳過來的參數信息
    public String alipayTrade() throws Exception {

        if (this.is_success.equalsIgnoreCase("T")
                && "TRADE_SUCCESS".equalsIgnoreCase(this.trade_status)) {

            of = (OrderForm) orderFormService
                    .findOrderFormsByOut_trade_no(this.out_trade_no);

            if (of != null) {
                of.setTradeStatus(1);
                of.setTradeNo(this.trade_no);
                of.setNotifyTime(new Date());                
                orderFormService.updateOldModel(of); // 更新

                List<OrderList> orderList = orderListService
                        .findOrderFormsByOutTradeNo(this.out_trade_no);
                for (OrderList ol : orderList) {
                    //這裏省去了處理訂單邏輯代碼……………………
                }
            }
            //回調成功之後,給支付寶返回一個 "success" 字符就可以了
            return SUCCESS;

        }

        return "failure";

    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章