网站制作公司哪家口碑好_互联网接入服务商有哪些_惠州网站建设方案服务_公司名称注册流程 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前端开发一般学多久 开发平台搭建步骤 北京电力交易中心app 菏泽正规网站开发哪家好 广州soho建站