Commit 59bacb0a463397fd26d9548d8d7db1f21e273bdb

Authored by shiyang
1 parent 0ec7fd42a0
Exists in master

小程序-支付接口修改

Showing 2 changed files with 84 additions and 4 deletions

talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/OrderController.java View file @ 59bacb0
... ... @@ -20,6 +20,7 @@
20 20 import org.springframework.web.bind.annotation.RequestBody;
21 21 import org.springframework.web.bind.annotation.RequestMapping;
22 22 import org.springframework.web.bind.annotation.RestController;
  23 +import sun.security.provider.MD5;
23 24  
24 25 import javax.servlet.http.HttpServletRequest;
25 26 import javax.servlet.http.HttpServletResponse;
... ... @@ -181,10 +182,20 @@
181 182 String success = "SUCCESS";
182 183 if (retMap != null && retMap.size() > 0 && success.equals(retMap.get("return_code")) && success.equals(retMap.get("result_code")))
183 184 {
184   - data.put("payId",retMap.get("prepay_id"));
185   - data.put("nonce_str",retMap.get("nonce_str"));
186   - data.put("paySign",retMap.get("sign"));
187   - data.put("timestamp",System.currentTimeMillis()/1000+"");
  185 + SortedMap<Object,Object> map=new TreeMap<>();
  186 + String nonceStr=NumberUtil.getRandomString(16);
  187 + String timeStamp=System.currentTimeMillis()/1000+"";
  188 + map.put("appId",Constant.PAT_APP_ID);
  189 + map.put("nonceStr",nonceStr);
  190 + map.put("package","prepay_id="+retMap.get("prepay_id"));
  191 + map.put("signType","MD5");
  192 + map.put("timeStamp",timeStamp);
  193 + System.out.println("createSign:"+createSign(null, map));
  194 +
  195 + data.put("packageValue",retMap.get("prepay_id"));
  196 + data.put("nonceStr",nonceStr);
  197 + data.put("paySign",createSign(null, map));
  198 + data.put("timeStamp",timeStamp);
188 199 return data;
189 200 }
190 201 }
... ... @@ -397,6 +408,34 @@
397 408 String localSign = PayDigestUtil.getSign(map, Constant.REQ_KEY, "sign");
398 409 String sign = map.get("sign");
399 410 return localSign.equalsIgnoreCase(sign);
  411 + }
  412 +
  413 +
  414 + /**
  415 + * 微信支付签名算法sign
  416 + * @param characterEncoding
  417 + * @param parameters
  418 + * @return
  419 + */
  420 + public static String createSign(String characterEncoding,SortedMap<Object,Object> parameters){
  421 + StringBuffer sb = new StringBuffer();
  422 + Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序)
  423 + Iterator it = es.iterator();
  424 + while(it.hasNext()) {
  425 + Map.Entry entry = (Map.Entry)it.next();
  426 + String k = (String)entry.getKey();
  427 + Object v = entry.getValue();
  428 + if(null != v && !"".equals(v)
  429 + && !"sign".equals(k) && !"key".equals(k)) {
  430 + sb.append(k + "=" + v + "&");
  431 + }
  432 + }
  433 +
  434 + sb.append("key=" + Constant.REQ_KEY);
  435 + System.out.println("签名字符串:"+sb.toString());
  436 + System.out.println("签名MD5未变大写:" + MD5Util.MD5Encode(sb.toString(), characterEncoding));
  437 + String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
  438 + return sign;
400 439 }
401 440  
402 441  
talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/MD5Util.java View file @ 59bacb0
... ... @@ -6,6 +6,9 @@
6 6 /**
7 7 */
8 8 public class MD5Util {
  9 + private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
  10 + "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"
  11 + };
9 12  
10 13 /**
11 14 * md5加密
... ... @@ -36,5 +39,43 @@
36 39 return null;
37 40 }
38 41 }
  42 +
  43 + /**
  44 + * md5加密并转为大写
  45 + * @param origin 拼接的字符串
  46 + * @return
  47 + */
  48 + public static String MD5Encode(String origin, String charsetname) {
  49 + String resultString = null;
  50 + try {
  51 + resultString = new String(origin);
  52 + MessageDigest md = MessageDigest.getInstance("MD5");
  53 + if (charsetname == null || "".equals(charsetname))
  54 + resultString = byteArrayToHexString(md.digest(resultString
  55 + .getBytes()));
  56 + else
  57 + resultString = byteArrayToHexString(md.digest(resultString
  58 + .getBytes(charsetname)));
  59 + } catch (Exception exception) {
  60 + }
  61 + return resultString;
  62 + }
  63 + private static String byteArrayToHexString(byte b[]) {
  64 + StringBuffer resultSb = new StringBuffer();
  65 + for (int i = 0; i < b.length; i++)
  66 + resultSb.append(byteToHexString(b[i]));
  67 +
  68 + return resultSb.toString();
  69 + }
  70 +
  71 + private static String byteToHexString(byte b) {
  72 + int n = b;
  73 + if (n < 0)
  74 + n += 256;
  75 + int d1 = n / 16;
  76 + int d2 = n % 16;
  77 + return hexDigits[d1] + hexDigits[d2];
  78 + }
  79 +
39 80 }