支付宝h5支付对接

来源:互联网 发布:高维数据进行降维 编辑:程序博客网 时间:2024/06/10 09:06

不用支付宝的api。太恶心了2M多。献给对接支付宝h5支付的小伙伴们public static void main(String[] args) throws UnsupportedEncodingException {Map<String, String> requestMap = new TreeMap<String, String>();//涉及到排序用treemapMap<String, String> bizMap = new TreeMap<String, String>();//这个可用hashmaprequestMap.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;    }


原创粉丝点击