龙岩新增病例行动轨迹_外包公司排名前十_手游代理平台代理_微盟微商城怎么样
public class PayController {@Resourceprivate WechatPayConfig wechatPayConfig;@Resourceprivate WechatPayRequest wechatPayRequest;@Resourceprivate CloseableHttpClient wxPayNoSignClient;@ApiOperation(value = "统一下单-统一接口", notes = "统一下单-统一接口")@ApiOperationSupport(order = 10)@GetMapping("/transactions")public Map<String,Object> transactions(String type) {log.info("统一下单API,支付方式:{}",type);Map<String, Object> params = new HashMap<>(8);params.put("appid", wechatPayConfig.getAppId());params.put("mchid", wechatPayConfig.getMchId());params.put("description", "测试商品");int outTradeNo = new Random().nextInt(999999999);params.put("out_trade_no", outTradeNo + "");params.put("notify_url", wechatPayConfig.getNotifyUrl());Map<String, Object> amountMap = new HashMap<>(4);amountMap.put("total", 1);amountMap.put("currency", "CNY");params.put("amount", amountMap);Map<String, Object> sceneInfoMap = new HashMap<>(4);sceneInfoMap.put("payer_client_ip", "127.0.0.1");sceneInfoMap.put("device_id", "127.0.0.1");if (type.equals(WechatPayUrlEnum.H5.getType())) {Map<String, Object> h5InfoMap = new HashMap<>(4);h5InfoMap.put("type", "IOS");sceneInfoMap.put("h5_info", h5InfoMap);} else if (type.equals(WechatPayUrlEnum.JSAPI.getType()) || type.equals(WechatPayUrlEnum.SUB_JSAPI.getType())) {Map<String, Object> payerMap = new HashMap<>(4);payerMap.put("openid", "123123123");params.put("payer", payerMap);}params.put("scene_info", sceneInfoMap);String paramsStr = JSON.toJSONString(params);log.info("请求参数 ===> {}" + paramsStr);String[] split = type.split("_");String newType = split[split.length - 1];String resStr = wechatPayRequest.wechatHttpPost(wechatPayConfig.getBaseUrl().concat(WechatPayUrlEnum.PAY_TRANSACTIONS.getType().concat(newType)), paramsStr);Map<String, Object> resMap = JSONObject.parseObject(resStr, new TypeReference<Map<String, Object>>(){});Map<String, Object> signMap = paySignMsg(resMap, type);resMap.put("type",type);resMap.put("signMap",signMap);return resMap;}private Map<String, Object> paySignMsg(Map<String, Object> map,String type){if(type.equals(WechatPayUrlEnum.H5.getType()) || type.equals(WechatPayUrlEnum.NATIVE.getType()) ){return null;}long timeMillis = System.currentTimeMillis();String appId = wechatPayConfig.getAppId();String timeStamp = timeMillis/1000+"";String nonceStr = timeMillis+"";String prepayId = map.get("prepay_id").toString();String packageStr = "prepay_id="+prepayId;Map<String, Object> resMap = new HashMap<>();resMap.put("nonceStr",nonceStr);resMap.put("timeStamp",timeStamp);if(type.equals(WechatPayUrlEnum.JSAPI.getType()) || type.equals(WechatPayUrlEnum.SUB_JSAPI.getType()) ) {resMap.put("appId",appId);resMap.put("package", packageStr);String paySign = createSign(resMap);resMap.put("paySign", paySign);resMap.put("signType", "HMAC-SHA256");}if(type.equals(WechatPayUrlEnum.APP.getType())) {resMap.put("appid",appId);resMap.put("prepayid", prepayId);String sign = createSign(resMap);resMap.put("package", "Sign=WXPay");resMap.put("partnerid", wechatPayConfig.getMchId());resMap.put("sign", sign);resMap.put("signType", "HMAC-SHA256");}return resMap;}private String createSign(Map<String, Object> params){try {Map<String, Object> treeMap = new TreeMap<>(params);List<String> signList = new ArrayList<>(5);for (Map.Entry<String, Object> entry : treeMap.entrySet()){signList.add(entry.getKey() + "=" + entry.getValue());}String signStr = String.join("&", signList);signStr = signStr+"&key="+wechatPayConfig.getApiV3Key();System.out.println(signStr);Mac sha = Mac.getInstance("HmacSHA256");SecretKeySpec secretKey = new SecretKeySpec(wechatPayConfig.getApiV3Key().getBytes(StandardCharsets.UTF_8), "HmacSHA256");sha.init(secretKey);byte[] array = sha.doFinal(signStr.getBytes(StandardCharsets.UTF_8));StringBuilder sb = new StringBuilder();for (byte item : array) {sb.append(Integer.toHexString((item & 0xFF) | 0x100), 1, 3);}signStr = sb.toString().toUpperCase();System.out.println(signStr);return signStr;}catch (Exception e){throw new RuntimeException("加密失败!");}}">