您的位置:首页 > 其它

支付宝demo

2017-06-05 08:35 253 查看
package com.huagu.pay.form;

import static com.huagu.pay.form.AlipayConfig.ALIPAY_PUBLIC_KEY;

import static com.huagu.pay.form.AlipayConfig.APP_ID;

import static com.huagu.pay.form.AlipayConfig.APP_PRIVATE_KEY;

import static com.huagu.pay.form.AlipayConfig.CHARSET_UTF8;

import static com.huagu.pay.form.AlipayConfig.FORMAT_JSON;

import static com.huagu.pay.form.AlipayConfig.SIGN_TYPE_RSA2;

import static com.huagu.pay.form.AlipayConfig.URL;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import org.apache.log4j.Logger;

import com.alipay.api.AlipayApiException;

import com.alipay.api.AlipayClient;

import com.alipay.api.DefaultAlipayClient;

import com.alipay.api.domain.AlipayTradePagePayModel;

import com.alipay.api.domain.AlipayTradeQueryModel;

import com.alipay.api.internal.util.AlipaySignature;

import com.alipay.api.request.AlipayTradePagePayRequest;

import com.alipay.api.request.AlipayTradeQueryRequest;

import com.alipay.api.response.AlipayTradeQueryResponse;

import cn.cerc.jbean.client.LocalService;

import cn.cerc.jbean.core.Application;

import cn.cerc.jbean.core.BookHandle;

import cn.cerc.jbean.core.ServerConfig;

import cn.cerc.jbean.form.IPage;

import cn.cerc.jdb.core.Record;

import cn.cerc.jdb.other.utils;

import cn.cerc.jmis.form.AbstractForm;

import cn.cerc.jmis.page.JsonPage;

import cn.cerc.jmis.page.JspPage;

import cn.cerc.jmis.page.RedirectPage;

import cn.cerc.jpage.core.UrlRecord;

/**

 * 支付宝电脑支付

 */

public class FrmAlipayPage extends AbstractForm {

private static final Logger log = Logger.getLogger(FrmAlipayPage.class);

@Override
public IPage execute() throws Exception {
JspPage page = new JspPage(this);

String subject ="VIP支付"; //getRequest().getParameter("subject");
String total_fee = "0.01";//getRequest().getParameter("total_amount");

String returnUrl = "FrmAlipayPage.return_url"; // 同步通知接口
String notifyUrl = "FrmAlipayPage.notify_url"; // 异步回调接口

// 商户订单号(16位) = 时间戳 + 随机数
/*String out_trade_no = String.valueOf(System.currentTimeMillis()) + utils.random(1000);*/
String orderId=this.getRequest().getParameter("orderId");
// 商品描述,可空
//TOOD 改成自己的body
String body = getRequest().getParameter("subject");

String strResult = new ServerConfig().getProperty("app.rootSite") + "/"
+ Application.getAppConfig().getPathForms() + "/";

// 1、实例化支付客户端
AlipayClient client = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT_JSON, CHARSET_UTF8,
ALIPAY_PUBLIC_KEY, SIGN_TYPE_RSA2);

// 2、设置商户业务参数
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
model.setOutTradeNo(orderId);
model.setSubject(subject);
model.setBody(body);
model.setTotalAmount(total_fee);
model.setProductCode("FAST_INSTANT_TRADE_PAY");

// 3、封装支付请求
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
request.setBizModel(model);
request.setNotifyUrl(strResult + notifyUrl);
request.setReturnUrl(strResult + returnUrl);

// TODO  生成订单预支付记录
LocalService srv = new LocalService(this);
srv.setService("SvrModfiyPayLog");
Record headIn = srv.getDataIn().getHead();
headIn.setField("TradeNo_", orderId);
headIn.setField("Fee_", total_fee);
headIn.setField("Body_", subject);
headIn.setField("Platform_", 2);// 支付宝
headIn.setField("payStatus_", 1);
headIn.setField("orderId", orderId);
headIn.setField("OpenId_", getClient().getId());
if (!srv.exec()) {
page.setMessage(srv.getMessage());
return page;
}

// 调用SDK生成表单
try {
String form = client.pageExecute(request).getBody();
getResponse().setContentType("text/html;charset=" + CHARSET_UTF8);
getResponse().getWriter().write(form);
log.info(form);
getResponse().getWriter().flush();
getResponse().getWriter().close();
} catch (AlipayApiException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

/**
* 支付宝支付异步回调地址
*/
public IPage notify_url() throws AlipayApiException, IOException {
Map<String, String[]> params = getRequest().getParameterMap();
Map<String, String> items = new HashMap<String, String>();
for (String key : params.keySet()) {
String[] values = params.get(key);
String value = "";
for (int i = 0; i < values.length; i++) {
value = (i == values.length - 1) ? value + values[i] : value + values[i] + ",";
}
items.put(key, value);
}
log.info("已接受支付宝支付的异步通知,返回的所有参数值");
log.info(items);

// 支付回调验签
boolean checkSign = AlipaySignature.rsaCheckV1(items, ALIPAY_PUBLIC_KEY, CHARSET_UTF8, SIGN_TYPE_RSA2);
if (!checkSign) {
log.info("支付宝支付回调验证签名失败 failed");
getResponse().getWriter().write("fail");
return null;
} else {
log.info("支付宝支付回调验证签名成功 success");
}

String trade_status = items.get("trade_status");
if (!trade_status.equals("TRADE_FINISHED") || !"TRADE_SUCCESS".equals(trade_status)) {
log.info("fail trade_status : " + trade_status);
}

// 商户订单号
String out_trade_no = items.get("out_trade_no");

// 支付宝交易号
String trade_no = items.get("trade_no");

// 卖家支付宝账号
String seller_email = items.get("seller_email");

// 商品描述
String body = items.get("body");

// 订单金额
String total_amount = items.get("total_amount");

// TODO 1、更新当前支付订单状态
LocalService svr1 = new LocalService(this);
svr1.setService("SvrModfiyPayLog");
Record headIn1 = svr1.getDataIn().getHead();
headIn1.setField("TradeNo_", out_trade_no);
headIn1.setField("TransactionId_", trade_no);
headIn1.setField("Attach_", body);
headIn1.setField("MchId_", seller_email);
headIn1.setField("payStatus_", 1);
if (!svr1.exec()) {
log.info(svr1.getMessage());
throw new RuntimeException(svr1.getMessage());
}
String userCode = svr1.getDataOut().getHead().getString("UserCode_");

/*// 2、缴费登记增加一笔记录
BookHandle handle = new BookHandle(this, body);
LocalService svr2 = new LocalService(handle);
svr2.setService("TAppPay.append");
Record headIn2 = svr2.getDataIn().getHead();

// 平台使用费(暂时默认,后期选择类型)
headIn2.setField("UserCode_", userCode);
headIn2.setField("PayProject_", 0);
headIn2.setField("PayMoney_", total_amount);
headIn2.setField("TradeNo_", out_trade_no);

// 支付宝平台
headIn2.setField("PayType_", 2);
headIn2.setField("Remark_", "华筑");
if (!svr2.exec()) {
log.info(svr2.getMessage());
throw new RuntimeException(svr2.getMessage());
}*/
//修改用户开通时间
LocalService svr3 = new LocalService(this);
svr3.setService("SvrmodifyUser");
Record headIn3 = svr3.getDataIn().getHead();
headIn3.setField("UserCode", userCode);
headIn3.setField("orderId", trade_no);
//修改订单状态
LocalService svr2 = new LocalService(this);
svr2.setService("SvrModifyOrder");
Record headIn2 = svr2.getDataIn().getHead();
headIn2.setField("UserCode", userCode);
headIn2.setField("State", 1);
headIn2.setField("orderId", trade_no);
getResponse().getWriter().write("success");
return null;
}

/**
* 支付宝同步通知结果处理
*/
public IPage return_url() {
JsonPage jsonPage = new JsonPage(this);

// 获取支付宝支付同步通知返回的参数
Map<String, String[]> params = getRequest().getParameterMap();
Map<String, String> items = new HashMap<String, String>();
for (String key : params.keySet()) {
String[] values = params.get(key);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
items.put(key, valueStr);
}

// 商户订单号
String out_trade_no = items.get("out_trade_no");

// 支付宝交易号
String trade_no = items.get("trade_no");

// 创建支付宝对象
AlipayClient client = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT_JSON, CHARSET_UTF8,
ALIPAY_PUBLIC_KEY, SIGN_TYPE_RSA2);

// 统一收单线下交易查询
AlipayTradeQueryModel model = new AlipayTradeQueryModel();
model.setOutTradeNo(out_trade_no);
model.setTradeNo(trade_no);

// 发起查询请求
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
request.setBizModel(model);

try {
AlipayTradeQueryResponse response = client.execute(request);
log.info(response.getBody());

// TODO 改成你们的支付结果页面
UrlRecord url = new UrlRecord();
url.setSite("FrmMemberService");
url.addParam("url", "FrmMemberService");
if (response.isSuccess()) {
url.addParam("msg", "支付成功");
url.addParam("result", "true");
return new RedirectPage(this, url.getUrl());
} else {
url.addParam("msg", "支付失败,请联系客服核查");
url.addParam("result", "false");
return new RedirectPage(this, url.getUrl());
}
} catch (AlipayApiException e) {
e.printStackTrace();
}
return jsonPage;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  支付宝