微信云支付文档:https://cloud.tencent.com/document/product/569/9806
一下内容包括数据库表设置,微信和支付宝扫码接口源码,支付成功回调处理源码
下载文档地址:
下载的文件有对应的demo
完成对应的要求注册:
配置云支付回调地址
完成以上可以开发了
// 调用扫码接口,主要目的把二维码返回到前端
/* appId 记录ID
* 支付类型 1-微信支付 2-支付宝 3-会员卡 payType
* */
public void codeUrl(Integer appId,Integer payType){
//查询订单
//查询支付配置 ---一下主要是早数据库查询对应的门店信息 payConfig
//查询门店配置 payShopConfig
// 云支付订单前缀 out_trade_no_prefix
//sdk初始化
init(payConfig,payShopConfig);
if () {
/* // 由客户端生成的订单号
String scanCodePayOutTradeNo = serialService.generatorBillNo(out_trade_no_prefix, -1)+"-yyzx";
sysAppopen.setOrderNo(scanCodePayOutTradeNo);
sysAppopenService.update(sysAppopen);*/
//创建扫码支付对象
ScanCodePayRequest scanCodePayRequest = new ScanCodePayRequest();
// 1.微信支付 2.支付宝
scanCodePayRequest.setPay_platform(payType);
// 订单总金额,单位:分
Long total_fee = (new BigDecimal(100)).longValue();
scanCodePayRequest.setTotal_fee(total_fee);
scanCodePayRequest.setOut_trade_no("单号");
//订单简介
scanCodePayRequest.setBody("应用商店商品购买");
// 商品 id (没有商品ID 只有订单编号) 去掉 云支付订单前缀 就是订单编号
scanCodePayRequest.setProduct_id("订单号");
scanCodePayRequest.setTime_expire(CommonUtils.timeExpire(60 * 1440));
String codeUrl = CloudPay.getInstance().scanCodePay(scanCodePayRequest);
System.out.println(codeUrl);
}else {
System.out.println("购买失败! 请稍后重试.");
}
}
/*
* payConfig 自己定义的实体类 支付配置
* payShopConfig 自己定义实体类 门店配
* */
public void init(PayConfig payConfig, PayShopConfig payShopConfig) {
// 此处填写商户的authen_key
String authenKey = payConfig.getAuthenKey() ;
Account account = new Account(); // 实体类
// 服务商ID
account.setOut_mch_id(payConfig.getOutMchId());
// 商户ID
account.setOut_sub_mch_id(payConfig.getOutSubMchId());
// 门店ID
account.setOut_shop_id(payShopConfig.getOutShopId());
// 设备id
account.setDevice_id(payShopConfig.getDeviceId());
// 店员id
account.setStaff_id(payShopConfig.getStaffId());
Terminal terminal = new Terminal();
// 终端类型,
terminal.setTerminal_type(TerminalType.WINDOWS.getCode());
// 子终端端类型 默认900
terminal.setSub_terminal_type(900);
// 刷卡支付特有,每个收银终端的唯⼀码(刷卡支付必填) 还没有刷卡支付默认 01-01-01-01-01-01
terminal.setMachine_no("01-01-01-01-01-01");
terminal.setSpbill_create_ip(payConfig.getSpbillCreateIp());
CloudPay.init(account, authenKey, terminal);
}
// 回调方法
public String saveOrderYunZhiFu(HttpServletRequest request) {
byte buffer[] = getRequestPostBytes(request);
String charEncoding = request.getCharacterEncoding();
if (charEncoding == null) {
charEncoding = "UTF-8";
}
String jsonString = new String(buffer, charEncoding);
System.out.println("-----------------------------进来了--------------------------------------");
System.out.println("-----------------------------"+jsonString+"--------------------------------------");
try {
request.setCharacterEncoding("utf-8");
String respString = "fail";
//获取支付回调的内容
String request_content = JSONObject.parseObject(jsonString).getString("request_content");
JSONObject requestContent = JSONObject.parseObject(request_content);
System.out.println("-----------------------------"+requestContent.toString()+"--------------------------------------");
//获取认证信息
/*JSONObject authenInfo = json.getJSONObject("authen_info");*/
/*logger.debug(authenInfo.toString());*/
/**
* 校验状态 以及 订单参数状态
*/
if(requestContent!=null) {
System.out.println("订单数据支付校验成功");
//支付商户信息
JSONObject payMchKey = requestContent.getJSONObject("pay_mch_key");
//订单信息
JSONObject orderContent = requestContent.getJSONObject("order_content");
//支付类型(1 微信支付 2.支付宝 3.会员卡)
payMchKey.getInteger("pay_platform");
//服务商账号
payMchKey.getString("out_mch_id");
//子商户账号
payMchKey.getString("out_sub_mch_id");
//唯一标识门店的账号
payMchKey.getString("out_shop_id");
//子商户订单号
orderContent.getString("out_trade_no");
//第三方支付平台的订单号
orderContent.getString("transaction_id");
//交易类型
orderContent.getInteger("trade_type");
//订单创建时间
new Date(orderContent.getLong("create_time"));
//订单总金额
BigDecimal totalFee = orderContent.getBigDecimal("total_fee").divide(new BigDecimal(100));
//商品或订单简要描述
orderContent.getString("body");
//货币类型
orderContent.getString("fee_type");
// 一下逻辑根据自己项目情况更新其状态
System.out.println("----------------------------订单状态 或者 明细表 修改失败----------------------------------");
respString = "success";
return respString;
}
System.out.println("出问题了");
return respString;
} catch (Exception e) {
e.printStackTrace();
return "fail";
}
}
public static byte[] getRequestPostBytes(HttpServletRequest request)
{
int contentLength = request.getContentLength();
if(contentLength<0){
return null;
}
byte buffer[] = new byte[contentLength];
for (int i = 0; i < contentLength;)
{
int readlen = request.getInputStream().read(buffer, i,
contentLength - i);
if (readlen == -1) {
break;
}
i += readlen;
}
return buffer;
}