package cc.mrbird.febs.pay.model; import cc.mrbird.febs.pay.util.RandomStringGenerator; import cc.mrbird.febs.pay.util.Signature; import cc.mrbird.febs.pay.util.WechatConfigure; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; /** * * 预付订单请求参数 * @author:姜友瑶 * @date 2016年10月14日 */ public class JsApiPayReqData { //每个字段具体的意思请查看API文档 private String appid = ""; private String mch_id = ""; private String device_info = ""; private String nonce_str = ""; private String sign = ""; private String body = ""; private String detail = ""; private String attach = ""; private String out_trade_no = ""; private String fee_type = ""; private int total_fee = 0; /** * 接收微信支付异步通知回调地址 */ private String trade_type = WechatConfigure.TRADE_TYPE_JSAPI; private String notify_url ; private String openid = ""; private String limit_pay = ""; private String spbill_create_ip = ""; private String product_id = ""; private String time_start = ""; private String time_expire = ""; private String goods_tag = ""; private String auth_code = ""; public JsApiPayReqData() { } /**appID 收款应用id * mchID 商户号 * @param authCode 这个是扫码终端设备从用户手机上扫取到的支付授权号,这个号是跟用户用来支付的银行卡绑定的,有效期是1分钟 * @param body 要支付的商品的描述信息,用户会在支付成功页面里看到这个信息 * @param attach 支付订单里面可以填的附加数据,API会将提交的这个附加数据原样返回 * @param outTradeNo 商户系统内部的订单号,32个字符内可包含字母, 确保在商户系统唯一 * @param totalFee 订单总金额,单位为“分”,只能整数 * @param deviceInfo 商户自己定义的扫码支付终端设备号,方便追溯这笔交易发生在哪台终端设备上 * @param spBillCreateIP 订单生成的机器IP * @param timeStart 订单生成时间, 格式为yyyyMMddHHmmss,如2009年12 月25 日9 点10 分10 秒表示为20091225091010。时区为GMT+8 beijing。该时间取自商户服务器 * @param timeExpire 订单失效时间,格式同上 * @param goodsTag 商品标记,微信平台配置的商品标记,用于优惠券或者满减使用 */ public JsApiPayReqData(String appID, String mchID, String paySecret, String notify_url, String body, String outTradeNo, int totalFee, String spBillCreateIP, String openid, String attach){ //默认必须设置 setAppid(appID); setMch_id(mchID); setNotify_url(notify_url); setBody(body); setOut_trade_no(outTradeNo); setTotal_fee(totalFee); setSpbill_create_ip(spBillCreateIP); setAttach(attach); //随机字符串,不长于32 位 setNonce_str(RandomStringGenerator.getRandomStringByLength(32)); setOpenid(openid); //根据API给的签名规则进行签名 【 必须要放在本方法的最后】 String sign = Signature.getSign(toMap(),paySecret); setSign(sign);//把签名数据设置到Sign这个属性中 } public JsApiPayReqData(String appID, String mchID, String paySecret, String notify_url, String body, String outTradeNo, int totalFee, String spBillCreateIP, String attach){ //默认必须设置 setAppid(appID); setMch_id(mchID); setBody(body); setNotify_url(notify_url); setOut_trade_no(outTradeNo); setTotal_fee(totalFee); setSpbill_create_ip(spBillCreateIP); setAttach(attach); //随机字符串,不长于32 位 setNonce_str(RandomStringGenerator.getRandomStringByLength(32)); //根据API给的签名规则进行签名 【 必须要放在本方法的最后】 String sign = Signature.getSign(toMap(),paySecret); setSign(sign);//把签名数据设置到Sign这个属性中 } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } public String getFee_type() { return fee_type; } public void setFee_type(String fee_type) { this.fee_type = fee_type; } 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; } public String getLimit_pay() { return limit_pay; } public void setLimit_pay(String limit_pay) { this.limit_pay = limit_pay; } public String getProduct_id() { return product_id; } public void setProduct_id(String product_id) { this.product_id = product_id; } 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 getDevice_info() { return device_info; } public void setDevice_info(String device_info) { this.device_info = device_info; } 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; } /** * * body最大长度128 * @author:姜友瑶 * @param body * 返回类型 void * @date 2016年10月13日 */ public void setBody(String body) { if(body.length()>128){ body=body.substring(0, 128); } this.body = body; } public String getAttach() { return attach; } public void setAttach(String attach) { this.attach = attach; } 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 int getTotal_fee() { return total_fee; } public void setTotal_fee(int 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 getTime_start() { return time_start; } public void setTime_start(String time_start) { this.time_start = time_start; } public String getTime_expire() { return time_expire; } public void setTime_expire(String time_expire) { this.time_expire = time_expire; } public String getGoods_tag() { return goods_tag; } public void setGoods_tag(String goods_tag) { this.goods_tag = goods_tag; } public String getAuth_code() { return auth_code; } public void setAuth_code(String auth_code) { this.auth_code = auth_code; } 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; } }