package com.ejoysoft.ecton.web.controller.abcTrustPay;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.abc.pay.client.*;
import com.abc.pay.client.ebus.common.EBusMerchantCommonRequest;
import com.alibaba.fastjson.JSONObject;
import com.ejoysoft.ecton.common.lang.DateUtils;
import com.ejoysoft.ecton.common.util.WebUtils;
import com.ejoysoft.ecton.core.entity.PayOrder;
import com.ejoysoft.ecton.core.service.CardService;
import com.ejoysoft.ecton.core.service.PayOrderService;
import com.ejoysoft.ecton.core.vo.job.PayOrderJobVo;
import com.ejoysoft.ecton.web.controller.wechat.BaseWeChatController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import sun.misc.BASE64Decoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.*;
/**
* @Author: lgl 农行 商e付
* @Date: Created in 2018-7-5 9:29
*/
@Slf4j
@Controller
@RequestMapping("/member/abc")
public class AbcOrderController extends BaseWeChatController {
@Autowired
CardService cardService;
@Autowired
PayOrderService payOrderService;
//下单 之前订单已经在上一步生成 所需要这一步只有个订单号传递过来 ,测试的时候可以先把金钱写死
@RequestMapping("order")
public String list(String orderNo) throws UnsupportedEncodingException {
if (StrUtil.isBlank(orderNo)) {
return errorPage("未找到相应订单信息");
}
PayOrder order = payOrderService.selectByOrderNo(orderNo);
if (order.getPayStatus() != 0) {
return errorPage("未找到相应订单信息");
}
EBusMerchantCommonRequest eBusMerchantCommonRequest = new EBusMerchantCommonRequest();
eBusMerchantCommonRequest.dicRequest.put("PaymentType", "A"); //设定支付类型
eBusMerchantCommonRequest.dicRequest.put("PaymentLinkType","2"); //设定支付接入方式
eBusMerchantCommonRequest.dicRequest.put("ReceiveAccount", ""); //设定收款方账号
eBusMerchantCommonRequest.dicRequest.put("ReceiveAccName", ""); //设定收款方户名
eBusMerchantCommonRequest.dicRequest.put("NotifyType", "1"); //设定通知方式
eBusMerchantCommonRequest.dicRequest.put("ResultNotifyURL", getSchoolDomain()+"/member/abc/notifyUrl"); //设定通知URL地址
eBusMerchantCommonRequest.dicRequest.put("MerchantRemarks", "一卡通充值"); //设定附言
eBusMerchantCommonRequest.dicRequest.put("IsBreakAccount", "1"); //设定交易是否分账、交易是否支持向二级商户入账
eBusMerchantCommonRequest.dicRequest.put("SplitAccTemplate",""); //分账模版编号
eBusMerchantCommonRequest.dicRequest.put("TrxType", "PayReq");
LinkedHashMap dicOrder = new LinkedHashMap();
dicOrder.put("PayTypeID", "ImmediatePay"); //设定交易类型
dicOrder.put("OrderDate", DateUtils.getDate("yyyy/MM/dd")); //设定订单日期 (必要信息 - YYYY/MM/DD)
dicOrder.put("OrderTime", DateUtils.getDate("HH:MM:ss")); //设定订单时间 (必要信息 - HH:MM:SS)
dicOrder.put("orderTimeoutDate",""); //设定订单有效期
dicOrder.put("OrderNo", orderNo); //设定订单编号 (必要信息)
dicOrder.put("CurrencyCode", "156"); //设定交易币种
dicOrder.put("OrderAmount", order.getTotalFee().toString()); //设定交易金额
//dicOrder.put("OrderAmount", "0.01"); //设定交易金额
dicOrder.put("SubsidyAmount", ""); //设定补贴金额
dicOrder.put("Fee", ""); //设定手续费金额
dicOrder.put("AccountNo", ""); //设定支付账户
dicOrder.put("OrderDesc", "一卡通充值"); //设定订单说明
dicOrder.put("OrderURL",""); //设定订单地址
dicOrder.put("ReceiverAddress",""); //收货地址
dicOrder.put("InstallmentMark", "0"); //分期标识
// if (("1".equals(request.getParameter("InstallmentMark"))) && ("DividedPay".equals(request.getParameter("PayTypeID")))) {
// dicOrder.put("InstallmentCode", request.getParameter("InstallmentCode")); //设定分期代码
// dicOrder.put("InstallmentNum", request.getParameter("InstallmentNum")); //设定分期期数
// }
dicOrder.put("CommodityType", "0101"); //设置商品种类
dicOrder.put("BuyIP", HttpUtil.getClientIP(getReq()));
dicOrder.put("ExpiredDate", "30"); //设定订单保存时间
dicOrder.put("OrderItems", "[{\"ProductName\":\"一卡通\"}]");
// 二级子商户入账 SplitMerchantID 二级商户id
String splitAcc = "[{\"SplitMerchantID\":\"问银行要\",\"SplitAmount\":\""+order.getTotalFee().toString()+"\"}]";
dicOrder.put("SplitAccInfoItems", splitAcc);
eBusMerchantCommonRequest.dicRequest.put("Order", dicOrder);
JSON responseJson = eBusMerchantCommonRequest.extendPostRequest(1);
log.info("结果{}",responseJson.getIJsonString());
String returnCode = responseJson.GetKeyValue("ReturnCode");
if(returnCode.equals("0000")){//成功
String paymentURL = responseJson.GetKeyValue("PaymentURL");
String OneQRForAll = responseJson.GetKeyValue("OneQRForAll");
setAttr("OneQRForAll", OneQRForAll);//这个是生成二维码 供对方扫码用
setAttr("paymentURL", paymentURL);//返回的这个decode就是支付所需跳转的url 这个url可以直接跳转收银台
String tokenId = OneQRForAll.substring(OneQRForAll.lastIndexOf("token=")+6);
JSONObject json1 = new JSONObject();
json1.put("tokenID", tokenId);
json1.put("backURL", getSchoolDomain()+"/member/abc/notifyUrl");
JSONObject json = new JSONObject();
json.put("return", json1);
String tojsonstring=json.toJSONString();//将json格式的数据转换为字符格式
tojsonstring= URLEncoder.encode(tojsonstring,"utf-8");//将数据进行编码
String testUrl3 = "https://www.abchina.com/luascript/mobilePayLua/"+tojsonstring;
log.info(testUrl3);
setAttr("testUrl3", testUrl3);// 这个是掌银里支付链接
return "/wechat/pay/toAbcPay";
}else{//失败
return errorPage(responseJson.GetKeyValue("ErrorMessage"));
}
}
/**
* 异步通知请求
*
* @param request
* @param response
* @return void
* @author fyf
* @date 2020-04-02 9:31
**/
@RequestMapping("/notifyUrl")
public String notifyUrl(HttpServletRequest request, HttpServletResponse response) {
//因为支付回调一直验签失败 所以在此不做验签 解析出订单号 然后修改订单状态
String msg = null;
try {
msg = URLDecoder.decode(request.getParameter("MSG"), "UTF-8");
msg = Base64Code.Decode64(msg);
String tReturnCode = msg.substring(0, msg.indexOf("</ReturnCode>"));
log.info("tReturnCode:{}",tReturnCode);
if(tReturnCode.contains("0000")){
XMLDocument tResult2 = new XMLDocument(msg);
log.info("tResult2:{}",tResult2);
String str =
- 1
- 2
前往页