支付平台对接,主要对接3个接口。
1 余额查询
2 批量支付
3 批量查询
import com.alibaba.fastjson.JSON;
import org.springframework.util.DigestUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
/**
* @className: SignUtil
* @description: 签名工具类
* @date: 2021/11/1
* @author: cakin
*/
public class SignUtil {
public static final String RM = "sign";
public static final String APP_SECRET = "appSecret";
private final String key = "xxxxxxxx";
public static void main(String[] args) {
// 签名举例
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("merchantId", "xxxxxx");
long l = System.currentTimeMillis();
paramMap.put("timestamp", l + "");
System.out.println(l+"");
String sign = SignUtil.getSign(JSON.parseObject(JSON.toJSONString(paramMap)), "afeb523441a170f8");
System.out.println(sign);
String str = "xxxxxx";
System.out.println(str.substring(2,str.length()-2));
}
/**
* 获取签名
*
* @param paramMap 包含所有业务参数,和appKey,nonce,timestamp这3个公共参数
* @param appSecret
* @return
*/
public static String getSign(Map<String, Object> paramMap, String appSecret) {
String text = getUrlText(paramMap);
text += "&appSecret=" + appSecret;
return DigestUtils.md5DigestAsHex(text.getBytes()).toUpperCase();
}
private static String getUrlText(Map<String, Object> beanMap) {
beanMap = getSortedMap(beanMap);
StringBuilder builder = new StringBuilder();
for (String key : beanMap.keySet()) {
String value = beanMap.get(key).toString();
builder.append(key);
builder.append('=');
builder.append(value);
builder.append('&');
}
String text = builder.toString();
return text.substring(0, text.length() - 1);
}
public static Map<String, String> transMap(String str) {
String[] key_value = str.split("&");
Map<String, String> map = new HashMap<String, String>();
for (String e : key_value) {
String[] value = e.split("=");
if(value == null || value.length != 2){
continue;
}
map.put(value[0], value[1]);
}
return map;
}
/**
* 对普通 map 进行排序
*
* @param paramMap
* @return
*/
private static Map<String, Object> getSortedMap(Map<String, Object> paramMap) {
SortedMap<String, Object> map = new TreeMap<String, Object>();
for (String key : paramMap.keySet()) {
if (key != null && !APP_SECRET.equals(key) && !RM.equals(key)) {
Object value = paramMap.get(key);
if (value != null) {
String valueStr = String.valueOf(value);
if (valueStr != null && !"".equals(valueStr)) {
map.put(key, value);
}
}
}
}
return map;
}
public static String getUrlParams(Map<String, Object> beanMap) {
StringBuilder builder = new StringBuilder();
for (String key : beanMap.keySet()) {
String value = "";
if(beanMap.get(key) != null ){
value = beanMap.get(key).toString();
}
builder.append(key);
builder.append('=');
builder.append(value);
builder.append('&');
}
String text = builder.toString();
return text.substring(0, text.length() - 1);
}
public Boolean signatureVerification(Map<String,Object> paramMap,String sign){
String sign1 = SignUtil.getSign(JSON.parseObject(JSON.toJSONString(paramMap)), key);
if(null == sign1 || !sign.equals(sign1)){
return false;
}
return true;
}
}
import com.alibaba.fastjson.JSON;
import com.project.common.util.hxxutil.RsaUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.project.common.util.HttpClientUtils.sendPostByJsonWithHeader;
import static com.project.common.util.hxxutil.RsaUtils.encrypt;
class Entity {
private String merchantId;
private String timestamp;
private String sign;
private String data;
public String getMerchantId() {
return merchantId;
}
public void setMerchantId(String merchantId) {
this.merchantId = merchantId;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
// 支付个人
class PersonInfo {
// 非必须 开户地
String bankAddress;
// 必须 银行卡号
String bankCode;
// 非必须 开户行
String bankName;
// 必须 创客身份证号码
String idcardCode;
// 必须 手机号
String mobileCode;
// 非必须 提现方式
String paymentMethod;
// 必须 提现金额
String realMoney;
// 必须 户名
String workerName;
public String getBankAddress() {
return bankAddress;
}
public void setBankAddress(String bankAddress) {
this.bankAddress = bankAddress;
}
public String getBankCode() {
return bankCode;
}
public void setBankCode(String bankCode) {
this.bankCode = bankCode;
}
public String getBankName() {
return bankName;
}
public void setBankName(String bankName) {
this.bankName = bankName;
}
public String getIdcardCode() {
return idcardCode;
}
public void setIdcardCode(String idcardCode) {
this.idcardCode = idcardCode;
}
public String getMobileCode() {
return mobileCode;
}
public void setMobileCode(String mobileCode) {
this.mobileCode = mobileCode;
}
public String getPaymentMethod() {
return paymentMethod;
}
public void setPaymentMethod(String paymentMethod) {
this.paymentMethod = paymentMethod;
}
public String getRealMoney() {
return realMoney;
}
public void setRealMoney(String realMoney) {
this.realMoney = realMoney;
}
public String getWorkerName() {
return workerName;
}
public void setWorkerName(String workerName) {
this.workerName = workerName;
}
}
public class Test {
public static void main(String[] args) throws Exception {
// queryBalance(); // 查余额
// batchPayment(); // 批量支付
batchQueryPayment(); // 批量查询
}
public static void batchQueryPayment() throws Exception {
String merchantId = "xxxxx554980982786";
String appSecret = "xxxxx3441a170f8";
String url = "http://xxxxx.wicp.vip/foreign/batchQueryOrderDetail"; // 测试
Map<String, String> params = generateQueryParam(appSecret, merchantId);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
Entity entity = new Entity();
entity.setMerchantId(params.get("merchantId"));
entity.setTimestamp(params.get("timestamp"));
entity.setSign(params.get("sign"));
entity.setData("1455163868375527425");
String apiString = JSON.toJSONString(entity);
String result = sendPostByJsonWithHeader(url, apiString, headers);
System.out.println(result);
}
public static void batchPayment() throws Exception {
String merchantId = "xxxxx554980982786";
String appSecret = "xxxxx3441a170f8";
String url = "http://xxxxx.wicp.vip/foreign/batchWithdrawal"; // 测试
Map<String, String> params = generateQueryParam(appSecret, merchantId);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
Entity entity = new Entity();
entity.setMerchantId(params.get("merchantId"));
entity.setTimestamp(params.get("timestamp"));
entity.setSign(params.get("sign"));
PersonInfo personInfo = new PersonInfo();
personInfo.setBankCode("xxxxx4229999690147"); // 银行卡号
personInfo.setIdcardCode("xxxxx"); // 身份证号码
personInfo.setMobileCode("xxxxx"); // 手机号
personInfo.setRealMoney("10.00"); // 提现金额
personInfo.setWorkerName("xxx"); // 户名
personInfo.setPaymentMethod("UNIONPABK"); // 支付方式
List<PersonInfo> data = new ArrayList<>();
data.add(personInfo);
String dataString = JSON.toJSONString(data);
// 非加密
//entity.setData(dataString);
// 加密
String encryptDataString = encrypt(dataString, RsaUtils.publicKey);
entity.setData(encryptDataString);
String apiString = JSON.toJSONString(entity);
String result = sendPostByJsonWithHeader(url, apiString, headers);
System.out.println(result);
}
public static void queryBalance() throws Exception {
String merchantId = "xxxxx554980982786";
String appSecret = "xxxxx3441a170f8";
String url = "http://xxxxx.wicp.vip/foreign/getMerchantInfoAndOnlinePaymentInfoToBY"; // 测试
Map<String, String> params = generateQueryParam(appSecret, merchantId);
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
Entity entity = new Entity();
entity.setMerchantId(params.get("merchantId"));
entity.setTimestamp(params.get("timestamp"));
entity.setSign(params.get("sign"));
String apiString = JSON.toJSONString(entity);
String result = sendPostByJsonWithHeader(url, apiString, headers);
System.out.println(result);
}
private static Map<String, String> generateQueryParam(String appSecret, String merchantId) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("merchantId", merchantId);
long l = System.currentTimeMillis();
String timestamp = l + "";
paramMap.put("timestamp", timestamp);
String sign = SignUtil.getSign(JSON.parseObject(JSON.toJSONString(paramMap)), appSecret);
Map<String, String> params = new HashMap<>();
params.put("merchantId", merchantId);
params.put("timestamp", timestamp);
params.put("sign", sign);
return params;
}
}
{
"code": 200,
"finished": false,
"state": "success",
"itemsCount": 0,
"pageSize": 10,
"obj": {
"companyTaxPayMethodVO": [{
"taxId": "xxxxx",
"taxName": "xxxxx",
"packageType": "TOTALPACKAGE",
"paymentMethod": "UNIONPABK",
"balance": xxxxx
}],
"merchantId": "xxxxx",
"companyName": "xxxxx"
}
}
{
"code": 200,
"message": "1455163868375527425",
"finished": false,
"state": "success",
"itemsCount": 0,
"pageSize": 10
}
{
"code": 200,
"finished": false,
"state": "success",
"itemsCount": 0,
"pageSize": 10,
"obj": {
"orderId": "1455163868375527425",
"paymentStatus": 2,
"orderInfoVOList": [{
"workerName": "xxxxx",
"idCardCode": "xxxxx",
"paymentStatus": 0,
"tradeFailReason": ""
}]
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/121089515
内容来源于网络,如有侵权,请联系作者删除!