Esempio n. 1
0
  @Override
  public String onPay(PayCfg payCfg, Order order) {
    Map<String, String> params = paymentManager.getConfigParams(this.getId());

    HttpServletRequest request = ThreadContextHolder.getHttpRequest();
    HttpServletResponse response = ThreadContextHolder.getHttpResponse();

    /*
    String show_url = this.getShowUrl(order);
    String notify_url = this.getCallBackUrl(payCfg);
    String return_url =this.getReturnUrl(payCfg);
    */

    //////////////////////////////////// 请求参数//////////////////////////////////////

    // 商户号
    String bargainor_id = params.get("tenpaybid");

    // 密钥
    String key = params.get("tenpaykey");

    // 回调通知URL
    String return_url = this.getCallBackUrl(payCfg);

    // 当前时间 yyyyMMddHHmmss
    String currTime = TenpayUtil.getCurrTime();

    // 8位日期
    String strDate = currTime.substring(0, 8);

    // 6位时间
    String strTime = currTime.substring(8, currTime.length());

    // 四位随机数
    String strRandom = TenpayUtil.buildRandom(4) + "";

    // 10位序列号,可以自行调整。
    String strReq = strTime + strRandom;

    // 商家订单号,长度若超过32位,取前32位。财付通只记录商家订单号,不保证唯一。
    String sp_billno = strReq;

    // 财付通交易单号,规则为:10位商户号+8位时间(YYYYmmdd)+10位流水号
    String transaction_id = bargainor_id + strDate + strReq;

    // 创建PayRequestHandler实例
    PayRequestHandler reqHandler = new PayRequestHandler(request, response);

    // 设置密钥
    reqHandler.setKey(key);

    // 初始化
    reqHandler.init();

    // -----------------------------
    // 设置支付参数
    // -----------------------------
    reqHandler.setParameter("cs", "utf-8"); // 编码类型
    reqHandler.setParameter("bargainor_id", bargainor_id); // 商户号
    reqHandler.setParameter("sp_billno", order.getSn()); // 商家订单号
    reqHandler.setParameter("transaction_id", transaction_id); // 财付通交易单号
    reqHandler.setParameter("return_url", return_url); // 支付通知url
    reqHandler.setParameter("desc", "订单编号:" + order.getSn()); // 商品名称
    reqHandler.setParameter("total_fee", formatPrice(order.getOrder_amount() * 100)); // 商品金额,以分为单位

    // 用户ip,测试环境时不要加这个ip参数,正式环境再加此参数
    reqHandler.setParameter("spbill_create_ip", request.getRemoteAddr());

    // 获取请求带参数的url
    String requestUrl = "";
    try {
      requestUrl = reqHandler.getRequestURL();
      reqHandler.doSend();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    // 获取debug信息
    String debuginfo = reqHandler.getDebugInfo();

    return requestUrl;
  }
Esempio n. 2
0
  @Override
  public String onPay(PayCfg payCfg, Order order) {
    Map<String, String> params = paymentManager.getConfigParams(this.getId());
    String seller_email = params.get("seller_email");
    String partner = params.get("partner");
    String key = params.get("key");

    String show_url = this.getShowUrl(order);
    String notify_url = this.getCallBackUrl(payCfg);
    String return_url = this.getReturnUrl(payCfg);

    // //////////////////////////////////请求参数//////////////////////////////////////

    // 必填参数//

    // 请与贵网站订单系统中的唯一订单号匹配
    String out_trade_no = "" + order.getSn();
    // 订单名称,显示在支付宝收银台里的“商品名称”里,显示在支付宝的交易管理的“商品名称”的列表里。
    String subject = "订单:" + order.getSn();
    // 订单描述、订单详细、订单备注,显示在支付宝收银台里的“商品描述”里
    String body = "网店订单";
    String price = String.valueOf(order.getOrder_amount());
    // 物流费用,即运费。
    String logistics_fee = "0.00";
    // 物流类型,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)
    String logistics_type = "EXPRESS";
    // 物流支付方式,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)
    String logistics_payment = "SELLER_PAY";

    // 商品数量,建议默认为1,不改变值,把一次交易看成是一次下订单而非购买一件商品。
    String quantity = "1";

    // 扩展参数//

    // 买家收货信息(推荐作为必填)
    // 该功能作用在于买家已经在商户网站的下单流程中填过一次收货信息,而不需要买家在支付宝的付款流程中再次填写收货信息。
    // 若要使用该功能,请至少保证receive_name、receive_address有值
    String receive_name = order.getShip_name(); // 收货人姓名,如:张三
    String receive_address = order.getShip_addr(); // 收货人地址,如:XX省XXX市XXX区XXX路XXX小区XXX栋XXX单元XXX号
    String receive_zip = order.getShip_zip(); // 收货人邮编,如:123456
    String receive_phone = order.getShip_tel(); // 收货人电话号码,如:0571-81234567
    String receive_mobile = order.getShip_email(); // 收货人手机号码,如:13312341234

    // ////////////////////////////////////////////////////////////////////////////////

    // 把请求参数打包成数组
    Map<String, String> sParaTemp = new HashMap<String, String>();
    sParaTemp.put("payment_type", "1");
    sParaTemp.put("show_url", show_url);
    sParaTemp.put("out_trade_no", out_trade_no);
    sParaTemp.put("subject", subject);
    sParaTemp.put("body", body);
    sParaTemp.put("price", price);
    sParaTemp.put("logistics_fee", logistics_fee);
    sParaTemp.put("logistics_type", logistics_type);
    sParaTemp.put("logistics_payment", logistics_payment);
    sParaTemp.put("quantity", quantity);
    sParaTemp.put("receive_name", receive_name);
    sParaTemp.put("receive_address", receive_address);
    sParaTemp.put("receive_zip", receive_zip);
    sParaTemp.put("receive_phone", receive_phone);
    sParaTemp.put("receive_mobile", receive_mobile);

    sParaTemp.put("service", "trade_create_by_buyer");
    sParaTemp.put("partner", partner);
    sParaTemp.put("return_url", return_url);
    sParaTemp.put("notify_url", notify_url);
    sParaTemp.put("seller_email", seller_email);
    sParaTemp.put("_input_charset", AlipayConfig.input_charset);

    return AlipaySubmit.buildForm(sParaTemp, AlipayService.ALIPAY_GATEWAY_NEW, "get", key);
  }