package com.demodashi.pay.web;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;
import com.demodashi.pay.client.ClientResponseHandler;
import com.demodashi.pay.client.TenpayHttpClient;
import com.demodashi.pay.entity.UserVO;
import com.demodashi.pay.util.PayConfigUtil;
import com.demodashi.pay.util.RequestHandler;
import com.demodashi.pay.util.ResponseHandler;
import com.demodashi.pay.util.TenpayUtil;
import com.demodashi.pay.util.XMLUtil;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
/**
* 财付通支付测试
*
* @author Javid
*/
@Controller
public class PayController extends BaseController {
/**
*
* @date 2017年6月30日 上午11:35:05
* @author javid
* @Description: 财付通支付测试
* @param request
* @param response
* @return
* @throws UnsupportedEncodingException
*
*/
@RequestMapping("/pay.do")
@ResponseBody
public ModelAndView pay(HttpServletRequest request, HttpServletResponse response)
throws UnsupportedEncodingException {
// 创建支付请求对象
RequestHandler reqHandler = new RequestHandler(request, response);
// 设置密钥
reqHandler.setKey(PayConfigUtil.KEY);
// 设置支付网关
reqHandler.setGateUrl(PayConfigUtil.GateUrl); // 请求URL
// 设置支付参数
reqHandler.setParameter("partner", PayConfigUtil.PARTNER); // 商户号
reqHandler.setParameter("body", "测试"); // 商品描述
reqHandler.setParameter("out_trade_no", PayConfigUtil.OUT_TRADE_NO); // 订单编号
reqHandler.setParameter("total_fee", PayConfigUtil.TOTAL_FEE); // 价格的单位为分
reqHandler.setParameter("spbill_create_ip", PayConfigUtil.SPBILL_CREATE_IP); // 终端IP
reqHandler.setParameter("input_charsetParameter", "UTF-8"); // 字符编码
reqHandler.setParameter("sign_key_index", "1"); // 密钥序号
reqHandler.setParameter("bank_type", "DEFAULT"); // 银行类型(中介担保时此参数无效)
reqHandler.setParameter("fee_type", "1"); // 币种,1人民币
reqHandler.setParameter("return_url", PayConfigUtil.RETURN_URL); // 支付成功跳转URL
reqHandler.setParameter("notify_url", PayConfigUtil.NOTIFY_URL); // 回调URL
// 系统可选参数
reqHandler.setParameter("sign_type", "MD5"); // 签名类型,默认:MD5
reqHandler.setParameter("service_version", "1.0"); // 版本号,默认为1.0
reqHandler.setParameter("input_charset", "UTF-8"); // 字符编码
reqHandler.setParameter("sign_key_index", "1"); // 密钥序号
// 业务可选参数
reqHandler.setParameter("attach", ""); // 附加数据,原样返回
reqHandler.setParameter("product_fee", ""); // 商品费用,必须保证transport_fee +
// product_fee=total_fee
reqHandler.setParameter("transport_fee", "0"); // 物流费用,必须保证transport_fee
// +
// product_fee=total_fee
reqHandler.setParameter("time_start", TenpayUtil.getCurrTime()); // 订单生成时间,格式为yyyymmddhhmmss
reqHandler.setParameter("time_expire", ""); // 订单失效时间,格式为yyyymmddhhmmss
reqHandler.setParameter("buyer_id", ""); // 买方财付通账号
reqHandler.setParameter("goods_tag", ""); // 商品标记
reqHandler.setParameter("trade_mode", "1"); // 交易模式,1即时到账(默认),2中介担保,3后台选择(买家进支付中心列表选择)
reqHandler.setParameter("transport_desc", ""); // 物流说明
reqHandler.setParameter("trans_type", "1"); // 交易类型,1实物交易,2虚拟交易
reqHandler.setParameter("agentid", ""); // 平台ID
reqHandler.setParameter("agent_type", ""); // 代理模式,0无代理(默认),1表示卡易售模式,2表示网店模式
reqHandler.setParameter("seller_id", ""); // 卖家商户号,为空则等同于partner
// 请求的url
String requestUrl = reqHandler.getRequestURL();
// 获取debug信息,建议把请求和debug信息写入日志,方便定位问题
String debuginfo = reqHandler.getDebugInfo();
return new ModelAndView(new RedirectView(requestUrl));
}
/**
*
* @date 2017年6月30日 上午11:53:13
* @author javid
* @Description: 财付通后台通知回调
* @param request
* @param response
* @throws Exception
*
*/
@RequestMapping("/payNotify")
public void payNotify(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 创建支付应答对象
ResponseHandler resHandler = new ResponseHandler(request, response);
resHandler.setKey(PayConfigUtil.KEY);
System.out.println("后台回调返回参数:" + resHandler.getAllParameters());
// 判断签名
if (resHandler.isTenpaySign()) {
// 通知id
String notify_id = resHandler.getParameter("notify_id");
// 创建请求对象
RequestHandler queryReq = new RequestHandler(null, null);
// 通信对象
TenpayHttpClient httpClient = new TenpayHttpClient();
// 应答对象
ClientResponseHandler queryRes = new ClientResponseHandler();
// 通过通知ID查询,确保通知来至财付通
queryReq.init();
queryReq.setKey(PayConfigUtil.KEY);
queryReq.setGateUrl("https://gw.tenpay.com/gateway/simpleverifynotifyid.xml");
queryReq.setParameter("partner", PayConfigUtil.PARTNER);
queryReq.setParameter("notify_id", notify_id);
// 通信对象
httpClient.setTimeOut(5);
// 设置请求内容
httpClient.setReqContent(queryReq.getRequestURL());
System.out.println("验证ID请求字符串:" + queryReq.getRequestURL());
// 后台调用
if (httpClient.call()) {
// 设置结果参数
queryRes.setContent(httpClient.getResContent());
System.out.println("验证ID返回字符串:" + httpClient.getResContent());
queryRes.setKey(PayConfigUtil.KEY);
// 获取id验证返回状态码,0表示此通知id是财付通发起
String retcode = queryRes.getParameter("retcode");
// 商户订单号
String out_trade_no = resHandler.getParameter("out_trade_no");
// 财付通订单号
String transaction_id = resHandler.getParameter("transaction_id");
// 金额,以分为单位
String total_fee = resHandler.getParameter("total_fee");
// 如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee
String discount = resHandler.getParameter("discount");
// 支付结果
String trade_state = resHandler.getParameter("trade_state");
// 交易模式,1即时到账,2中介担保
String trade_mode = resHandler.getParameter("trade_mode");
// 判断签名及结果
if (queryRes.isTenpaySign() && "0".equals(retcode)) {
System.out.println("id验证成功");
if ("1".equals(trade_mode)) { // 即时到账
if ("0".equals(trade_state)) {
// ------------------------------
// 即时到账处理业务开始
// ------------------------------
// 处理数据库逻辑
// 注意交易单不要重复处理
// �
没有合适的资源?快使用搜索试试~ 我知道了~
财付通支付demo完整代码
共141个文件
jar:35个
class:26个
xml:15个
需积分: 31 11 下载量 30 浏览量
2017-07-06
14:47:35
上传
评论 1
收藏 24.33MB ZIP 举报
温馨提示
财付通支付demo完整代码
资源推荐
资源详情
资源评论
收起资源包目录
财付通支付demo完整代码 (141个子文件)
TenpayHttpClient.class 8KB
PayController.class 7KB
UserController.class 7KB
HttpClientUtil.class 7KB
ResponseHandler.class 5KB
RequestHandler.class 5KB
ClientResponseHandler.class 4KB
PayToolUtil.class 4KB
QRUtil.class 3KB
XMLUtil4jdom.class 3KB
XMLUtil.class 3KB
UserServiceImpl.class 3KB
TenpayUtil.class 2KB
HttpUtil.class 2KB
FileController.class 2KB
MD5Util.class 2KB
MD5Util.class 2KB
BaseController.class 2KB
BaseController.class 2KB
PayConfigUtil.class 2KB
UserVO.class 941B
UserVO.class 919B
PayConfigUtil.class 774B
ConstantBean.class 445B
ConstantBean.class 423B
UserService.class 244B
.classpath 1KB
org.eclipse.wst.common.component 688B
org.eclipse.wst.jsdt.ui.superType.container 49B
layer.css 11KB
layer.css 11KB
layer.css 11KB
layer.ext.css 3KB
layer.ext.css 3KB
layer.ext.css 3KB
loading-0.gif 6KB
loading-0.gif 6KB
loading-0.gif 6KB
loading-2.gif 2KB
loading-2.gif 2KB
loading-2.gif 2KB
loading-1.gif 701B
loading-1.gif 701B
loading-1.gif 701B
.gitignore 117B
aspectjweaver-1.8.2.jar 1.77MB
spring-context-4.3.3.RELEASE.jar 1.08MB
spring-core-4.3.3.RELEASE.jar 1.06MB
jackson-databind-2.1.0.jar 899KB
spring-webmvc-4.3.3.RELEASE.jar 892KB
spring-web-4.3.3.RELEASE.jar 794KB
spring-beans-4.3.3.RELEASE.jar 743KB
c3p0-0.9.1.2.jar 596KB
spring-orm-4.3.3.RELEASE.jar 466KB
core.jar 420KB
core.jar 420KB
core.jar 420KB
spring-jdbc-4.3.3.RELEASE.jar 416KB
spring-aop-4.3.3.RELEASE.jar 371KB
commons-configuration-1.9.jar 350KB
commons-lang3-3.1.jar 308KB
cglib-2.2.2.jar 280KB
commons-lang-2.6.jar 278KB
httpcore-4.3.jar 276KB
spring-tx-4.3.3.RELEASE.jar 261KB
spring-expression-4.3.3.RELEASE.jar 258KB
commons-beanutils-1.8.3.jar 227KB
jackson-core-2.1.0.jar 201KB
spring-context-support-4.3.3.RELEASE.jar 183KB
commons-io-2.4.jar 181KB
commons-dbcp-1.4.jar 157KB
jdom-1.1.jar 150KB
servlet-api-2.5.jar 103KB
commons-pool-1.5.4.jar 94KB
commons-logging-1.2.jar 60KB
commons-fileupload-1.2.2.jar 58KB
asm-3.3.1.jar 43KB
jackson-annotations-2.1.0.jar 33KB
aopalliance-1.0.jar 4KB
javax.inject-1.jar 2KB
PayController.java 13KB
TenpayHttpClient.java 10KB
HttpClientUtil.java 7KB
ResponseHandler.java 5KB
ClientResponseHandler.java 5KB
RequestHandler.java 4KB
TenpayUtil.java 3KB
XMLUtil.java 3KB
PayConfigUtil.java 2KB
FileController.java 2KB
MD5Util.java 1KB
BaseController.java 1KB
UserVO.java 570B
ConstantBean.java 276B
jquery-2.min.js 82KB
jquery-2.min.js 82KB
jquery-2.min.js 82KB
qrcode.js 32KB
layer.js 15KB
layer.js 15KB
共 141 条
- 1
- 2
资源评论
qq_35219340
- 粉丝: 1
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功