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); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: Eclipse插件开发之新手入门