支付宝h5支付对接

不用支付宝的api。太恶心了2M多。
献给对接支付宝h5支付的小伙伴们

public static void main(String[] args) throws UnsupportedEncodingException {
Map<String, String> requestMap = new TreeMap<String, String>();//涉及到排序用treemap
Map<String, String> bizMap = new TreeMap<String, String>();//这个可用hashmap
requestMap.put("app_id", "");//支付宝分配的商户;
requestMap.put("method", "alipay.trade.wap.pay");
requestMap.put("return_url","");//前端回调地址
requestMap.put("charset", "utf-8");
requestMap.put("sign_type", "RSA");//用的rsa rsa2的自行百度 实际差不多
requestMap.put("timestamp", DateUtil.formatDate(new Date(), DateUtil.DATETIME));
requestMap.put("version", "1.0");
requestMap.put("notify_url", "");//后端回调地址
bizMap.put("body", "");
bizMap.put("subject", "");
bizMap.put("out_trade_no", "");
bizMap.put("total_amount", "0.01");
bizMap.put("product_code", "QUICK_WAP_WAY");
bizMap.put("seller_id", "");
requestMap.put("biz_content", JSONObject.toJSONString(bizMap));
String signParam = map2HttpParams(requestMap);
requestMap.put("sign", sign(signParam, "替换为你的签名私匙","utf-8"));
for (String key : requestMap.keySet()) {
if ("biz_content".equals(key)) {// 不对biz_content这个json串进行编码,看清楚喔,少踩坑
requestMap.put(key, requestMap.get(key));
} else {
requestMap.put(key, URLEncoder.encode(requestMap.get(key), "utf-8"));
}
}


String requestParamString=map2HttpParams(requestMap);
System.out.println("支付宝请求url = " + "https://openapi.alipay.com/gateway.do?" +requestParamString);

//查询验签我就不贴出来了 都差不多,但是一定要注意// 我用的net.sf.json,阿里的 fastjson在解析json对象源码中会new HashMap 会打乱原本的字符串顺序。
}


/**
* 将map转换为 http请求参数串
*/
public static String map2HttpParams(Map<String, String> map) {
if (map == null || map.size()==0) {
return "";
}
StringBuffer sb = new StringBuffer();
for (Map.Entry<String, String> entry : map.entrySet()) {
if (null == entry.getValue() || "".equals(entry.getValue())) {
continue;
}
sb.append(entry.getKey() + "=" + entry.getValue());
sb.append("&");
}
String s = sb.toString();
if (s.endsWith("&")) {
s = StringUtils.substringBeforeLast(s, "&");
}
return s;
}


public static String sign(String content, String privateKey, String input_charset) {
        try {
        PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec( Base64.decode(privateKey) ); 
        KeyFactory keyf = KeyFactory.getInstance("RSA");
        PrivateKey priKey = keyf.generatePrivate(priPKCS8);
            java.security.Signature signature = java.security.Signature
                .getInstance("SHA1WithRSA");//如果是rsa2对应选择rsa2的
            signature.initSign(priKey);
            signature.update( content.getBytes(input_charset) );
            byte[] signed = signature.sign();
            return Base64.encode(signed);
        } catch (Exception e) {
        }
        return null;
    }


猜你喜欢

转载自blog.csdn.net/woyixinyiyi/article/details/78486502