用Java写银联支付C扫B经验分享–框架SSM
POM.xml
<!-- C扫B支付 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.12</version>
</dependency>
jdbc配置文件-隐私信息已经藏起来了。请不要使用下面数据
// A code block
#全民付移动c扫b 接口公共参数配置-------------------------------------------------------
#银商平台接口地址
url=https://qr-test2.chinaums.com/netpay-route-server/api/
#商户号
mid=898340149000***
#终端号
tid=88880***
#机构商户号
instMid=QRPAYDEFA***
#来源系统
msgSrc=WWW.TEST.COM
#通讯秘钥
key=fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJkRrhKJwyrW*****
#全民付移动c扫b 获取二维码接口参数配置---------------------------------------------------
#消息类型:获取二维码
msgType_getQRCode=bills.getQRCode
#全民付移动c扫b 账单查询接口参数配置------------------------------------------------------
#消息类型:账单查询
msgType_query=bills.query
#全民付移动c扫b 订单退款接口参数配置------------------------------------------------------
#消息类型:订单退款
msgType_refund=bills.refund
#全民付移动c扫b 根据商户终端号查询此台终端最后一笔详单情况 接口参数配置------------------------------------------------------
#消息类型:根据商户终端号查询此台终端最后一笔详单情况
msgType_queryLastQRCode=bills.queryLastQRCode
#全民付移动c扫b 查询二维码静态信息 接口参数配置------------------------------------------------------
#消息类型:查询二维码静态信息
msgType_queryQRCodeInfo=bills.queryQRCodeInfo
#全民付移动c扫b 关闭二维码 接口参数配置------------------------------------------------------
#消息类型:关闭二维码
msgType_closeQRCode=bills.closeQRCode
Controller
// An highlighted block
package com.kingee.dlaq.lclp.controller;
import static com.kingee.hidp.common.util.CScanBUtil.makeSign;
import java.util.Date;
import java.util.Map;
import org.apache.commons.lang.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSON;
import com.kingee.dlaq.lclp.service.CScanBService;
import com.kingee.dlaq.lclp.util.Util;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiParam;
import net.sf.json.JSONObject;
/**
* @author 张
* @date 2020年7月10日 上午9:13:33
* @Description: C扫B
*/
@Api(value = "/lp", description = "银联支付")
@Controller
@RequestMapping("/lp/CSB")
public class CScanBController
{
@Autowired
private CScanBService cScanBService;
private String mid = "898340149000005";
private String tid = "88880001";
private String key = "fcAmtnx7MwismjWNhNKdHC44mNXtnEQeJkRrhKJwyrW2ysRR";
private String msgSrc = "WWW.TEST.COM";
private String instMid = "QRPAYDEFAULT";
// 获取二维码模块
@RequestMapping(value = "/getQrCode", method = RequestMethod.POST)
@ApiOperation(value = "获取二维码页面", notes = "获取二维码页面", response = JSON.class, httpMethod = "POST", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String getQrCode(
// @ApiParam(required = true, name = "departId", value = "部门ID") @RequestParam(value = "departId", required = true) String departId,
// @ApiParam(required = true, name = "billNo", value = "账单号(四位数字)") @RequestParam(value = "billNo", required = false) String billNo,
// @ApiParam(required = false, name = "billDate", value = "账单日期") @RequestParam(value = "billDate", required = false) Date billDate,
@ApiParam(required = true, name = "totalAmount", value = "支付总金额") @RequestParam(value = "totalAmount", required = true) String totalAmount
// @ApiParam(required = false, name = "msgId", value = "消息ID") @RequestParam(value = "msgId", required = false) String msgId,
// @ApiParam(required = false, name = "srcReserve", value = "请求系统预留字段") @RequestParam(value = "srcReserve", required = false) String srcReserve,
// @ApiParam(required = false, name = "billDesc", value = "账单描述") @RequestParam(value = "billDesc", required = false) String billDesc,
// @ApiParam(required = false, name = "divisionFlag", value = "分账标记") @RequestParam(value = "divisionFlag", required = false) Boolean divisionFlag,
// @ApiParam(required = false, name = "platformAmount", value = "平台商户分账金额") @RequestParam(value = "platformAmount", required = false) BigDecimal platformAmount,
// @ApiParam(required = false, name = "goods", value = "商户信息") @RequestParam(value = "goods", required = false) JSON goods,
// @ApiParam(required = false, name = "subOrders", value = "子商户信息") @RequestParam(value = "subOrders", required = false) JSON subOrders,
// @ApiParam(required = false, name = "memberId", value = "会员号") @RequestParam(value = "memberId", required = false) String memberId,
// @ApiParam(required = false, name = "counterNo", value = "桌号、柜台号、房间号") @RequestParam(value = "counterNo", required = false) String counterNo,
// @ApiParam(required = false, name = "expireTime", value = "账单过期时间,为空则不过期") @RequestParam(value = "expireTime", required = false) Date expireTime,
// @ApiParam(required = false, name = "notifyUrl", value = "支付结果通知地址") @RequestParam(value = "notifyUrl", required = false) String notifyUrl,
// @ApiParam(required = false, name = "returnUrl", value = "网页跳转地址") @RequestParam(value = "returnUrl", required = false) String returnUrl,
// @ApiParam(required = false, name = "qrCodeId", value = "二维码ID") @RequestParam(value = "qrCodeId", required = false) String qrCodeId,
// @ApiParam(required = false, name = "systemId", value = "系统ID") @RequestParam(value = "systemId", required = false) String systemId,
// @ApiParam(required = false, name = "secureTransaction", value = "担保交易标识") @RequestParam(value = "secureTransaction", required = false) String secureTransaction,
// @ApiParam(required = false, name = "walletOption", value = "钱包选项") @RequestParam(value = "walletOption", required = false) String walletOption,
// @ApiParam(required = false, name = "name", value = "实名认证姓名") @RequestParam(value = "name", required = false) String name,
// @ApiParam(required = false, name = "mobile", value = "实名认证手机号") @RequestParam(value = "mobile", required = false) String mobile,
// @ApiParam(required = false, name = "certType", value = "实名认证证件类型") @RequestParam(value = "certType", required = false) String certType,
// @ApiParam(required = false, name = "certNo", value = "实名认证证件号") @RequestParam(value = "certNo", required = false) String certNo,
// @ApiParam(required = false, name = "fixBuyer", value = "是否需要实名认证") @RequestParam(value = "fixBuyer", required = false) String fixBuyer,
// @ApiParam(required = false, name = "limitCreditCard ", value = "是否需要限制信用卡支付") @RequestParam(value = "limitCreditCard ", required = false) Boolean limitCreditCard,
// @ApiParam(required = false, name = "payInfoQueryAddr", value = "支付要素查询地址") @RequestParam(value = "payInfoQueryAddr", required = false) String payInfoQueryAddr,
// @ApiParam(required = false, name = "installmentNumber", value = "花呗分期数") @RequestParam(value = "installmentNumber", required = false) String installmentNumber,
// @ApiParam(required = false, name = "asynDivisionFlag", value = "异步分账标记") @RequestParam(value = "asynDivisionFlag", required = false) Boolean asynDivisionFlag
)
{
JSONObject json = new JSONObject();
json.put("mid", mid);
json.put("tid", tid);
json.put("msgType", "bills.getQRCode");
json.put("msgSrc", msgSrc);
json.put("instMid", instMid);
// 是否要在商户系统下单,看商户需求 createBill()
json.put("returnUrl", "http://47.99.194.20/DLAQ/app3/mobile/pay/payResult.html");
json.put("billNo", Util.genMerOrderId("3194"