当前位置: 移动技术网 > IT编程>开发语言>Java > java支付宝即时到帐提交订单功能

java支付宝即时到帐提交订单功能

2019年07月19日  | 移动技术网IT编程  | 我要评论

本文实例为大家分享了java支付宝即时到帐提交订单的具体代码,供大家参考,具体内容如下

package com.tian.batis;

import java.io.unsupportedencodingexception;
import java.net.urlencoder;
import java.util.arraylist;
import java.util.collections;
import java.util.hashmap;
import java.util.list;
import java.util.map;
import org.apache.commons.codec.digest.digestutils;
import javax.servlet.http.httpservletresponse;

public class alipay {
  /**
   * alipay 支付接口
   * 
   * @param _input_charset
   *      编码
   * @param subject
   *      商品名 (必填)
   * @param notify_url
   *      异步执行地址
   * @param body
   *      商品描述
   * @param payment_type
   *      付款类型
   * @param out_trade_no
   *      订单号 (必填)
   * @param partner
   *      商家id
   * @param service
   *      服务
   * @param total_fee
   *      金额 (必填)
   * @param return_url
   *      返回展示地址
   * @param sign_type
   *      加密方式(默认md5)
   * @param seller_id
   *      同商家id
   * @param response
   * @param sessionid
   *      sessionid
   * @return 成功 返回url;-1失败(参数);-2处理异常
   */
  public string alipaypayment(string _input_charset, string subject, string notify_url, string body,
      string payment_type, string out_trade_no, string partner, string service, integer total_fee,
      string return_url, string sign_type, string seller_id, httpservletresponse response, string sessionid) {
    try {
      string strsandbox = "https://mapi.alipay.com/gateway.do";// 地址
      configmanager configmanager = configmanager.getinstance("alipayconfig.properties");

      map<string, string> map = new hashmap<string, string>();

      if (null != subject && subject.trim().length() > 0) {
        map.put("subject", subject);
      } else {
        return "-1";
      }

      if (null != out_trade_no && out_trade_no.trim().length() > 0) {
        map.put("out_trade_no", out_trade_no);
      } else {
        return "-1";
      }

      if (null != total_fee && total_fee > 0) {
        map.put("total_fee", total_fee + "");
        // map.put("total_fee", "0.01");
      } else {
        return "-1";
      }

      if (null != _input_charset && _input_charset.trim().length() > 0) {
        map.put("_input_charset", _input_charset);
      } else {
        map.put("_input_charset", configmanager.getconfigitem("alipay._input_charset").tostring());
      }

      if (null != notify_url && notify_url.trim().length() > 0) {
        map.put("notify_url", notify_url);
      } else {
        map.put("notify_url", configmanager.getconfigitem("alipay.notify_url1").tostring());
      }

      if (null != return_url && return_url.trim().length() > 0) {
        map.put("return_url", return_url);
      } else {
        map.put("return_url", configmanager.getconfigitem("alipay.return_url").tostring());
      }

      if (null != payment_type && payment_type.trim().length() > 0) {
        map.put("payment_type", payment_type);
      } else {
        map.put("payment_type", configmanager.getconfigitem("alipay.payment_type").tostring());
      }

      if (null != partner && partner.trim().length() > 0) {
        map.put("partner", partner);
      } else {
        map.put("partner", configmanager.getconfigitem("alipay.partner").tostring());
      }

      if (null != service && service.trim().length() > 0) {
        map.put("service", service);
      } else {
        map.put("service", configmanager.getconfigitem("alipay.service").tostring());
      }

      if (null != sign_type && sign_type.trim().length() > 0) {
        map.put("sign_type", sign_type);
      } else {
        map.put("sign_type", configmanager.getconfigitem("alipay.sign_type").tostring());
      }

      if (null != seller_id && seller_id.trim().length() > 0) {
        map.put("seller_id", seller_id);
      } else {
        map.put("seller_id", configmanager.getconfigitem("alipay.seller_id").tostring());
      }

      if (null != body && body.trim().length() > 0) {
        map.put("body", body);
      }

      if (null != sessionid && sessionid.trim().length() > 0) {
        map.put("extra_common_param", sessionid);
      }

      map<string, string> spara = parafilter(map);
      // 生成签名结果
      string sign = buildrequestmysign(spara, configmanager.getconfigitem("alipay.key").tostring(),
          configmanager.getconfigitem("alipay._input_charset").tostring());
      map.put("sign", sign);

      string str = "";
      for (map.entry<string, string> entry : map.entryset()) {
        string key = entry.getkey();
        string value = entry.getvalue();
        if (key.equals("subject") || key.equals("body")) {
          value = urlencoder.encode(value, "utf-8");
        }
        if (null != str && str.trim().length() > 0) {
          str += "&" + key + "=" + value;
        } else {
          str += key + "=" + value;
        }
      }

      string url = strsandbox;
      if (null != str && str.trim().length() > 0) {
        url += "?" + str;
      }
      return url;
      // 注:如果失败考虑
      // 1.response 重定向编码
      // 2.sign_type 放置参数末尾
      // 3.url 追加 _input_charset=utf-8
    } catch (exception e) {
      e.printstacktrace();
      return "-2";
    }
  }
  ///////////////////////////////////////////////////////
  /**
   * 除去数组中的空值和签名参数
   * 
   * @param sarray
   *      签名参数组
   * @return 去掉空值与签名参数后的新签名参数组
   */
  public static map<string, string> parafilter(map<string, string> sarray) {
    map<string, string> result = new hashmap<string, string>();
    if (sarray == null || sarray.size() <= 0) {
      return result;
    }
    for (string key : sarray.keyset()) {
      string value = sarray.get(key);
      if (value == null || value.equals("") || key.equalsignorecase("sign")
          || key.equalsignorecase("sign_type")) {
        continue;
      }
      result.put(key, value);
    }
    return result;
  }
  
  /**
   * 生成签名结果
   * 
   * @param spara
   *      要签名的数组
   * @return 签名结果字符串
   */
  public static string buildrequestmysign(map<string, string> spara, string key, string input_charset) {
    string prestr = createlinkstring(spara); // 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
    string mysign = "";
    mysign = sign(prestr, key, input_charset);
    return mysign;
  }
  
  /**
   * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
   * 
   * @param params
   *      需要排序并参与字符拼接的参数组
   * @return 拼接后字符串
   */
  public static string createlinkstring(map<string, string> params) {
    list<string> keys = new arraylist<string>(params.keyset());
    collections.sort(keys);
    string prestr = "";
    for (int i = 0; i < keys.size(); i++) {
      string key = keys.get(i);
      string value = params.get(key);

      if (i == keys.size() - 1) {// 拼接时,不包括最后一个&字符
        prestr = prestr + key + "=" + value;
      } else {
        prestr = prestr + key + "=" + value + "&";
      }
    }
    return prestr;
  }
  /**
   * 签名字符串
   * 
   * @param text
   *      需要签名的字符串
   * @param key
   *      密钥
   * @param input_charset
   *      编码格式
   * @return 签名结果
   */
  public static string sign(string text, string key, string input_charset) {
    text = text + key;
    return digestutils.md5hex(getcontentbytes(text, input_charset));
  }
  
  /**
   * @param content
   * @param charset
   * @return
   * @throws signatureexception
   * @throws unsupportedencodingexception
   */
  private static byte[] getcontentbytes(string content, string charset) {
    if (charset == null || "".equals(charset)) {
      return content.getbytes();
    }
    try {
      return content.getbytes(charset);
    } catch (unsupportedencodingexception e) {
      throw new runtimeexception("md5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网