java支付寶即時(shí)到帳提交訂單功能
更新時(shí)間:2017年08月14日 14:01:13 作者:算順網(wǎng)
這篇文章主要為大家詳細(xì)介紹了java支付寶即時(shí)到帳提交訂單功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了java支付寶即時(shí)到帳提交訂單的具體代碼,供大家參考,具體內(nèi)容如下
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
* 異步執(zhí)行地址
* @param body
* 商品描述
* @param payment_type
* 付款類型
* @param out_trade_no
* 訂單號(hào) (必填)
* @param partner
* 商家id
* @param service
* 服務(wù)
* @param total_fee
* 金額 (必填)
* @param return_url
* 返回展示地址
* @param sign_type
* 加密方式(默認(rèn)md5)
* @param seller_id
* 同商家id
* @param response
* @param sessionId
* sessionId
* @return 成功 返回url;-1失?。▍?shù));-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);
// 生成簽名結(jié)果
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 放置參數(shù)末尾
// 3.url 追加 _input_charset=utf-8
} catch (Exception e) {
e.printStackTrace();
return "-2";
}
}
///////////////////////////////////////////////////////
/**
* 除去數(shù)組中的空值和簽名參數(shù)
*
* @param sArray
* 簽名參數(shù)組
* @return 去掉空值與簽名參數(shù)后的新簽名參數(shù)組
*/
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;
}
/**
* 生成簽名結(jié)果
*
* @param sPara
* 要簽名的數(shù)組
* @return 簽名結(jié)果字符串
*/
public static String buildRequestMysign(Map<String, String> sPara, String key, String input_charset) {
String prestr = createLinkString(sPara); // 把數(shù)組所有元素,按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串
String mysign = "";
mysign = sign(prestr, key, input_charset);
return mysign;
}
/**
* 把數(shù)組所有元素排序,并按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串
*
* @param params
* 需要排序并參與字符拼接的參數(shù)組
* @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) {// 拼接時(shí),不包括最后一個(gè)&字符
prestr = prestr + key + "=" + value;
} else {
prestr = prestr + key + "=" + value + "&";
}
}
return prestr;
}
/**
* 簽名字符串
*
* @param text
* 需要簽名的字符串
* @param key
* 密鑰
* @param input_charset
* 編碼格式
* @return 簽名結(jié)果
*/
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簽名過程中出現(xiàn)錯(cuò)誤,指定的編碼集不對,您目前指定的編碼集是:" + charset);
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot項(xiàng)目啟動(dòng)慢的問題排查方式
這篇文章主要介紹了springboot項(xiàng)目啟動(dòng)慢的問題排查方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
shardingjdbc之配置druid數(shù)據(jù)庫連接池過程
這篇文章主要介紹了shardingjdbc之配置druid數(shù)據(jù)庫連接池過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Java 中文字符按Unicode排序的實(shí)現(xiàn)方法
這篇文章主要介紹了Java 中文字符按Unicode排序的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10
java實(shí)現(xiàn)根據(jù)ip地址獲取地理位置的代碼分享
這篇文章主要介紹了java實(shí)現(xiàn)根據(jù)ip地址獲取地理位置的代碼分享,本文中使用的是QQ在線接口,也可以使用新浪、淘寶等提供的在線接口,需要的朋友可以參考下2014-08-08
Java使用Tesseract-Ocr識(shí)別數(shù)字
這篇文章主要介紹了Java使用Tesseract-Ocr識(shí)別數(shù)字的方法,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-04-04

