欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-02-22 13:34:16
本文实例为大家分享了java支付宝即时到帐提交订单的具体代码,供大家参考,具体内容如下 package com.tian.batis; import j...

本文实例为大家分享了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);
    }
  }
}

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