支付宝demo

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;
}




}

猜你喜欢

转载自blog.csdn.net/u013362412/article/details/72863792