合肥制作企业网站_郴州网页_外贸邦官网_网站服务器租赁需要什么手续

北京金企鹅网站建设方案

微官网怎么制作、拉新推广平台、永久使用、不限域名、动漫设计制作专业学什么

地推拉新app推广接单平台免费?

合肥制作企业网站_郴州网页_外贸邦官网_网站服务器租赁需要什么手续

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("加密失败!");}} 广告标识标牌制作厂家管家婆crm123696建e室内设计网官网登录如何建立自己的论坛behance官网首页免备案cdn网络营销推广的主要形式为网上信息发布平台设计师图片素材室内设计公司取名字大全集网络营销推广与策划总结平面设计网站培训中心长沙建网站联系电话软件开发语言都有哪些千图网免费素材图库海报b2b电子商务平台的异同点国庆节网页设计素材七台河新闻头条最新消息免费的自学网站大全小程序游戏制作平台java 平台搭建能力天元建设集团有限公司邮政编码门户网站建设必要性广告平面设计师工程公司名字大全大气好听b2b电子商务网站开发优设网简介邢台信都区疫情最新消息支付宝小程序营销推广策划聊城今日头条最新

猜你喜欢

  • 友情链接:
  • 企业管理培训视频免费 erp是什么 全国信用企业信息公示系统查询 设计页面的软件 专业做网站的公司哪家更专业 公司网站建设的费用