提交 9d84e228 编写于 作者: J Javen205

更新支付宝SDK、添加多应用的支持

上级 c278505c
......@@ -126,16 +126,18 @@ Email:javendev@126.com
排名不分先后
1. [jfinal](http://git.oschina.net/jfinal/jfinal)
2. [jfinal-weixin](http://git.oschina.net/jfinal/jfinal-weixin)
3. [Layer](http://layer.layui.com/)
4. [weui](https://github.com/weui/weui)
5. [jquery-weui](https://github.com/lihongxun945/jquery-weui/)
6. [zxing](https://github.com/zxing/zxing)
7. 感谢第三方公司提供微信商户平台测试
### 最后如果该库对你有帮助不妨右上角点点Star支持一下,当然我更喜欢你 Fork PR 成为项目贡献者 . [IJPay](https://github.com/Javen205/IJPay)  
- [jfinal](http://git.oschina.net/jfinal/jfinal)
- [jfinal-weixin](http://git.oschina.net/jfinal/jfinal-weixin)
- [Layer](http://layer.layui.com/)
- [weui](https://github.com/weui/weui)
- [wepayui](https://github.com/wepayui/wepayui)
- [jquery-weui](https://github.com/lihongxun945/jquery-weui)
- [zxing](https://github.com/zxing/zxing)
- 感谢第三方公司提供微信商户平台测试
### 贡献代码
最后如果该库对你有帮助不妨右上角点点Star支持一下,我更喜欢你 Fork PR 成为项目贡献者 .
>如果对你有帮助,请任意打赏支持
......
......@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.javen205</groupId>
<artifactId>IJPay</artifactId>
<version>0.4</version>
<version>0.5</version>
<packaging>jar</packaging>
<name>IJPay</name>
<description>Easy Pay Library</description>
......@@ -81,9 +81,9 @@
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>java20170725114550</version>
<version>alipay-sdk-java20170829142630</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/alipay-sdk-java20170725114550.jar</systemPath>
<systemPath>${project.basedir}/libs/alipay-sdk-java20170829142630.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
......
package com.jpay.alipay;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.jpay.ext.kit.StrKit;
/**
* @author Javen
* 2017年5月20日
*/
public class AliPayApiConfigKit {
private static final ThreadLocal<AliPayApiConfig> tl = new ThreadLocal<AliPayApiConfig>();
private static final ThreadLocal<String> TL = new ThreadLocal<String>();
public static void setThreadLocalAliPayApiConfig(AliPayApiConfig aliPayApiConfig) {
tl.set(aliPayApiConfig);
}
private static final Map<String, AliPayApiConfig> CFG_MAP = new ConcurrentHashMap<String, AliPayApiConfig>();
private static final String DEFAULT_CFG_KEY = "_default_ijpay_key_";
public static void removeThreadLocalApiConfig() {
tl.remove();
}
/**
* 添加支付宝支付配置,每个appId只需添加一次,相同appId将被覆盖
* @param aliPayApiConfig 支付宝支付配置
* @return {AliPayApiConfig} 支付宝支付配置
*/
public static AliPayApiConfig putApiConfig(AliPayApiConfig aliPayApiConfig) {
if (CFG_MAP.size() == 0) {
CFG_MAP.put(DEFAULT_CFG_KEY, aliPayApiConfig);
}
return CFG_MAP.put(aliPayApiConfig.getAppId(), aliPayApiConfig);
}
public static AliPayApiConfig getAliPayApiConfig() {
AliPayApiConfig result = tl.get();
if (result == null)
throw new IllegalStateException("需要事先使用 AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig) 将 aliPayApiConfig对象存入,才可以调用 AliPayApiConfigKit.getAliPayApiConfig() 方法");
return result;
}
public static AliPayApiConfig setThreadLocalAliPayApiConfig(AliPayApiConfig aliPayApiConfig) {
return putApiConfig(aliPayApiConfig);
}
public static AliPayApiConfig removeApiConfig(AliPayApiConfig apiConfig) {
return removeApiConfig(apiConfig.getAppId());
}
public static AliPayApiConfig removeApiConfig(String appId) {
return CFG_MAP.remove(appId);
}
public static void setThreadLocalAppId(String appId) {
if (StrKit.isBlank(appId)) {
appId = CFG_MAP.get(DEFAULT_CFG_KEY).getAppId();
}
TL.set(appId);
}
public static void removeThreadLocalAppId() {
TL.remove();
}
public static String getAppId() {
String appId = TL.get();
if (StrKit.isBlank(appId)) {
appId = CFG_MAP.get(DEFAULT_CFG_KEY).getAppId();
}
return appId;
}
public static AliPayApiConfig getAliPayApiConfig() {
String appId = getAppId();
return getApiConfig(appId);
}
public static AliPayApiConfig getApiConfig(String appId) {
AliPayApiConfig cfg = CFG_MAP.get(appId);
if (cfg == null)
throw new IllegalStateException("需事先调用 AliPayApiConfigKit.putApiConfig(aliPayApiConfig) 将 appId对应的 aliPayApiConfig 对象存入," +
"才可以使用 AliPayApiConfigKit.getAliPayApiConfig() 的系列方法");
return cfg;
}
}
......@@ -13,112 +13,9 @@ import com.jpay.weixin.api.WxPayApiConfigKit;
/**
* 微信支付的统一下单工具类
*
* @author L.cm
*/
public class PaymentKit {
/**
* 构建参数
* @param appid
* @param sub_appid
* @param mch_id
* @param sub_mch_id
* @param device_info
* @param body
* @param detail
* @param attach
* @param out_trade_no
* @param total_fee
* @param spbill_create_ip
* @param auth_code
* @param paternerKey
* @return <Map<String, String>>
*/
public static Map<String, String> buildParasMap(String appid, String sub_appid, String mch_id, String sub_mch_id, String device_info, String body, String detail, String attach, String out_trade_no, String total_fee, String spbill_create_ip, String auth_code, String paternerKey){
Map<String, String> queryParas = new HashMap<String, String>();
queryParas.put("appid", appid);
queryParas.put("sub_appid", sub_appid);
queryParas.put("mch_id", mch_id);
queryParas.put("sub_mch_id", sub_mch_id);
queryParas.put("device_info", device_info);
queryParas.put("nonce_str", String.valueOf(System.currentTimeMillis()));
queryParas.put("body", body);
queryParas.put("detail", detail);
queryParas.put("attach", attach);
queryParas.put("out_trade_no", out_trade_no);
queryParas.put("total_fee", total_fee);
queryParas.put("spbill_create_ip", spbill_create_ip);
queryParas.put("auth_code", auth_code);
String sign = PaymentKit.createSign(queryParas, paternerKey);
queryParas.put("sign", sign);
return queryParas;
}
/**
* 封装查询请求参数 参考代码
* @param appid
* @param sub_appid
* @param mch_id
* @param sub_mch_id
* @param transaction_id
* @param out_trade_no
* @param paternerKey
* @return <Map<String, String>>
*/
public static Map<String, String> buildParasMap(String appid, String sub_appid, String mch_id, String sub_mch_id, String transaction_id, String out_trade_no, String paternerKey){
Map<String, String> params = new HashMap<String, String>();
params.put("appid", appid);
params.put("sub_appid", sub_appid);
params.put("mch_id", mch_id);
params.put("sub_mch_id", sub_mch_id);
params.put("transaction_id", transaction_id);
params.put("out_trade_no", out_trade_no);
return buildSignAfterParasMap(params, paternerKey);
}
/**
* 构建统一下单参数
* @param appid
* @param sub_appid 否
* @param mch_id
* @param sub_mch_id 服务商模式下必须
* @param device_info 否
* @param body
* @param detail 否
* @param attach 否
* @param out_trade_no
* @param total_fee
* @param spbill_create_ip
* @param paternerKey
* @param notify_url
* @param trade_type
* @param product_id 扫码支付必传
* @return <Map<String, String>>
*/
public static Map<String, String> buildUnifiedOrderParasMap(String appid, String sub_appid, String mch_id, String sub_mch_id, String device_info, String body, String detail, String attach, String out_trade_no, String total_fee, String spbill_create_ip, String notify_url, String trade_type, String paternerKey, String product_id){
Map<String, String> params = new HashMap<String, String>();
params.put("appid", appid);
params.put("sub_appid", sub_appid);
params.put("mch_id", mch_id);
params.put("sub_mch_id", sub_mch_id);
params.put("device_info", device_info);
params.put("body", body);
params.put("detail", detail);
params.put("attach", attach);
params.put("total_fee", total_fee);
params.put("spbill_create_ip", spbill_create_ip);
params.put("notify_url", notify_url);
params.put("trade_type", trade_type);
params.put("product_id", product_id);
return buildSignAfterParasMap(params, paternerKey);
}
/**
* 构建短链接参数
* @param appid
......
package com.jpay.util;
import java.util.HashMap;
import java.util.Map;
public class ParamsUtils {
/**
* 将url参数转换成map
*
* @param param
* aa=11&bb=22&cc=33
* @return <Map<String, String>>
*/
public static Map<String, String> getUrlParams(String param) {
Map<String, String> map = new HashMap<String, String>(0);
if (StringUtils.isBlank(param)) {
return map;
}
String[] params = param.split("&");
for (int i = 0; i < params.length; i++) {
String[] p = params[i].split("=");
if (p.length == 2) {
map.put(p[0], p[1]);
}
}
return map;
}
/**
* 将map转换成url
*
* @param map
* @return {String}
*/
public static String getUrlParamsByMap(Map<String, Object> map) {
if (map == null) {
return "";
}
StringBuffer sb = new StringBuffer();
for (Map.Entry<String, Object> entry : map.entrySet()) {
sb.append(entry.getKey() + "=" + entry.getValue());
sb.append("&");
}
String s = sb.toString();
if (s.endsWith("&")) {
s = StringUtils.substringBeforeLast(s, "&");
}
return s;
}
}
......@@ -2,7 +2,6 @@ package com.jpay.vo;
public class AjaxResult {
// 标记成功失败,默认0:成功,1:失败、用于alert,2:失败、用于confirm
private int code = 0;
// 返回的中文消息
......
package com.jpay.weixin.api;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.jpay.ext.kit.StrKit;
/**
* @author Javen
* 2017年5月22日
*/
public class WxPayApiConfigKit {
private static final ThreadLocal<WxPayApiConfig> tl = new ThreadLocal<WxPayApiConfig>();
private static final ThreadLocal<String> TL = new ThreadLocal<String>();
public static void setThreadLocalWxPayApiConfig(WxPayApiConfig wxPayApiConfig) {
tl.set(wxPayApiConfig);
}
private static final Map<String, WxPayApiConfig> CFG_MAP = new ConcurrentHashMap<String, WxPayApiConfig>();
private static final String DEFAULT_CFG_KEY = "_default_ijpay_key_";
public static void removeThreadLocalApiConfig() {
tl.remove();
}
/**
* 添加微信支付配置,每个appId只需添加一次,相同appId将被覆盖
* @param wxPayApiConfig 微信支付配置
* @return {WxPayApiConfig} 微信支付配置
*/
public static WxPayApiConfig putApiConfig(WxPayApiConfig wxPayApiConfig) {
if (CFG_MAP.size() == 0) {
CFG_MAP.put(DEFAULT_CFG_KEY, wxPayApiConfig);
}
return CFG_MAP.put(wxPayApiConfig.getAppId(), wxPayApiConfig);
}
public static WxPayApiConfig getWxPayApiConfig() {
WxPayApiConfig result = tl.get();
if (result == null)
throw new IllegalStateException("需要事先使用 WxPayApiConfigKit.setThreadLocalWxPayApiConfig(wxPayApiConfig) 将 wxPayApiConfig对象存入,才可以调用 WxPayApiConfigKit.getWxPayApiConfig() 方法");
return result;
}
public static WxPayApiConfig setThreadLocalWxPayApiConfig(WxPayApiConfig wxPayApiConfig) {
return putApiConfig(wxPayApiConfig);
}
public static WxPayApiConfig removeApiConfig(WxPayApiConfig wxPayApiConfig) {
return removeApiConfig(wxPayApiConfig.getAppId());
}
public static WxPayApiConfig removeApiConfig(String appId) {
return CFG_MAP.remove(appId);
}
public static void setThreadLocalAppId(String appId) {
if (StrKit.isBlank(appId)) {
appId = CFG_MAP.get(DEFAULT_CFG_KEY).getAppId();
}
TL.set(appId);
}
public static void removeThreadLocalAppId() {
TL.remove();
}
public static String getAppId() {
String appId = TL.get();
if (StrKit.isBlank(appId)) {
appId = CFG_MAP.get(DEFAULT_CFG_KEY).getAppId();
}
return appId;
}
public static WxPayApiConfig getWxPayApiConfig() {
String appId = getAppId();
return getApiConfig(appId);
}
public static WxPayApiConfig getApiConfig(String appId) {
WxPayApiConfig cfg = CFG_MAP.get(appId);
if (cfg == null)
throw new IllegalStateException("需事先调用 WxPayApiConfigKit.putApiConfig(wxPayApiConfig) 将 appId对应的 WxPayApiConfig 对象存入," +
"才可以使用 WxPayApiConfigKit.getWxPayApiConfig() 的系列方法");
return cfg;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册