SpringBoot-RestTemplate实现调用第三方API传参问题

SpringBoot-RestTemplate传参请求第三方接口时,参数传不过去,因为我用了 Map<String, String> data = new HashMap<String, String>();这样是不行的,必须使用MultiValueMap<String, String> params= new LinkedMultiValueMap<>();传参。

package com.cn.wtsd.service;

import com.alibaba.fastjson.JSONObject;
import com.cn.wtsd.config.WanTongConfig;
import com.cn.wtsd.constant.CodeConstant;
import com.cn.wtsd.entity.ResultModel;
import com.cn.wtsd.util.DESUtils;
import com.cn.wtsd.util.SignUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

/**
 * @program: Transaction
 * @description: 支付接口
 * @author: hantao
 * @create: 2018-12-28 18:06
 */
@Service
public class PayService {

    @Autowired
    private RestTemplate restTemplate;

    public ResultModel pay(){
        Map<String, String> map = new HashMap<String, String>();
        map.put("OUTTRADENO", System.currentTimeMillis() + "");
        map.put("PAYAMOUNT", "100");
        map.put("PAYTYPE", "01");
        map.put("CHANNEL", "01");
        map.put("SOURCE", "02");
//        map.put("OPENID", "02");
        map.put("ORDERTITLE", "顾客付款");
        map.put("ID", "100013100101");
        map.put("TERMINALID", "YY100013100101");
        String body="";
        try {
            //参数加密
            String encodeByCBC = DESUtils.encodeByCBC(WanTongConfig.ENCRVPTION_KEY, map);
            System.out.println("encodeByCBC:"+encodeByCBC);
//            SIGN加密
            Map<String, String> requestMap = new HashMap<String, String>();
            requestMap.put("PARTNERID", "100013");
            requestMap.put("ENCRYPTEDDATA", encodeByCBC);
            String presign = SignUtil.creatSignContent(requestMap, "UTF-8", false);
            presign = presign + "&key="+WanTongConfig.SINGN_KEY;
            System.out.println("待签名的字符串:"+presign);
            String sign = SignUtil.md5(presign, "UTF-8");
            System.out.println("sign:"+sign);
//            Map<String, String> data = new HashMap<String, String>();
//            data.put("PARTNERID","100013");
//            data.put("ENCRYPTEDDATA",encodeByCBC);
//            data.put("SIGN",sign);
            MultiValueMap<String, String> params= new LinkedMultiValueMap<>();
            //添加请求的参数
            params.add("PARTNERID", "100013");             //必传
            params.add("ENCRYPTEDDATA", encodeByCBC);
            params.add("SIGN", sign);
//            HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params);
            ResponseEntity<String> responseEntity=restTemplate.postForEntity(WanTongConfig.REQUEST_PAY_URL,params,String.class);
            body=responseEntity.getBody();
        } catch (Exception e) {
//            e.printStackTrace();
            return new ResultModel(CodeConstant.FAIL,"签名或参数加密失败");
        }
        return new ResultModel(CodeConstant.SUCCESS,CodeConstant.SUCCESS_MSG,body);
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_43969830/article/details/85336159