如何用struts调用支付宝接口
一、action类关键代码 没用的包可以干掉
package com.hzdracom.alipay.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 类是封装支付宝接口参数
package com.hzdracom.config;
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 = "jjj@hzdracom.com";
//必填
//商户订单号
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" class="com.hzdracom.alipay.action.alipayaction">
</action>
以上属于关键代码部分,需要注意的事项有 :
1.需要把支付宝提供的接口的几个类引入到你的项目中,包括架包
2.notify_url.jsp和return_url.jsp地址要做好些成外网地址的全路径
3.你自己的业务处理写notify_url.jsp这个里面,也可以直接写个接口给支付宝接口调用