龙岩新增病例行动轨迹_外包公司排名前十_手游代理平台代理_微盟微商城怎么样 public class PayController {@Resourceprivate WechatPayConfig wechatPayConfig;@Resourceprivate WechatPayRequest wechatPayRequest;/*** 无需应答签名*/@Resourceprivate CloseableHttpClient wxPayNoSignClient;/*** type:h5、jsapi、app、native、sub_jsapi* @param type* @return*/@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);// 客户端IPsceneInfoMap.put("payer_client_ip", "127.0.0.1");// 商户端设备号(门店号或收银设备ID)sceneInfoMap.put("device_id", "127.0.0.1");// 除H5与JSAPI有特殊参数外,其他的支付方式都一样if (type.equals(WechatPayUrlEnum.H5.getType())) {Map<String, Object> h5InfoMap = new HashMap<>(4);// 场景类型:iOS, Android, Waph5InfoMap.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);// 重写type值,因为小程序会多一个下划线(sub_type)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){// 设置签名信息,Native与H5不需要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);// JSAPI、SUB_JSAPI(小程序)if(type.equals(WechatPayUrlEnum.JSAPI.getType()) || type.equals(WechatPayUrlEnum.SUB_JSAPI.getType()) ) {resMap.put("appId",appId);resMap.put("package", packageStr);// 使用字段appId、timeStamp、nonceStr、package进行签名String paySign = createSign(resMap);resMap.put("paySign", paySign);resMap.put("signType", "HMAC-SHA256");}// APPif(type.equals(WechatPayUrlEnum.APP.getType())) {resMap.put("appid",appId);resMap.put("prepayid", prepayId);// 使用字段appId、timeStamp、nonceStr、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("加密失败!");}}">

公司网页怎么做的

企业名称查重、天津网站建设招聘、永久使用、不限域名、深圳迈瑞医疗器械有限公司官网

万户网络有限责任公司?

龙岩新增病例行动轨迹_外包公司排名前十_手游代理平台代理_微盟微商城怎么样

怎么做网页的搜索功能广州站八个字嵌入式软件开发用什么语言企业网站的劣势全国企业信用查询系统web动态网页设计步骤盘锦网站建设公司室内设计万能设计说明桂林欣梦网络移动互联网开发论文优化师和运营区别泰安网络推广联系昔年下拉互联网直播营销大赛主题网络平台贷款还不了会有什么后果智慧管理平台系统深圳公司网站设计企业南昌网站建设模板总部邯郸铸邯网络信息科技有限公做一个软件大概要多少钱张家界简单的网站建设怎么建立一个网站域名建立网站需要多少钱 激发湖南岚鸿重庆男科医院哪家好展厅网站企业级服务器配置企业名称预先核准网上申请系统南京手机网站设计哪里专业海报模板免费网站河南郑州富士康大量员工徒步返乡亚洲av成人片无码网站在线观看app开发需要用到哪些工具

猜你喜欢

  • 友情链接:
  • 2021年不付费黄台软件下载 网络安全网站 无锡品牌网站建设介绍 小程序二维码怎么生成链接 武汉本地新闻最新消息 义乌网八方资源家1688网商网