public Merchant getMerchant() { if (merchant == null) { merchant = new Merchant(); } return merchant; }
public Order getOrder() { if (order == null) { order = new Order(); } return order; }
public static PaymentSetting buid(GatewayBase gateway) { return new PaymentSetting(gateway); }
@GetMapping("/createorder") public Map<String, String> createOrder(int type) { GatewayBase gateway = gateways.get(PaymentSetting.getGatewayType(type,DemoGatewayType.values()), GatewayTradeType.APP); return PaymentSetting.buid(gateway).setOrder( Order.newBuilder() .orderAmount(0.01) .orderNo(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())) .paymentDate(new Date()) .subject("apppay") .build()) .payment(); } }
/** * 初始化支付订单的参数 * * @param trade_type * @param spbill_create_ip */ private void initPaymentOrderParameter(String trade_type, String spbill_create_ip) { setGatewayParameterValue("appid", getMerchant().getAppId()); setGatewayParameterValue("mch_id", getMerchant().getPartner()); setGatewayParameterValue("nonce_str", Utility.generateUUID()); setGatewayParameterValue("body", getOrder().getSubject()); setGatewayParameterValue("out_trade_no", getOrder().getOrderNo()); setGatewayParameterValue("total_fee", (int) (getOrder().getOrderAmount() * 100)); setGatewayParameterValue("spbill_create_ip", spbill_create_ip); setGatewayParameterValue("notify_url", getMerchant().getNotifyUrl().toString()); setGatewayParameterValue("trade_type", trade_type); setGatewayParameterValue("sign", getSign()); // 签名需要在最后设置,以免缺少参数。 }
@GetMapping("/createquery") public void createQuery(int type) { // 查询时需要设置订单的Id与金额,在查询结果中将会核对订单的Id与金额,如果不相符会返回查询失败。 GatewayBase gateway = gateways.get(PaymentSetting.getGatewayType(type,DemoGatewayType.values())); boolean query = PaymentSetting.buid(gateway).setOrder( Order.newBuilder() .orderAmount(0.01) .orderNo(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())) .build()) .queryNow(); if (query) { // 订单已支付 } }
/** * 初始化支付订单的参数 * */ private void initQueryOrderParameter() { // TODO Auto-generated method stub setGatewayParameterValue("appid", getMerchant().getAppId()); setGatewayParameterValue("mch_id", getMerchant().getPartner()); setGatewayParameterValue("out_trade_no", getOrder().getOrderNo()); setGatewayParameterValue("nonce_str", Utility.generateUUID()); setGatewayParameterValue("sign", getSign()); // 签名需要在最后设置,以免缺少参数。 }
private boolean checkQueryResult(String resultXml) { // TODO Auto-generated method stub // 需要先清除之前查询订单的参数,否则会对接收到的参数造成干扰。 clearGatewayParameterData(); readResultXml(resultXml); if (isSuccessResult()) { if (!Utility.isBlankOrEmpty(getGatewayParameterValue("total_fee"))) { if (getOrder().getOrderNo().equalsIgnoreCase(getGatewayParameterValue("out_trade_no")) && getOrder().getOrderAmount() == Integer.parseInt(getGatewayParameterValue("total_fee")) / 100.0) { return true; } } } return false; }
public Order build() { Order order = new Order(); if (orderAmount >= (double) 0.01) { order.setOrderAmount(orderAmount); } if (!StringUtils.isBlank(orderNo)) { order.setOrderNo(orderNo); } if (!StringUtils.isBlank(tradeNo)) { order.setTradeNo(tradeNo); } order.setSubject(subject); if (paymentDate != null) { order.setPaymentDate(paymentDate); } return order; } }
public Map<String, String> payment(HashMap<String, String>... extraParams) { HashMap<String, String> _extraParams = extraParams != null && extraParams.length > 0 ? extraParams[0] : null; switch (gateway.getGatewayTradeType()) { case APP: return appPayment(); case Wap: wapPayment(_extraParams); break; case Web: webPayment(); break; case QRCode: qRCodePayment(); break; case Public: break; case BarCode: break; case Applet: break; case None: { throw new NotImplementedException(gateway.getGatewayType() + " 没有实现+ " + gateway.getGatewayTradeType() + "接口"); } default: break; } return null; }
private void readNotifyOrderParameter() { // TODO Auto-generated method stub getOrder().setOrderNo(getGatewayParameterValue("out_trade_no")); getOrder().setOrderAmount(Integer.parseInt(getGatewayParameterValue("total_fee")) * 0.01); getOrder().setTradeNo(getGatewayParameterValue("transaction_id")); }
private String getSign() { // TODO Auto-generated method stub StringBuilder signBuilder = new StringBuilder(); getSortedGatewayParameter().forEach((key, val) -> { if (!Utility.isBlankOrEmpty(val) && !key.equalsIgnoreCase("sign")) { signBuilder.append(String.format("%s=%s&", key, val)); } }); signBuilder.append(String.format("key=%s", getMerchant().getKey())); return Utility.getMD5(signBuilder.toString()).toUpperCase(); }
public AlipayClient getAopClient() { return new DefaultAlipayClient(openapiGatewayUrl, getMerchant().getAppId(), getMerchant().getPrivateKeyPem(), "json", getCharset(), getMerchant().getPrivateKeyPem(), "RSA"); }
/** * 添加商户数据。与添加的商户数据重复的网关将会被删除 * * @param merchant * 商户数据 */ public void addMerchant(Merchant merchant) { removeMerchant(merchant.getGatewayType()); merchantList.add(merchant); }
/** * 获得商户数据。网关存在多个商户数据时返回第一个,无法找到返回null * * @param gatewayType * 网关类型 * @return 网关存在多个商户数据时返回第一个,无法找到返回null */ public Merchant getMerchant(GatewayType gatewayType) { return merchantList.stream().filter(m -> m.getGatewayType() == gatewayType).findFirst().get(); }
public static OrderBuilder newBuilder() { OrderBuilder builder = new OrderBuilder(); return builder; }
@GetMapping("/createorder") public void createOrder(int type) { GatewayBase gateway = gateways.get(PaymentSetting.getGatewayType(type,DemoGatewayType.values()), GatewayTradeType.QRCode); PaymentSetting.buid(gateway).setOrder( Order.newBuilder() .orderAmount(0.01) .orderNo(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())) .paymentDate(new Date()) .subject("qrcodepay") .build()) .payment(); } }
/** * 删除商户数据 * * @param gatewayType * 网关类型 */ public void removeMerchant(GatewayType gatewayType) { Merchant removeMerchant = merchantList.stream().filter(m -> m.getGatewayType() == gatewayType).findFirst().get(); if (removeMerchant != null) { merchantList.remove(removeMerchant); } }
@GetMapping("/createorder") public void createOrder(int type) { GatewayBase gateway = gateways.get(PaymentSetting.getGatewayType(type,DemoGatewayType.values()), GatewayTradeType.Web); PaymentSetting.buid(gateway).setOrder( Order.newBuilder() .orderAmount(0.01) .orderNo(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())) .paymentDate(new Date()) .subject("webpay") .build()) .payment(); } }
@GetMapping("/createorder") public void createOrder(int type) { GatewayBase gateway = gateways.get(PaymentSetting.getGatewayType(type,DemoGatewayType.values()), GatewayTradeType.Wap); PaymentSetting.buid(gateway).setOrder( Order.newBuilder() .orderAmount(0.01) .orderNo(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())) .paymentDate(new Date()) .subject("wappay") .build()) .payment(new HashMap<String, String>()); } }