一、ACTION類關鍵程式碼沒用的包可以幹掉
import it.sauronsoftware.base64.Base64;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.dom4j.Document;
import org.springframework.stereotype.Controller;
import com.alibaba.fastjson.JSON;
import com.hzdracom.action.BaseAction;
import com.hzdracom.config.AlipayConfig;
import com.hzdracom.util.AlipaySubmit;
import com.hzdracom.util.HTTPService;
import com.hzdracom.util.UtilDate;
import com.hzlq.source.security.DESUtil;
/*
* 支付寶付款接口
* @author ZhuangZi
* @Directions
* @version $Id: AliPayAction.java,v 0.1 2013-3-27 下午04:49:57 ZhuangZi Exp $
*/
@Controller
public class AliPayAction extends BaseAction {
private String phoneCode;
private String totalfee;
/**
* 呼叫支付寶接口
* @author ZhuangZi
* @class com.hzdracom.alipay.action.AliPayAction
* @method AliPay
* @Directions 呼叫支付寶接口
* @date 2013-3-27下午04:53:35 void
*/
public void pay() {
try {
/*1****產生支付寶交易號,依時間到毫秒等級*/
String out_trade_no = UtilDate.getOrderNum() ;
/*2*****↓↓↓↓↓↓↓↓↓↓把請求參數打包成數組↓↓↓↓↓↓↓↓↓↓*/
Map<String, String> sParaTemp = new HashMap<String, String>();
sParaTemp = getPayPrama(totalfee, out_trade_no);
/*3*****↓↓↓↓↓↓↓↓↓↓
String json = AlipaySubmit.buildRequest(sParaTemp, "get", "確認");
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out;
out = response.getWriter();
json = JSON.toJSONString(json);
out.write(json);
out.flush();
out.close();
} catch (IOException e) {
}
}
/**
*
* @author ZhuangZi
* @class com.hzdracom.alipay.action.AliPayAction
* @method GetPayPrama
* @Directions 封裝呼叫支付寶參數
* @date 2013-4-1下午05:26:11
* @param totalfee 金額
* @param out_trade_no 訂單編號
* @return Map<String,String>
*/
public Map<String, String> getPayPrama(String totalfee, String out_trade_no) {
Map<String, String> sParaTemp = new HashMap<String, String>();
sParaTemp.put("service", "create_direct_pay_by_user");
sParaTemp.put("partner", AlipayConfig.partner);
sParaTemp.put("_input_charset", AlipayConfig.input_charset);
sParaTemp.put("payment_type", AlipayConfig.payment_type);
/*伺服器非同步通知頁面路徑//需http://格式的完整路徑,不能加?id=123這類自訂參數*/
sParaTemp.put("notify_url", AlipayConfig.notify_url);
/*頁面跳轉同步通知頁路徑//需http://格式的完整路徑,不能加?id=123這類自訂參數,不能寫成http://localhost/*/
sParaTemp.put("return_url", AlipayConfig.return_url);
/*賣家支付寶帳戶*/
sParaTemp.put("seller_email", AlipayConfig.seller_email);
/*商戶訂單號碼*/
sParaTemp.put("out_trade_no", out_trade_no);
/*訂單名稱*/
sParaTemp.put("subject", AlipayConfig.subject);
/*付款金額*/
sParaTemp.put("total_fee", totalfee);
/*訂單描述*/
sParaTemp.put("body", AlipayConfig.body);
/*需以http://開頭的完整路徑,例如:http://www.xxx.com/myorder.html*/
sParaTemp.put("show_url", AlipayConfig.show_url);
//防釣魚時間戳
sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key);
/*客戶端的IP位址非區域網路的外網IP位址,如:221.0.0.1*/
sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip);
return sParaTemp;
}
public String getPhoneCode() {
return phoneCode;
}
public void setPhoneCode(String phoneCode) {
this.phoneCode = phoneCode;
}
public String getTotalfee() {
return totalfee;
}
public void setTotalfee(String totalfee) {
this.totalfee = totalfee;
}
}
二、AlipayConfig 類別是封裝支付寶介面參數
import com.hzdracom.util.UtilDate;
/* *
*類別名稱:AlipayConfig
*功能:基礎配置類別
*詳細:設定帳戶有關資訊及返迴路徑
*版本:3.3
*日期:2012-08-10
*說明:
*以下程式碼只是為了方便商家測試而提供的範例程式碼,商家可以依照自己網站的需要,按照技術文檔編寫,並非一定要使用該程式碼。
*此程式碼僅供學習和研究支付寶介面使用,只提供一個參考。
*提示:如何取得安全校驗碼和合作身分識別者ID
*1.用您的簽約支付寶帳號登入支付寶網站(www.alipay.com)
*2.點選「商家服務」(https://b.alipay.com/order/myOrder.htm)
*3.點選“查詢合作者身分(PID)”、“查詢安全校驗碼(Key)”
*安全校驗碼查看時,輸入付款密碼後,頁面呈現灰色的現象,怎麼辦?
*解決方法:
*1.檢查瀏覽器配置,不讓瀏覽器做彈框屏蔽設定
*2、更換瀏覽器或電腦,重新登入查詢。
*/
public class AlipayConfig {
//↓↓↓↓↓↓↓↓↓↓
// 合作身分識別者ID,以2088開頭由16位元純數字組成的字串
public static String partner = "2088001466494907";
// 商家的私鑰
public static String key = "fb30213vjc4k4oabt7z4q9e07sfmlmzr";
//↑↑↑↑↑↑↑↑↑↑
// 偵錯用,建立TXT日誌資料夾路徑
public static String log_path = "D://";
// 字元編碼格式目前支援gbk 或utf-8
public static String input_charset = "utf-8";
// 簽章方式不需修改
public static String sign_type = "MD5";
public static String payment_type = "1";
//必填,不能修改
//伺服器異步通知頁面路徑
public static String notify_url = "notify_url.jsp";
//需http://格式的完整路徑,不能加?id=123這類自訂參數
//頁面跳轉同步通知頁面路徑
public static String return_url = "return_url.jsp";
//需http://格式的完整路徑,不能加?id=123這類自訂參數,不能寫成http://localhost/
//賣家支付寶帳戶
public static String seller_email = "[email protected]";
//必填
//商家訂單編號
public static String out_trade_no =UtilDate.getOrderNum();
//商家網站訂單系統中唯一訂單編號,必填
//訂單名稱
public static String subject = "隱號儲值";
//必填
//訂單描述
public static String body = "隱號儲值";
//商品展示地址
public static String show_url ="";
//防釣魚時間戳
public static String anti_phishing_key="";
/*客戶端的IP位址非區域網路的外網IP位址,如:221.0.0.1*/
public static String exter_invoke_ip="";
}
三、strut設定檔
<action name="pay" method="pay">
</action>
以上屬於關鍵程式碼部分,需要注意的事項有:
1.需要把支付寶提供的介面的幾個類別引入到你的專案中,包括架包
2.notify_url.jsp和return_url.jsp位址要做好些成外網位址的全路徑
3.你自己的業務處理寫notify_url.jsp這個裡面,也可以直接寫個介面給支付寶介面調用