package com.ruoyi.order.util.tencent.protocol; import com.ruoyi.order.util.SinataUtil; import com.ruoyi.order.util.tencent.common.Configure; import com.ruoyi.order.util.tencent.common.RandomStringGenerator; import com.ruoyi.order.util.tencent.common.Signature; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; /** * 请求统一下单-API需要提交的数据 * @author pan */ public class UnifiedorderReqData { //每个字段具体的意思请查看API文档 private String appid;//公众账号ID (内置) private String mch_id;//商户号 (内置) private String nonce_str;//随机字符串 (内置) private String sign;//签名 //接口调用需要的参数 private String body;//商品描述 private String out_trade_no;//商户订单号 private Integer total_fee;//总金额 private String spbill_create_ip;//终端IP private String notify_url;//通知地址 private String trade_type;//交易类型 private String openid;//用户标识 /** * 预支付请求需要的参数(获取微信统一下单-必填参数) * 公众账号ID appid (内置) * 商户号 mch_id (内置) * 随机字符串 nonce_str (内置) * 签名 sign (内置) * @param body 商品描述 * @param out_trade_no 商户订单号 * @param total_fee 总金额 (单位:分) * @param notify_url 通知地址 */ public UnifiedorderReqData(Integer apptype, String out_trade_no, String body, Double total_fee, String notify_url){ //乘客appID与商户号 this.appid = Configure.getAppid(); //微信支付分配的商户号ID(开通公众号的微信支付功能之后可以获取到) this.mch_id = Configure.getMchid(); //随机字符串,不长于32 位 // setNonce_str(RandomStringGenerator.getRandomStringByLength(32)); this.nonce_str = RandomStringGenerator.getRandomStringByLength(32); // setBody(body);// 商品描述 this.body = body; // setOut_trade_no(out_trade_no);// 商户订单号 this.out_trade_no = out_trade_no; // setTotal_fee();// 总金额 String money= SinataUtil.doubleRetainTwo(total_fee*100d); this.total_fee = Integer.parseInt(money.substring(0,money.length()-3)); // setNotify_url(notify_url);// 通知地址 this.notify_url = notify_url; // setTrade_type("APP");// 交易类型,默认:APP this.trade_type = "APP"; // 根据API给的签名规则进行签名 this.sign = Signature.getSign(apptype, toMap()); } /** * 预支付请求需要的参数(获取微信统一下单-必填参数)(公众号) * 公众账号ID appid (内置) * 商户号 mch_id (内置) * 随机字符串 nonce_str (内置) * 签名 sign (内置) * @param body 商品描述 * @param out_trade_no 商户订单号 * @param total_fee 总金额 (单位:分) * @param notify_url 通知地址 * @throws IllegalAccessException */ /* public UnifiedorderReqData(String out_trade_no, String body, Double total_fee, String notify_url,String trade_type,String openid) throws IllegalAccessException{ //appID与商户号 this.appid = Configure.getGappid(); //微信支付分配的商户号ID(开通公众号的微信支付功能之后可以获取到) this.mch_id = Configure.getGmchid(); //随机字符串,不长于32 位 // setNonce_str(RandomStringGenerator.getRandomStringByLength(32)); this.nonce_str = RandomStringGenerator.getRandomStringByLength(32); // setBody(body);// 商品描述 this.body = body; // setOut_trade_no(out_trade_no);// 商户订单号 this.out_trade_no = out_trade_no; // setTotal_fee();// 总金额 String money=SinataUtil.doubleRetainTwo(total_fee*100d); this.total_fee = Integer.parseInt(money.substring(0,money.length()-3)); //this.total_fee = (int)(total_fee * 100); // setNotify_url(notify_url);// 通知地址 this.notify_url = notify_url; *//*trade_type 交易类型JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付,统一下单接口trade_type的传参可参考这里 MICROPAY--刷卡支付,刷卡支付有单独的支付接口,不调用统一下单接口*//* this.trade_type = trade_type; this.openid = openid; // 根据API给的签名规则进行签名 this.sign = Signature.getSign(1,toMap()); } */ /** * 预支付请求需要的参数(获取微信统一下单-必填参数)(小程序) * 公众账号ID appid (内置) * 商户号 mch_id (内置) * 随机字符串 nonce_str (内置) * 签名 sign (内置) * @param body 商品描述 * @param out_trade_no 商户订单号 * @param total_fee 总金额 (单位:分) * @param notify_url 通知地址 * @throws IllegalAccessException */ public UnifiedorderReqData(String out_trade_no, String body, Double total_fee, String notify_url,String trade_type,String openid) throws IllegalAccessException{ //appID与商户号 this.appid = Configure.getXappid(); //微信支付分配的商户号ID(开通公众号的微信支付功能之后可以获取到) this.mch_id = Configure.getXmchid(); //随机字符串,不长于32 位 // setNonce_str(RandomStringGenerator.getRandomStringByLength(32)); this.nonce_str = RandomStringGenerator.getRandomStringByLength(32); // setBody(body);// 商品描述 this.body = body; // setOut_trade_no(out_trade_no);// 商户订单号 this.out_trade_no = out_trade_no; // setTotal_fee();// 总金额 String money=SinataUtil.doubleRetainTwo(total_fee*100d); this.total_fee = Integer.parseInt(money.substring(0,money.length()-3)); //this.total_fee = (int)(total_fee * 100); // setNotify_url(notify_url);// 通知地址 this.notify_url = notify_url; /*trade_type 交易类型JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付,统一下单接口trade_type的传参可参考这里 MICROPAY--刷卡支付,刷卡支付有单独的支付接口,不调用统一下单接口*/ this.trade_type = trade_type; this.openid = openid; // 根据API给的签名规则进行签名 this.sign = Signature.getSign(1,toMap()); } public Map toMap(){ Map map = new HashMap(); Field[] fields = this.getClass().getDeclaredFields(); for (Field field : fields) { Object obj; try { obj = field.get(this); if(obj!=null){ map.put(field.getName(), obj); } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } return map; } public String getAppid() { return appid; } public void setAppid(String appid) { this.appid = appid; } public String getMch_id() { return mch_id; } public void setMch_id(String mch_id) { this.mch_id = mch_id; } public String getNonce_str() { return nonce_str; } public void setNonce_str(String nonce_str) { this.nonce_str = nonce_str; } public String getSign() { return sign; } public void setSign(String sign) { this.sign = sign; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getOut_trade_no() { return out_trade_no; } public void setOut_trade_no(String out_trade_no) { this.out_trade_no = out_trade_no; } public Integer getTotal_fee() { return total_fee; } public void setTotal_fee(Integer total_fee) { this.total_fee = total_fee; } public String getSpbill_create_ip() { return spbill_create_ip; } public void setSpbill_create_ip(String spbill_create_ip) { this.spbill_create_ip = spbill_create_ip; } public String getNotify_url() { return notify_url; } public void setNotify_url(String notify_url) { this.notify_url = notify_url; } public String getTrade_type() { return trade_type; } public void setTrade_type(String trade_type) { this.trade_type = trade_type; } public String getOpenid() { return openid; } public void setOpenid(String openid) { this.openid = openid; } }